AKS(Azure Kubernetes Service)에서 Azure Files를 사용하여 볼륨을 만들고 사용합니다.

영구적 볼륨은 Kubernetes Pod와 함께 사용하기 위해 프로비전된 스토리지 부분을 나타냅니다. 하나 이상의 Pod에서 영구적 볼륨을 사용할 수 있으며 동적 또는 정적으로 프로비전할 수 있습니다. 여러 Pod에서 동일한 스토리지 볼륨에 동시에 액세스해야 하는 경우 Azure Files에서 SMB(서버 메시지 블록) 프로토콜을 사용하여 연결할 수 있습니다. 이 문서에서는 AKS(Azure Kubernetes Service) 클러스터에서 여러 Pod에 사용할 Azure Files공유를 동적으로 만드는 방법을 설명합니다.

이 문서는 다음을 수행하는 방법을 보여줍니다.

  • CSI(Container Storage Interface) 드라이버를 설치하고 Pod에 연결할 하나 이상의 Azure 파일 공유를 동적으로 만들어 동적 PV(영구 볼륨)로 작업합니다.
  • 하나 이상의 Azure 파일 공유를 만들어 정적 PV를 사용하거나 기존 공유를 사용하여 Pod에 연결합니다.

Kubernetes 볼륨에 대한 자세한 내용은 AKS의 애플리케이션에 대한 스토리지 옵션을 참조하세요.

시작하기 전에

  • 스토리지 계정이 필요합니다.
  • Azure CLI 버전 2.0.59 이상이 설치 및 구성되어 있어야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • 표준 파일 공유와 프리미엄 파일 공유 중에 선택할 때, Azure Files에서 실행하려는 예상 사용 패턴의 요구 사항과 프로비전 모델을 파악하는 것이 중요합니다. 자세한 내용은 사용 패턴에 따라 Azure Files 성능 계층 선택을 참조하세요.

동적으로 볼륨 프로비전

이 섹션에서는 Azure Files에서 하나 이상의 공유에 대한 세부 정보를 포함하는 하나 이상의 영구 볼륨을 프로비전하려는 클러스터 관리자를 위한 지침을 제공합니다. PVC(영구적 볼륨 클레임)는 스토리지 클래스 개체를 사용하여 Azure Files 파일 공유를 동적으로 프로비전합니다.

동적 PersistentVolumes에 대한 스토리지 클래스 매개 변수

다음 표에는 PersistentVolumeClaim에 대한 사용자 지정 스토리지 클래스를 정의하는 데 사용할 수 있는 매개 변수가 포함되어 있습니다.

