5.12. Azure File CSI Driver Operator
5.12.1. 개요
OpenShift Container Platform은 Microsoft Azure File Storage용 CSI(Container Storage Interface) 드라이버를 사용하여 PV(영구 볼륨)를 프로비저닝할 수 있습니다.
CSI Operator 및 드라이버를 사용할 때는 영구 스토리지 및 CSI 볼륨 구성에 대해 숙지하는 것이 좋습니다.
Azure File 스토리지 자산에 마운트되는 CSI 프로비저닝 PV를 생성하기 위해 OpenShift Container Platform은 openshift-cluster-csi-drivers
네임스페이스에 기본적으로 Azure File CSI Driver Operator 및 Azure File CSI 드라이버를 설치합니다.
-
Azure File CSI Driver Operator 는 PVC(영구 볼륨 클레임)를 생성하는 데 사용할 수 있는
azurefile-csi
라는 스토리지 클래스를 제공합니다. 필요한 경우 이 기본 스토리지 클래스를 비활성화할 수 있습니다( 기본 스토리지 클래스 관리참조). - Azure File CSI 드라이버 를 사용하면 Azure File PV를 생성하고 마운트할 수 있습니다. Azure File CSI 드라이버는 필요에 따라 스토리지 볼륨을 생성할 수 있으므로 클러스터 관리자가 스토리지를 사전 프로비저닝할 필요가 없어 동적 볼륨 프로비저닝을 지원합니다.
Azure File CSI Driver Operator는 다음을 지원하지 않습니다.
- 가상 하드 디스크(VHD)
- FIPS(Federal Information Processing Standard) 모드가 있는 노드에서는 SMB(Server Message Block) 파일 공유에 대해 활성화됩니다. 그러나 NFS(네트워크 파일 시스템)는 FIPS 모드를 지원합니다.
지원되는 기능에 대한 자세한 내용은 지원되는 CSI 드라이버 및 기능을 참조하십시오.
5.12.2. NFS 지원
OpenShift Container Platform 4.14 이상에서는 다음 주의 사항과 함께 NFS(Network File System) Driver Operator를 지원합니다.
컨트롤 플레인 노드에 예약된 Azure File NFS 볼륨을 사용하여 Pod를 생성하면 마운트가 거부됩니다.
이 문제를 해결하려면 컨트롤 플레인 노드를 예약할 수 있고 작업자 노드에서 Pod를 실행할 수 있는 경우
nodeSelector
또는 Affinity를 사용하여 작업자 노드에서 Pod를 예약합니다.FS 그룹 정책 동작:
중요NFS를 사용하는 Azure File CSI는 Pod에서 요청한 fsGroupChangePolicy를 준수하지 않습니다. NFS를 사용하는 Azure File CSI는 Pod에서 요청한 정책에 관계없이 기본 OnRootMismatch FS 그룹 정책을 적용합니다.
Azure File CSI Operator는 NFS의 스토리지 클래스를 자동으로 생성하지 않습니다. 수동으로 생성해야 합니다. 다음과 유사한 파일을 사용합니다.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class-name> provisioner: file.csi.azure.com parameters: protocol: nfs skuName: Premium_LRS # available values: Premium_LRS, Premium_ZRS mountOptions: - nconnect=4
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class-name>
1 provisioner: file.csi.azure.com
2 parameters: protocol: nfs
3 skuName: Premium_LRS # available values: Premium_LRS, Premium_ZRS mountOptions: - nconnect=4
Copy to Clipboard Copied!
5.12.3. CSI 정보
스토리지 벤더는 일반적으로 Kubernetes의 일부로 스토리지 드라이버를 제공합니다. CSI(Container Storage Interface) 구현을 통해 타사 공급자는 코어 Kubernetes 코드를 변경하지 않고도 표준 인터페이스를 사용하여 스토리지 플러그인을 제공할 수 있습니다.
CSI Operator는 in-tree 볼륨 플러그인에서 사용할 수 없는 볼륨 스냅샷과 같은 OpenShift Container Platform 사용자 스토리지 옵션을 제공합니다.
5.12.4. Azure File의 정적 프로비저닝
정적 프로비저닝을 위해 클러스터 관리자는 실제 스토리지의 세부 정보를 정의하는 PV(영구 볼륨)를 생성합니다. 그런 다음 클러스터 사용자는 이러한 PV를 사용하는 PVC(영구 볼륨 클레임)를 생성할 수 있습니다.
사전 요구 사항
- 관리자 권한을 사용하여 OpenShift Container Platform 클러스터에 액세스
절차
Azure 파일에 정적 프로비저닝을 사용하려면 다음을 수행합니다.
Azure 스토리지 계정에 대한 시크릿을 아직 생성하지 않은 경우 지금 생성합니다.
이 시크릿에는 다음과 같은 매우 구체적인 형식의 Azure 스토리지 계정 이름과 키가 두 개의 키-값 쌍을 포함해야 합니다.
-
azurestorageaccountname
: <storage_account_name> azurestorageaccountkey
: <account_key>azure-secret 이라는 보안을 생성하려면 다음 명령을 실행합니다.
oc create secret generic azure-secret -n <namespace_name> --type=Opaque --from-literal=azurestorageaccountname="<storage_account_name>" --from-literal=azurestorageaccountkey="<account_key>"
oc create secret generic azure-secret -n <namespace_name> --type=Opaque --from-literal=azurestorageaccountname="<storage_account_name>" --from-literal=azurestorageaccountkey="<account_key>"
1 2 Copy to Clipboard Copied!
-
다음 예제 YAML 파일을 사용하여 PV를 생성합니다.
PV YAML 파일의 예
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: file.csi.azure.com name: pv-azurefile spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: <sc-name> mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - cache=strict - nosharesock - actimeo=30 - nobrl csi: driver: file.csi.azure.com volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}" volumeAttributes: shareName: EXISTING_FILE_SHARE_NAME nodeStageSecretRef: name: azure-secret namespace: <my-namespace>
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: file.csi.azure.com name: pv-azurefile spec: capacity: storage: 5Gi
1 accessModes: - ReadWriteMany
2 persistentVolumeReclaimPolicy: Retain
3 storageClassName: <sc-name>
4 mountOptions: - dir_mode=0777
5 - file_mode=0777 - uid=0 - gid=0 - cache=strict
6 - nosharesock
7 - actimeo=30
8 - nobrl
9 csi: driver: file.csi.azure.com volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"
10 volumeAttributes: shareName: EXISTING_FILE_SHARE_NAME
11 nodeStageSecretRef: name: azure-secret
12 namespace: <my-namespace>
13 Copy to Clipboard Copied! - 1
- 볼륨 크기.
- 2
- 액세스 모드. 읽기-쓰기 및 마운트 권한을 정의합니다. 자세한 내용은 추가 리소스 아래에서 액세스 모드를 참조하십시오.
- 3
- 회수 정책. 해제 후 볼륨을 사용하여 클러스터에 수행할 작업을 지시합니다. 허용되는 값은
Retain
,Recycle
또는Delete
입니다. - 4
- 스토리지 클래스 이름입니다. 이 이름은 PVC에서 이 특정 PV에 바인딩하는 데 사용됩니다. 정적 프로비저닝의 경우
StorageClass
오브젝트가 존재할 필요는 없지만 PV 및 PVC의 이름이 일치해야 합니다. - 5
- 보안을 강화하려면 이 권한을 수정합니다.
- 6
- 캐시 모드. 허용되는 값은
none
,strict
및loose
입니다. 기본값은strict
입니다. - 7
- 재연결 레이스 가능성을 줄이기 위해 를 사용합니다.
- 8
- CIFS 클라이언트가 서버에서 속성 정보를 요청하기 전에 파일 또는 디렉터리의 속성을 캐시하는 시간(초)입니다.
- 9
- 서버에 대한 바이트 범위 잠금 요청 및 POSIX 잠금에 문제가 있는 애플리케이션에 대해 전송을 비활성화합니다.
- 10
volumeHandle
이 클러스터 전체에서 고유해야 합니다.resource-group-name
은 스토리지 계정이 있는 Azure 리소스 그룹입니다.- 11
- 파일 공유 이름. 파일 공유 이름만 사용합니다. 전체 경로를 사용하지 마십시오.
- 12
- 이 절차의 1단계에서 생성된 시크릿 이름을 제공합니다. 이 예에서는 azure-secret 입니다.
- 13
- 시크릿이 생성된 네임스페이스입니다. PV를 사용하는 네임스페이스여야 합니다.
다음 예제 파일을 사용하여 PV를 참조하는 PVC를 생성합니다.
PVC YAML 파일의 예
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> namespace: <my-namespace> spec: volumeName: pv-azurefile storageClassName: <sc-name> accessModes: - ReadWriteMany resources: requests: storage: 5Gi
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name>
1 namespace: <my-namespace>
2 spec: volumeName: pv-azurefile
3 storageClassName: <sc-name>
4 accessModes: - ReadWriteMany
5 resources: requests: storage: 5Gi
6 Copy to Clipboard Copied! - 1
- PVC 이름입니다.
- 2
- PVC의 네임스페이스입니다.
- 3
- 이전 단계에서 생성한 PV의 이름입니다.
- 4
- 스토리지 클래스 이름입니다. 이 이름은 PVC에서 이 특정 PV에 바인딩하는 데 사용됩니다. 정적 프로비저닝의 경우
StorageClass
오브젝트가 존재할 필요는 없지만 PV 및 PVC의 이름이 일치해야 합니다. - 5
- 액세스 모드. PVC에 대해 요청된 읽기-쓰기 액세스를 정의합니다. 클레임은 특정 액세스 모드로 스토리지를 요청할 때 볼륨과 동일한 규칙을 사용합니다. 자세한 내용은 추가 리소스 아래에서 액세스 모드를 참조하십시오.
- 6
- PVC 크기.
다음 명령을 실행하여 PVC가 생성되고
Bound
상태에 있는지 확인합니다.oc get pvc <pvc-name>
$ oc get pvc <pvc-name>
1 Copy to Clipboard Copied! - 1
- PVC의 이름입니다.
출력 예
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-name Bound pv-azurefile 5Gi ReadWriteMany my-sc 7m2s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-name Bound pv-azurefile 5Gi ReadWriteMany my-sc 7m2s
Copy to Clipboard Copied!