CSI Cinder 드라이버

1 개요[ | ]

CSI Cinder driver
CSI Cinder 드라이버

https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md

Cinder CSI 드라이버는 컨테이너 오케스트레이터가 OpenStack Cinder 볼륨의 수명주기를 관리하는 데 사용하는 CSI 사양을 준수하는 드라이버입니다.

2 CSI 호환성[ | ]

이 플러그인은 CSI v1.8.0과 호환됩니다.

2.1 다운로드[ | ]

플러그인의 안정적인 릴리스 버전 이미지는 registry.k8s.io/provider-os/cinder-csi-plugin:[릴리스 태그]에서 가져올 수 있습니다.

2.2 Kubernetes 호환성[ | ]

각 Kubernetes 공식 릴리스마다 Kubernetes 릴리스와 호환되는 Cinder CSI 드라이버의 해당 릴리스가 있습니다. Kubernetes에 대해 해당 버전을 사용하는 것이 권장됩니다.

Kubernetes와의 사이드카 버전 호환성에 대해서는 각 사이드카의 호환성 매트릭스를 참조하십시오.

2.3 드라이버 배포[ | ]

manifests/cinder-csi-plugin에 있는 매니페스트를 사용하거나 Helm 차트 charts/cinder-csi-plugin을 사용할 수 있습니다.

2.3.1 커맨드 라인 인자[ | ]

표준 klog 플래그 세트 이외에도 cinder-csi-plugin은 다음 명령줄 인자를 받습니다:

--nodeid <노드 ID>
이 인자는 사용 중단되었습니다. 향후 제거될 예정입니다. OpenStack API 호출에 사용되는 현재 노드에 대한 식별자입니다. 이것은 OpenStack 서버의 UUID 또는 이름일 수 있지만, 이름을 사용할 경우 반드시 고유해야 합니다.
--endpoint <endpoint>
이 인자는 필수입니다. gRPC 서버 에이전트가 이 CSI 플러그인에 연결하는 데 사용할 엔드포인트이며, 일반적으로 로컬 유닉스 소켓입니다.
매니페스트는 이를 CSI_ENDPOINT 환경 변수로 제공되는 unix://csi/csi.sock으로 기본 설정합니다.
--with-topology <enabled>
true로 설정하면 CSI 드라이버가 토폴로지 정보를 보고하고 컨트롤러가 이를 준수합니다. 기본값은 `true` (활성화됨)입니다.
--cloud-config <config file> [--cloud-config <config file> ...]
이 인자는 최소한 한 번은 제공되어야 합니다. 드라이버 구성 파일의 경로입니다. 이 파일의 형식은 [드라이버 구성](#driver-config)에서 지정됩니다.
여러 구성 파일이 제공될 경우 병합됩니다. 충돌이 발생하면 마지막으로 제공된 구성 파일이 우선합니다.
매니페스트는 이를 CLOUD_CONFIG 환경 변수로 제공되는 /etc/config/cloud.conf로 기본 설정합니다.
--cluster <cluster name>
이 인자는 선택 사항입니다. 플러그인이 실행 중인 클러스터의 식별자입니다.
이것은 이 플러그인이 생성하는 모든 Cinder 볼륨에 메타데이터로 추가됩니다.
--http-endpoint <HTTP server>
이 인자는 선택 사항입니다.
진단용 메트릭을 제공하기 위한 HTTP 서버가 수신할 TCP 네트워크 주소(ex: `:8080`)입니다.
기본값은 빈 문자열이며, 이는 서버가 비활성화됨을 의미합니다.
--provide-controller-service <enabled>
true로 설정하면 CSI 드라이버가 컨트롤러 서비스를 제공합니다.
기본값은 `true` (활성화됨)입니다.
--provide-node-service <enabled>
true로 설정하면 CSI 드라이버가 노드 서비스를 제공합니다.
기본값은 `true` (활성화됨)입니다.
--pvc-annotations <disabled>
true로 설정하면 CSI 드라이버가 PVC 주석을 사용하여 볼륨 스케줄러 힌트를 제공합니다. 자세한 내용은 [지원되는 PVC 주석](#supported-pvc-annotations)을 참조하십시오.
기본값은 `false` (비활성화됨)입니다.

3 드라이버 설정[ | ]

cinder-csi-plugin`의 구현체는 다음 OpenStack 서비스를 기반으로 합니다.

서비스 API 버전 사용중단 여부 필수 여부
Identity (Keystone) v3 아니오
Compute (Nova) v2 아니오
Block Storage (Cinder) v3 아니오

드라이버 설정의 경우, 매개변수는 $CLOUD_CONFIG 환경변수에 지정된 설정 파일을 통해 전달되어야 합니다. 설정 파일에서는 다음 섹션이 지원됩니다.

3.1 Global[ | ]

Cinder CSI 플러그인이 OpenStack Keystone과 인증할 수 있도록 필요한 매개변수는 파일의 [Global] 섹션에 전달해야 합니다. 지원되는 모든 매개변수에 대해서는 Global 섹션을 참조하십시오.

3.2 Block Storage[ | ]

이 설정 옵션은 블록 스토리지에 관한 것이며 $CLOUD_CONFIG 파일의 [BlockStorage] 섹션에 나타나야 합니다.

  • node-volume-attach-limit 선택사항. 노드에 연결할 수 있는 최대 볼륨을 설정합니다. 기본값은 256입니다.
  • rescan-on-resize 선택사항. 파일 시스템을 확장하기 전에 블록 장치를 다시 검색하고 크기를 확인하려면 true로 설정하십시오. 모든 하이퍼바이저에 /sys/class/block/XXX/device/rescan 위치가 있는 것은 아니므로, 이 옵션을 활성화하고 하이퍼바이저에서 이를 지원하지 않는 경우 경고 로그가 resize 이벤트 시 출력됩니다. 이런 경우 이 옵션을 비활성화하는 것이 좋습니다. 기본값은 false입니다.
  • ignore-volume-az 선택사항. Topology 기능이 활성화된 경우 기본적으로 PV 볼륨 노드 애피니티는 볼륨 접근 토폴로지(볼륨 AZ)로 채워집니다. 그러나 일부 OpenStack 사용자의 경우 컴퓨트 영역이 볼륨 영역과 정확히 같은 이름이 아닐 수 있습니다. 이로 인해 파드가 보류 상태로 들어갈 수 있으며 볼륨 AZ에는 사용 가능한 노드가 없습니다. ignore-volume-az=true를 활성화하면 volumeAZ를 무시하고 사용 가능한 모든 노드 AZ에 예약합니다. 기본값은 false입니다. 자세한 내용은 nova 설정을 참조하십시오.
  • ignore-volume-microversion 선택사항. cinder 마이크로버전이 3.34보다 오래된 경우에만 true로 설정합니다. 이로 인해 일부 기능이 예상대로 작동하지 않을 수 있지만 볼륨 생성과 같은 기본 작업은 허용하는 것이 목표입니다.

3.3 Metadata[ | ]

이 설정 옵션은 메타데이터에 관한 것이며 $CLOUD_CONFIG 파일의 [Metadata] 섹션에 나타나야 합니다.

  • search-order: 이 설정 키는 드라이버가 실행 중인 인스턴스와 관련된 메타데이터를 검색하는 방법에 영향을 미칩니다. 기본configDrive,metadataService의 경우 제공자가 먼저 사용 가능한 경우 설정 드라이브에서 인스턴스 메타데이터를 검색하고 그런 다음 메타데이터 서비스를 검색하도록 설정합니다. 대체 값은 다음과 같습니다:
    • configDrive - 설정 드라이브에서만 인스턴스 메타데이터 검색.
    • metadataService - 메타데이터 서비스에서만 인스턴스 메타데이터 검색.
    • metadataService,configDrive - 우선 사용가능한 경우 메타데이터 서비스에서 인스턴스 메타데이터를 검색하고, 그런 다음 설정 드라이브에서 검색.
설정 드라이브의 메타데이터가 시간이 지남에 따라 오래될 수 있는 반면에 메타데이터 서비스는 항상 최신 정보를 제공하므로 이 동작에 영향을 미치는 것이 바람직할 수 있습니다. 그러나 모든 OpenStack 클라우드가 설정 드라이브와 메타데이터 서비스를 모두 제공하는 것은 아니며, 하나 또는 다른 하나만 사용할 수 있으므로 기본적으로 둘 다 확인해야 합니다.

3.4 매니페스트 사용[ | ]

플러그인 배포에 필요한 모든 매니페스트는 manifests/cinder-csi-plugin에서 확인할 수 있습니다.

$CLOUD_CONFIG에 지정된 설정 파일은 쿠버네티스 secret를 통해 cinder CSI 드라이버에 전달됩니다. cloud-config 시크릿이 이미 클러스터에 생성된 경우, 파일 manifests/cinder-csi-plugin/csi-secret-cinderplugin.yaml을 제거하고 컨트롤러 및 노드 플러그인을 생성하는 단계로 바로 진행할 수 있습니다.

시크릿을 생성하려면:

  • $CLOUD_CONFIG 파일의 내용을 base64로 인코딩하십시오:
$ base64 -w 0 $CLOUD_CONFIG
  • 위의 명령어 결과를 사용하여 manifests/cinder-csi-plugin/csi-secret-cinderplugin.yaml 파일의 cloud.conf 설정을 업데이트하십시오.
  • 시크릿을 생성하십시오:
$ kubectl create -f manifests/cinder-csi-plugin/csi-secret-cinderplugin.yaml

이 명령은 kube-system 네임스페이스에 cloud-config라는 시크릿을 생성할 것입니다.

시크릿이 생성되면 각각의 매니페스트를 사용하여 컨트롤러 플러그인과 노드 플러그인을 배포할 수 있습니다:

$ kubectl -f manifests/cinder-csi-plugin/ apply

이 명령은 OpenStack(cinder)와 통신하는 클러스터 역할, 클러스터 역할 바인딩, 상태 저장 세트를 생성합니다. 생성된 객체 목록은 디렉토리의 yaml 파일을 탐색하여 자세히 확인하십시오. 계속하기 전에 다음과 같은 유사한 파드가 준비 상태인지 확인해야 합니다:

$ kubectl get pods -n kube-system
NAME                                READY   STATUS    RESTARTS   AGE
csi-cinder-controllerplugin         6/6     Running   0          29h
csi-cinder-nodeplugin               3/3     Running   0          46h

클러스터에서 실행 중인 CSI 드라이버 정보는 다음으로 얻을 수 있습니다-

$ kubectl get csidrivers.storage.k8s.io
NAME                       ATTACHREQUIRED   PODINFOONMOUNT   STORAGECAPACITY   TOKENREQUESTS   REQUIRESREPUBLISH   MODES                  AGE
cinder.csi.openstack.org   true             true             false             <unset>         false               Persistent,Ephemeral   19h

Note

인증서(ca-file)를 사용하는 경우, 매니페스트 (컨트롤러와 노드 플러그인)에 볼륨을 컨테이너에 마운트하기 위한 추가 마운트를 추가해야 합니다. 예를 들어 /etc/cacert 폴더에 ca-cert를 추가하십시오. manifests/cinder-csi-plugin/cinder-csi-controllerplugin.yamlmanifests/cinder-csi-plugin/cinder-csi-nodeplugin.yaml의 관련 섹션을 주석 해제하고 자신의 경로로 바꾸십시오.

       volumeMounts:
          ....
          - name: cacert
              mountPath: /etc/cacert
              readOnly: true

     volumes:
        ....
        - name: cacert
          hostPath:
            path: /etc/cacert

4 Helm 차트 사용[ | ]

Note

기본값으로, 이 차트는 호스트의 /etc/kubernetes/ 디렉토리에 cloud.conf가 있다고 가정하며, OpenStack 클라우드에 /etc/cacert에 인증서가 있다고 가정합니다.

cloud.conf에 대한 K8S 시크릿을 지정할 수 있습니다:

secret:
  enabled: true
  name: yousecretname

또한 Helm에게 K8S 시크릿을 생성하도록 지시할 수도 있습니다:

secret:
  enabled: true
  name: cinder-csi-cloud-config
  data:
    cloud.conf: |-
      ...

차트를 설치하려면 다음 명령어를 사용하십시오:

helm install --namespace kube-system --name cinder-csi ./charts/cinder-csi-plugin

5 지원 기능[ | ]

6 사이드카 호환성[ | ]

7 지원 매개변수[ | ]

매개변수 유형 매개변수 이름 기본값 설명
StorageClass parameters availability nova 문자열. 볼륨 가용성 영역
StorageClass parameters type 빈 문자열 문자열. 볼륨 유형의 이름/ID. 해당 볼륨 유형은 cinder에 존재해야 합니다.
VolumeSnapshotClass parameters force-create false 사용 중인 상태의 볼륨에 대한 스냅샷 생성 지원 활성화
VolumeSnapshotClass parameters type 빈 문자열 snapshot은 Cinder 볼륨 스냅샷에 연결된 VolumeSnapshot 객체를 생성합니다. backup은 cinder 볼륨 백업에 연결된 VolumeSnapshot 객체를 생성합니다. 정의되지 않은 경우 기본값은 snapshot입니다.
VolumeSnapshotClass parameters backup-max-duration-seconds-per-gb 20 볼륨 크기에 따라 백업이 완료되기까지 기다리는 시간을 초당 GB당 초단위로 정의합니다.
VolumeSnapshotClass parameters availability 볼륨과 동일 문자열. 백업 가용성 영역
Inline Volume volumeAttributes capacity 1Gi inline 볼륨을 생성하기 위한 볼륨 크기
Inline Volume VolumeAttributes type 빈 문자열 볼륨 유형의 이름/ID. 해당 볼륨 유형은 cinder에 존재해야 합니다.

7.1 지원되는 PVC 어노테이션[ | ]

PVC 어노테이션 지원은 Cinder CSI 컨트롤러에서 --pvc-annotations 플래그를 사용하여 활성화해야 합니다. PVC 어노테이션은 PVC가 생성될 때만 적용됩니다. PVC가 업데이트될 때 스케줄러 힌트는 업데이트되지 않습니다. 다음 PVC 어노테이션이 지원됩니다:

어노테이션 이름 설명 예제
cinder.csi.openstack.org/affinity 기존 볼륨 또는 볼륨 이름/UUID에 대한 볼륨 애피니티. 값은 볼륨 이름/UUID의 쉼표로 구분된 목록이어야 합니다. cinder.csi.openstack.org/affinity: "1b4e28ba-2fa1-11ec-8d3d-0242ac130003"
cinder.csi.openstack.org/anti-affinity 기존 볼륨 또는 볼륨 이름/UUID에 대한 볼륨 비애피니티. 값은 볼륨 이름/UUID의 쉼표로 구분된 목록이어야 합니다. cinder.csi.openstack.org/anti-affinity: "1b4e28ba-2fa1-11ec-8d3d-0242ac130004,pv-k8s--cluster-1b5f47bf-0119-442e-8529-254c36e43644"

PVC 어노테이션이 설정된 경우 볼륨은 기존 볼륨 이름/UUID 배치를 기준으로 생성됩니다.

8 로컬 개발[ | ]

8.1 빌드[ | ]

플러그인을 빌드하려면, 다음을 실행하세요:

$ export ARCH=amd64 # 기본 amd64
$ make build-cmd-cinder-csi-plugin

cinder-csi-plugin 이미지를 빌드하려면:

$ export ARCH=amd64 # 기본 amd64
$ make build-local-image-cinder-csi-plugin

8.2 테스트[ | ]

8.2.1 Unit 테스트[ | ]

모든 유닛 테스트를 실행하려면:

$ make test

8.2.2 Sanity 테스트[ | ]

Sanity 테스트는 드라이버의 CSI 사양 준수성을 확인합니다. 자세한 내용은 Sanity 체크를 참조하십시오.

cinder CSI 드라이버의 Sanity 테스트를 실행하려면:

$ make test-cinder-csi-sanity

9 인트리 Cinder 프로비저너에서 cinder CSI 마이그레이션[ | ]

Kubernetes 1.21부터 OpenStack Cinder CSI 마이그레이션은 베타 기능으로 지원되며 기본적으로 ON입니다. Cinder 볼륨이 작동하려면 OpenStack에서 Cinder CSI 드라이버가 클러스터에 설치되어야 합니다. 인트리 kubernetes.io/cinder 플러그인을 사용하여 생성된 지속성 볼륨이 있는 경우 cinder.csi.openstack.org 컨테이너 스토리지 인터페이스(CSI) 드라이버를 사용하도록 마이그레이션할 수 있습니다.

  • Cinder의 CSI 마이그레이션 기능을 활성화하면 기존 인트리 플러그인에서 cinder.csi.openstack.org CSI 드라이버로 모든 플러그인 작업이 휘게 됩니다.
  • 자세한 내용은 Migrate to CCM with CSI Migration 가이드를 참조하십시오.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}