속성 의미 사용 가능한 값 필수 기본값
accountAccessTier 스토리지 계정에 대한 액세스 계층 표준 계정은 Hot 또는 Cool을 선택할 수 있으며 프리미엄 계정은 Premium만 선택할 수 있습니다. 아니요 비어 있음. 다양한 스토리지 계정 유형에 대해 기본 설정을 사용합니다.
accountQuota 계정의 할당량을 제한합니다. GB 단위로 최대 할당량(기본적으로 102400GB)을 지정할 수 있습니다. 계정이 지정된 할당량을 초과하면 드라이버는 계정 선택을 건너뜁니다. 아니요 102400
allowBlobPublicAccess 드라이버에서 만든 스토리지 계정에 대한 모든 Blob 또는 컨테이너에 대한 공용 액세스를 허용하거나 허용하지 않습니다. true 또는 false 아니요 false
disableDeleteRetentionPolicy 드라이버에서 만든 스토리지 계정에 대해 DeleteRetentionPolicy를 사용하지 않도록 설정할지 여부를 지정합니다. true 또는 false 아니요 false
enableLargeFileShares 대용량 파일 공유가 사용하도록 설정된 스토리지 계정을 사용할지 여부를 지정합니다. 이 플래그가 true로 설정되고 대용량 파일 공유가 사용하도록 설정된 스토리지 계정이 존재하지 않는 경우 대용량 파일 공유가 사용하도록 설정된 새 스토리지 계정이 만들어집니다. 프리미엄 sku를 사용하여 만든 스토리지 계정에는 기본적으로 largeFileShares 옵션이 사용하도록 설정되어 있으므로 이 플래그는 표준 sku와 함께 사용해야 합니다. true 또는 false 아니요 false
Foldername Azure 파일 공유에서 폴더 이름을 지정합니다. Azure 파일 공유의 기존 폴더 이름입니다. 아니요 파일 공유에 폴더 이름이 없으면 탑재가 실패합니다.
getLatestAccount 생성 시간에 따라 최신 계정 키를 가져올지 여부를 결정합니다. 이 드라이버는 기본적으로 첫 번째 키를 가져옵니다. true 또는 false 아니요 false
location Azure Storage 계정의 Azure 지역을 지정합니다. 예들 들어 eastus입니다. 아니요 비어 있는 경우 드라이버는 현재 AKS 클러스터와 동일한 위치 이름을 사용합니다.
matchTags 드라이버가 적절한 스토리지 계정을 찾으려고 할 때 태그를 일치시킵니다. true 또는 false 아니요 false
networkEndpointType 드라이버에서 만든 스토리지 계정에 대한 네트워크 엔드포인트 형식을 지정합니다. privateEndpoint가 지정된 경우 스토리지 계정에 대한 프라이빗 엔드포인트가 만들어집니다. 다른 경우에는 기본적으로 서비스 엔드포인트가 만들어집니다. "",privateEndpoint 아니요 ""
프로토콜 파일 공유 프로토콜을 지정합니다. smb, nfs 아니요 smb
requireInfraEncryption 서비스가 드라이버에서 만든 스토리지 계정에 대해 미사용 데이터에 대해 플랫폼 관리 키를 사용하여 보조 암호화 계층을 적용할지 여부를 지정합니다. true 또는 false 아니요 false
resourceGroup Azure Disks에 대한 리소스 그룹을 지정합니다. 기존 리소스 그룹 이름 아니요 비어 있는 경우 드라이버는 현재 AKS 클러스터와 동일한 리소스 그룹 이름을 사용합니다.
selectRandomMatchingAccount 일치하는 계정을 임의로 선택할지 여부를 결정합니다. 기본적으로 드라이버는 항상 일치하는 첫 번째 계정을 사전순으로 선택합니다(참고: 이 드라이버는 계정 검색 캐시를 사용하므로 여러 계정에서 파일 생성이 고르지 않게 배포됨). true 또는 false 아니요 false
server Azure Storage 계정 서버 주소를 지정합니다. 기존 서버 주소(예 accountname.privatelink.file.core.windows.net: .) 아니요 비어 있는 경우 드라이버는 기본 accountname.file.core.windows.net 또는 다른 소버린 클라우드 계정 주소를 사용합니다.
shareAccessTier 파일 공유에 대한 액세스 계층 범용 v2 계정은 TransactionOptimized (기본값) HotCool. 파일 공유 전용 프리미엄 스토리지 계정 유형입니다. 아니요 비어 있음. 다양한 스토리지 계정 유형에 대해 기본 설정을 사용합니다.
shareName Azure 파일 공유 이름을 지정합니다. 기존 또는 새 Azure 파일 공유 이름입니다. 아니요 비어 있는 경우 드라이버는 Azure 파일 공유 이름을 생성합니다.
shareNamePrefix 드라이버에서 만든 Azure 파일 공유 이름 접두사를 지정합니다. 공유 이름은 소문자, 숫자, 하이픈 및 길이만 포함할 수 있으며 길이는 21자 미만이어야 합니다. 아니요
skuName Azure Files 스토리지 계정 유형(별칭: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS,Premium_LRS, Premium_ZRS 아니요 StandardSSD_LRS
Premium 계정 유형의 최소 파일 공유 크기는 100GB입니다.
ZRS 계정 유형은 제한된 지역에서 지원됩니다.
NFS 파일 공유는 프리미엄 계정 유형만 지원합니다.
storageEndpointSuffix Azure 스토리지 엔드포인트 접미사를 지정합니다. core.windows.net, core.chinacloudapi.cn 아니요 비어 있는 경우 드라이버는 클라우드 환경에 따라 기본 스토리지 엔드포인트 접미사를 사용합니다. 예들 들어 core.windows.net입니다.
tags 태그는 새 스토리지 계정에 만들어집니다. 태그 형식: 'foo=aaa,bar=bbb' 아니요 ""
--- 다음 매개 변수는 SMB 프로토콜에만 해당합니다. --- ---
subscriptionID Azure 파일 공유가 만들어지는 Azure 구독 ID를 지정합니다. Azure 구독 ID 아니요 비어 있지 않은 경우 resourceGroup을 제공해야 합니다.
storeAccountKey 계정 키를 Kubernetes 비밀에 저장할지 여부를 지정합니다. true 또는 false
false 는 드라이버가 kubelet ID를 사용하여 계정 키를 가져옴을 의미합니다.
아니요 true
secretName 계정 키를 저장할 비밀 이름을 지정합니다. 아니요
secretNamespace 계정 키를 저장할 비밀의 네임스페이스를 지정합니다.

:
지정하지 않으면 secretNamespace 비밀이 Pod와 동일한 네임스페이스에 만들어집니다.
default, kube-system 아니요 PVC 네임스페이스(예: csi.storage.k8s.io/pvc/namespace)
useDataPlaneAPI 데이터 평면 API에는 제한이 거의 없지만 스토리지 계정에 방화벽 또는 Vnet 설정이 있을 때 실패하므로 SRP API 제한 문제를 해결할 수 있는 파일 공유 만들기/삭제/크기 조정에 데이터 평면 API를 사용할지 여부를 지정합니다. true 또는 false 아니요 false
--- 다음 매개 변수는 NFS 프로토콜에만 해당합니다. --- ---
mountPermissions 탑재된 폴더 사용 권한 기본값은 0777입니다. 로 0설정하면 탑재 후 드라이버가 수행 chmod 되지 않습니다. 0777 아니요
rootSquashType 공유에서 루트 스쿼시 동작을 지정합니다. 기본값은 NoRootSquash입니다. AllSquash, , NoRootSquashRootSquash 아니요
--- 다음 매개 변수는 VNet 설정에만 해당됩니다. 예: NFS, 프라이빗 엔드포인트 --- ---
fsGroupChangePolicy 드라이버가 볼륨의 소유권을 변경하는 방법을 나타냅니다. Pod securityContext.fsGroupChangePolicy 는 무시됩니다. OnRootMismatch (기본값), Always, None 아니요 OnRootMismatch
subnetName 서브넷 이름 에이전트 노드의 기존 서브넷 이름입니다. 아니요 비어 있으면 드라이버에서 Azure 클라우드 구성 파일의 subnetName 값을 사용합니다.
vnetName Virtual Network 이름 기존 가상 네트워크 이름입니다. 아니요 비어 있으면 드라이버에서 Azure 클라우드 구성 파일의 vnetName 값을 사용합니다.
vnetResourceGroup 가상 네트워크가 정의된 VNet 리소스 그룹을 지정합니다. 기존 리소스 그룹 이름입니다. 아니요 비어 있으면 드라이버에서 Azure 클라우드 구성 파일의 vnetResourceGroup 값을 사용합니다.

스토리지 클래스 만들기

스토리지 클래스는 Azure 파일 공유를 만드는 방법을 정의합니다. 스토리지 계정은 Azure Files 파일 공유를 보관할 스토리지 클래스에서 사용할 수 있도록 자동으로 노드 리소스 그룹에 생성됩니다. skuName에 대한 다음 Azure Storage 중복도 SKU 중 하나를 선택합니다.

  • Standard_LRS: 표준 LRS(로컬 중복 스토리지)
  • Standard_GRS: 표준 GRS(지역 중복 스토리지)
  • Standard_ZRS: 표준 ZRS(영역 중복 스토리지)
  • Standard_RAGRS: 표준 RA-GRS(읽기 액세스 지역 중복 스토리지)
  • Premium_LRS: 프리미엄 LRS(로컬 중복 스토리지)
  • Premium_ZRS: 프리미엄 ZRS(영역 중복 스토리지)

참고 항목

최소 프리미엄 파일 공유는 100GB입니다.

Azure Files의 Kubernetes 스토리지 클래스에 대한 자세한 내용은 Kubernetes 스토리지 클래스를 참조하세요.

  1. azure-file-sc.yaml 파일을 만들고 다음 예제 매니페스트를 복사합니다. mountOptions에 대한 자세한 내용은 탑재 옵션 섹션을 참조하세요.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: my-azurefile
    provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
    allowVolumeExpansion: true
    mountOptions:
     - dir_mode=0777
     - file_mode=0777
     - uid=0
     - gid=0
     - mfsymlinks
     - cache=strict
     - actimeo=30
    parameters:
      skuName: Premium_LRS
    
  2. kubectl apply 명령을 사용하여 스토리지 클래스를 만듭니다.

    kubectl apply -f azure-file-sc.yaml
    

영구적 볼륨 클레임 만들기

PVC(영구적 볼륨 클레임)는 스토리지 클래스 개체를 사용하여 Azure 파일 공유를 동적으로 프로비전합니다. 다음 YAML을 사용하여 크기가 100GB이고 ReadWriteMany 액세스 권한을 가진 영구적 볼륨 클레임을 만들 수 있습니다. 액세스 모드에 대한 자세한 내용은 Kubernetes 영구 볼륨을 참조하세요.

  1. 파일 azure-file-pvc.yaml을 만들고 다음 YAML에 복사합니다. storageClassName이 이전 단계에서 만든 스토리지 클래스와 일치하는지 확인합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: my-azurefile
      resources:
        requests:
          storage: 100Gi
    

    참고 항목

    스토리지 클래스에 Premium_LRS SKU를 사용하는 경우 storage의 최솟값은 100Gi여야 합니다.

  2. kubectl apply 명령을 사용하여 영구 볼륨 클레임을 만듭니다.

    kubectl apply -f azure-file-pvc.yaml
    

    완료되면 파일 공유가 생성됩니다. 연결 정보 및 자격 증명을 포함하고 있는 Kubernetes 비밀도 생성됩니다. 명령을 kubectl get 사용하여 PVC의 상태 볼 수 있습니다.

    kubectl get pvc my-azurefile
    

    명령의 출력은 다음 예제와 유사합니다.

    NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    my-azurefile   Bound     pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477   100Gi       RWX            my-azurefile      5m
    

영구적 볼륨 사용

다음 YAML은 영구 볼륨 클레임 my-azurefile을 사용하여 Azure Files 파일 공유를 /mnt/azure 경로에 탑재하는 Pod를 생성합니다. Windows Server 컨테이너의 경우 'D:'와 같은 Windows 경로 규칙을 사용하여 지정 mountPath 합니다.

  1. azure-pvc-files.yaml 파일을 만들고 다음 YAML에 복사합니다. claimName이 이전 단계에서 만든 PVC와 일치하는지 확인합니다.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: /mnt/azure
              name: volume
              readOnly: false
      volumes:
       - name: volume
         persistentVolumeClaim:
           claimName: my-azurefile
    
  2. kubectl apply 명령을 사용하여 Pod를 만듭니다.

    kubectl apply -f azure-pvc-files.yaml
    

    이제 Azure Files 파일 공유가 /mnt/azure 디렉터리에 탑재된 Pod가 실행되고 있습니다. 이 구성은 kubectl describe 명령을 사용해 Pod를 검사할 때 볼 수 있습니다. 압축된 다음 예제 출력에서는 컨테이너에 탑재된 볼륨을 보여 줍니다.

    Containers:
      mypod:
        Container ID:   docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e
        Image:          mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        Image ID:       docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        State:          Running
          Started:      Fri, 01 Mar 2019 23:56:16 +0000
        Ready:          True
        Mounts:
          /mnt/azure from volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro)
    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  my-azurefile
        ReadOnly:   false
    [...]
    

탑재 옵션

fileModedirMode의 기본값은 Kubernetes 버전 1.13.0 이상의 경우 0777입니다. 스토리지 클래스를 사용하여 동적으로 영구적 볼륨을 만드는 경우 스토리지 클래스 개체에서 탑재 옵션을 지정할 수 있습니다. 자세한 내용은 탑재 옵션을 참조하세요. 다음 예제에서는 0777을 설정합니다.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
parameters:
  skuName: Premium_LRS

Azure 태그 사용

Azure 태그 사용에 대한 자세한 내용은 AKS(Azure Kubernetes Service)에서 Azure 태그 사용을 참조하세요.

정적으로 볼륨 프로비전

이 섹션에서는 워크로드와 함께 사용할 기존 Azure Files 공유의 세부 정보를 포함하는 하나 이상의 영구 볼륨을 만들려는 클러스터 관리자를 위한 지침을 제공합니다.

PersistentVolume에 대한 정적 프로비저닝 매개 변수

다음 표에는 PersistentVolume을 정의하는 데 사용할 수 있는 매개 변수가 포함되어 있습니다.

속성 의미 사용 가능한 값 필수 기본값
volumeAttributes.resourceGroup Azure 리소스 그룹 이름을 지정합니다. myResourceGroup 아니요 비어 있는 경우 드라이버는 현재 클러스터와 동일한 리소스 그룹 이름을 사용합니다.
volumeAttributes.storageAccount 기존 Azure Storage 계정 이름을 지정합니다. storageAccountName
volumeAttributes.shareName Azure 파일 공유 이름을 지정합니다. fileShareName
volumeAttributes.folderName Azure 파일 공유에서 폴더 이름을 지정합니다. Foldername 아니요 파일 공유에 폴더 이름이 없으면 탑재가 실패합니다.
volumeAttributes.protocol 파일 공유 프로토콜을 지정합니다. smb, nfs 아니요 smb
volumeAttributes.server Azure Storage 계정 서버 주소 지정 기존 서버 주소(예 accountname.privatelink.file.core.windows.net: .) 아니요 비어 있는 경우 드라이버는 기본 accountname.file.core.windows.net 또는 다른 소버린 클라우드 계정 주소를 사용합니다.
--- 다음 매개 변수는 SMB 프로토콜에만 해당합니다. --- --- ---
volumeAttributes.secretName 스토리지 계정 이름 및 키를 저장하는 비밀 이름을 지정합니다. 아니요
volumeAttributes.secretNamespace 비밀 네임스페이스를 지정합니다. default, kube-system 아니요 PVC 네임스페이스(csi.storage.k8s.io/pvc/namespace)
nodeStageSecretRef.name 스토리지 계정 이름 및 키를 저장하는 비밀 이름을 지정합니다. 기존 비밀 이름
nodeStageSecretRef.namespace 비밀 네임스페이스를 지정합니다. Kubernetes 네임스페이스
--- 다음 매개 변수는 NFS 프로토콜에만 해당합니다. --- --- ---
volumeAttributes.fsGroupChangePolicy 드라이버가 볼륨의 소유권을 변경하는 방법을 나타냅니다. Pod securityContext.fsGroupChangePolicy 는 무시됩니다. OnRootMismatch (기본값), Always, None 아니요 OnRootMismatch
volumeAttributes.mountPermissions 탑재된 폴더 권한을 지정합니다. 기본값은 0777입니다. 아니요

Azure 파일 공유 만들기

Azure Files 파일 공유를 Kubernetes 볼륨으로 사용하려면 먼저 Azure Storage 계정과 파일 공유를 만들어야 합니다.

  1. --query nodeResourceGroup 매개 변수와 함께 az aks show 명령을 사용하여 리소스 그룹 이름을 가져옵니다.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    명령의 출력은 다음 예제와 유사합니다.

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. --sku 매개 변수와 함께 az storage account create 명령을 사용하여 스토리지 계정을 만듭니다. 다음 명령은 Standard_LRS SKU를 사용하여 스토리지 계정을 만듭니다. 다음 자리 표시자를 바꿔야 합니다.

    • myAKSStorageAccount를 스토리지 계정의 이름과
    • nodeResourceGroupName을 AKS 클러스터 노드가 호스트되는 리소스 그룹의 이름으로
    • location을 리소스를 만들 지역의 이름으로. AKS 클러스터 노드와 동일한 지역이어야 합니다.
    az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
    
  3. 파일 공유를 만드는 데 사용하는 다음 명령을 사용하여 연결 문자열을 환경 변수로 내보냅니다.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
    
  4. az storage share create 명령을 사용하여 파일 공유를 만듭니다. shareName을 공유 이름으로 바꿉니다.

    az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. 다음 명령을 사용하여 스토리지 계정 키를 환경 변수로 내보냅니다.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. 다음 명령을 사용하여 스토리지 계정 이름 및 키를 에코합니다. Kubernetes 볼륨을 만들 때 이러한 값이 필요하므로 이 정보를 복사합니다.

    echo Storage account key: $STORAGE_KEY
    

Kubernetes 비밀 만들기

이전 단계에서 만든 파일 공유에 액세스하려면 Kubernetes에 자격 증명이 필요합니다. 이러한 자격 증명은 Kubernetes Pod를 만들 때 참조되는 Kubernetes 비밀에 저장됩니다.

  1. kubectl create secret 명령을 사용하여 비밀을 만듭니다. 다음 예에서는 azure-secret라는 보안 비밀을 만들고 이전 단계에서 azuretorageaccountnameazurestorageaccountkey를 채웁니다. 기존 Azure Storage 계정을 사용하려면 계정 이름 및 키를 제공합니다.

    kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
    

파일 공유를 영구 볼륨으로 탑재

  1. azurefiles-pv.yaml이라는 새 파일을 만들고 다음 콘텐츠를 이 파일에 복사합니다. csi에서 resourceGroup, volumeHandle, shareName을 업데이트합니다. 탑재 옵션의 경우 fileModedirMode의 기본값은 0777입니다.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
        driver: file.csi.azure.com
        volumeHandle: unique-volumeid  # make sure this volumeid is unique for every identical share in the cluster
        volumeAttributes:
          resourceGroup: resourceGroupName  # optional, only set this when storage account is not in the same resource group as node
          shareName: aksshare
        nodeStageSecretRef:
          name: azure-secret
          namespace: default
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - uid=0
        - gid=0
        - mfsymlinks
        - cache=strict
        - nosharesock
        - nobrl
    
  2. kubectl create 명령을 사용하여 영구 볼륨을 만듭니다.

    kubectl create -f azurefiles-pv.yaml
    
  3. azurefiles-mount-options-pvc.yaml이라는 새 파일을 만들고 다음 내용을 복사합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. kubectl apply 명령을 사용하여 PersistentVolumeClaim을 만듭니다.

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. kubectl get 명령을 사용하여 PersistentVolumeClaim이 만들어지고 PersistentVolume에 바인딩되어 있는지 확인합니다.

    kubectl get pvc azurefile
    

    명령의 출력은 다음 예제와 유사합니다.

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. YAML 파일에서 PersistentVolumeClaim을 Pod를 참조하도록 컨테이너 사양을 업데이트합니다. 예시:

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. Pod 사양은 현재 위치에서 업데이트할 수 없으므로 kubectl delete 명령을 사용하여 Pod를 삭제하고 kubectl apply 명령을 사용하여 다시 만듭니다.

    kubectl delete pod mypod
    
    kubectl apply -f azure-files-pod.yaml
    

파일 공유를 인라인 볼륨으로 탑재

참고 항목

성능 문제를 방지하려면 많은 Pod가 동일한 파일 공유에 액세스하는 경우 인라인 볼륨 대신 영구 볼륨을 사용하는 것이 좋습니다. 인라인 볼륨은 Pod와 동일한 네임스페이스의 비밀에만 액세스할 수 있습니다. 다른 비밀 네임스페이스를 지정하려면 영구 볼륨사용합니다.

Azure Files 파일 공유를 Pod에 마운트하려면 컨테이너 스펙에서 볼륨을 구성하세요.

  1. azure-files-pod.yaml이라는 새 파일을 만들고 다음 콘텐츠를 이 파일에 복사합니다. 파일 공유 이름 또는 비밀 이름을 변경한 경우 shareNamesecretName을 업데이트하세요. 파일 공유가 Pod에 마운트되는 경로인 mountPath를 업데이트할 수도 있습니다. Windows Server 컨테이너의 경우 'D:'와 같은 Windows 경로 규칙을 사용하여 지정 mountPath 합니다.
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  nodeSelector:
    kubernetes.io/os: linux
  containers:
    - image: 'mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine'
      name: mypod
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 250m
          memory: 256Mi
      volumeMounts:
        - name: azure
          mountPath: /mnt/azure
          readOnly: false
  volumes:
    - name: azure
      csi:
        driver: file.csi.azure.com
        volumeAttributes:
          secretName: azure-secret  # required
          shareName: aksshare  # required
          mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock'  # optional
  1. kubectl apply 명령을 사용하여 Pod를 만듭니다.

    kubectl apply -f azure-files-pod.yaml
    

    이제 /mnt/azure에서 마운트된 Azure Files 파일 공유를 사용하여 실행 중인 Pod이 있습니다. kubectl describe 명령을 사용하여 공유가 성공적으로 탑재되었는지 확인할 수 있습니다.

    kubectl describe pod mypod
    

다음 단계

Azure Files CSI 드라이버 매개 변수는 CSI 드라이버 매개 변수를 참조하세요.

관련 모범 사례는 AKS에서 스토리지 및 백업에 대한 모범 사례를 참조하세요.