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 가 지정된 경우 스토리지 계정에 대한 프라이빗 엔드포인트가 만들어집니다. 다른 경우에는 기본적으로 서비스 엔드포인트가 만들어집니다. |
, , | 아니요 | :\ |
프로토콜 | 파일 공유 프로토콜을 지정합니다. | 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 (기본값), Hot 및 Cool 중에서 선택할 수 있습니다. 파일 공유 전용 프리미엄 스토리지 계정 유형입니다. |
아니요 | 비어 있음. 다양한 스토리지 계정 유형에 대해 기본 설정을 사용합니다. |
shareName | Azure 파일 공유 이름을 지정합니다. | 기존 또는 새 Azure 파일 공유 이름입니다. | 아니요 | 비어 있으면 드라이버가 Azure 파일 공유 이름을 생성합니다. |
shareNamePrefix | 드라이버에서 만든 Azure 파일 공유 이름 접두사를 지정합니다. | 공유 이름은 소문자, 숫자, 하이픈만 포함할 수 있으며 길이는 21자 미만이어야 합니다. | 아니요 | |
skuName | Azure Files 스토리지 계정 유형(별칭: storageAccountType ) |
아니요 | StandardSSD_LRS Premium 계정 유형의 최소 파일 공유 크기는 100GB입니다. ZRS 계정 유형은 제한된 지역에서 지원됩니다. NFS 파일 공유는 Premium 계정 유형만 지원합니다. |
|
storageAccount | Azure Storage 계정 이름을 지정합니다. | storageAccountName | 아니요- | 특정 스토리지 계정 이름이 제공되지 않으면 드라이버는 동일한 리소스 그룹 내의 계정 집합과 일치하는 적합한 스토리지 계정을 찾습니다. 일치하는 스토리지 계정을 찾지 못하면 새 계정을 만듭니다. 그러나 스토리지 계정 이름을 지정한 경우 스토리지 계정이 이미 존재해야 합니다. |
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 입니다. |
아니요 | ||
--- | 다음 매개 변수는 VNet 설정에만 해당됩니다. 예: NFS, 프라이빗 엔드포인트 | --- | --- | |
fsGroupChangePolicy | 드라이버가 볼륨의 소유권을 변경하는 방법을 나타냅니다. Pod securityContext.fsGroupChangePolicy 는 무시됩니다. |
OnRootMismatch (기본값), Always , None |
아니요 | OnRootMismatch |
subnetName | 서브넷 이름 | 에이전트 노드의 기존 서브넷 이름입니다. | 아니요 | 비어 있으면 드라이버에서 Azure 클라우드 구성 파일의 subnetName 값을 사용합니다. |
vnetName | 가상 네트워크 이름 | 기존 가상 네트워크 이름입니다. | 아니요 | 비어 있으면 드라이버에서 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 스토리지 클래스를 참조하세요.
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 - nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks parameters: skuName: Premium_LRS
kubectl apply
명령을 사용하여 스토리지 클래스를 만듭니다.kubectl apply -f azure-file-sc.yaml
영구적 볼륨 클레임 만들기
PVC(영구적 볼륨 클레임)는 스토리지 클래스 개체를 사용하여 Azure 파일 공유를 동적으로 프로비전합니다. 다음 YAML을 사용하여 크기가 100GB이고 ReadWriteMany 액세스 권한을 가진 영구적 볼륨 클레임을 만들 수 있습니다. 액세스 모드에 대한 자세한 내용은 Kubernetes 영구 볼륨을 참조하세요.
파일
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
여야 합니다.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
를 지정합니다.
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
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 [...]
탑재 옵션
fileMode
및 dirMode
의 기본값은 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
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
skuName: Premium_LRS
Azure 태그 사용
Azure 태그 사용에 대한 자세한 내용은 AKS(Azure Kubernetes Service)에서 Azure 태그 사용을 참조하세요.
정적으로 볼륨 프로비전
이 섹션에서는 워크로드와 함께 사용할 기존 Azure Files 공유의 세부 정보를 포함하는 하나 이상의 영구 볼륨을 만들려는 클러스터 관리자를 위한 지침을 제공합니다.
PertantVolume의 정적 프로비전 매개 변수
다음 표에는 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 | 스토리지 계정 이름 및 키를 저장하는 비밀 이름을 지정합니다. | 기존 비밀 이름. | 아니요 | 비어 있으면 드라이버는 kubelet ID를 사용하여 계정 키를 가져옵니다. |
nodeStageSecretRef.namespace | 비밀 네임스페이스를 지정합니다. | Kubernetes 네임스페이스 | 아니요 | |
--- | 다음 매개 변수는 NFS 프로토콜에만 해당합니다. | --- | --- | --- |
volumeAttributes.fsGroupChangePolicy | 드라이버가 볼륨의 소유권을 변경하는 방법을 나타냅니다. Pod securityContext.fsGroupChangePolicy 는 무시됩니다. |
OnRootMismatch (기본값), Always , None |
아니요 | OnRootMismatch |
volumeAttributes.mountPermissions | 탑재된 폴더 권한을 지정합니다. 기본값은 0777 입니다. |
아니요 |
Azure 파일 공유 만들기
Azure Files 파일 공유를 Kubernetes 볼륨으로 사용하려면 먼저 Azure Storage 계정과 파일 공유를 만들어야 합니다.
--query nodeResourceGroup
매개 변수와 함께az aks show
명령을 사용하여 리소스 그룹 이름을 가져옵니다.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
명령의 출력은 다음 예제와 유사합니다.
MC_myResourceGroup_myAKSCluster_eastus
--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
파일 공유를 만드는 데 사용하는 다음 명령을 사용하여 연결 문자열을 환경 변수로 내보냅니다.
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
az storage share create
명령을 사용하여 파일 공유를 만듭니다.shareName
을 공유 이름으로 바꿉니다.az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
다음 명령을 사용하여 스토리지 계정 키를 환경 변수로 내보냅니다.
STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
다음 명령을 사용하여 스토리지 계정 이름 및 키를 에코합니다. Kubernetes 볼륨을 만들 때 이러한 값이 필요하므로 이 정보를 복사합니다.
echo Storage account key: $STORAGE_KEY
Kubernetes 비밀 만들기
이전 단계에서 작성된 파일 공유에 액세스하려면 Kubernetes에 자격 증명이 필요합니다. 자격 증명은 Kubernetes 비밀에 저장됩니다. Kubernetes 비밀은 Kubernetes Pod를 만들 때 참조됩니다.
kubectl create secret
명령을 사용하여 비밀을 만듭니다. 다음 예에서는 azure-secret라는 보안 비밀을 만들고 이전 단계에서 azuretorageaccountname 및 azurestorageaccountkey를 채웁니다. 기존 Azure Storage 계정을 사용하려면 계정 이름과 키를 입력합니다.kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
파일 공유를 영구 볼륨으로 탑재
azurefiles-pv.yaml
이라는 새 파일을 만들고 다음 콘텐츠를 이 파일에 복사합니다.csi
에서resourceGroup
,volumeHandle
,shareName
을 업데이트합니다. 탑재 옵션의 경우fileMode
및dirMode
의 기본값은 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: "{resource-group-name}#{account-name}#{file-share-name}" # 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 # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
kubectl create
명령을 사용하여 영구 볼륨을 만듭니다.kubectl create -f azurefiles-pv.yaml
azurefiles-mount-options-pvc.yaml이라는 새 파일을 만들고 다음 내용을 복사합니다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
kubectl apply
명령을 사용하여 PersistentVolumeClaim을 만듭니다.kubectl apply -f azurefiles-mount-options-pvc.yaml
kubectl get
명령을 사용하여 PersistentVolumeClaim이 만들어지고 PersistentVolume에 바인딩되어 있는지 확인합니다.kubectl get pvc azurefile
명령의 출력은 다음 예제와 유사합니다.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
YAML 파일에서 PersistentVolumeClaim을 Pod를 참조하도록 컨테이너 사양을 업데이트합니다. 예시:
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
Pod 사양은 현재 위치에서 업데이트할 수 없으므로
kubectl delete
명령을 사용하여 Pod를 삭제하고kubectl apply
명령을 사용하여 다시 만듭니다.kubectl delete pod mypod kubectl apply -f azure-files-pod.yaml
파일 공유를 인라인 볼륨으로 탑재
참고 항목
성능 문제를 방지하려면 많은 Pod가 동일한 파일 공유에 액세스하는 경우 인라인 볼륨 대신 영구 볼륨을 사용하는 것이 좋습니다. 인라인 볼륨은 Pod와 동일한 네임스페이스의 비밀에만 액세스할 수 있습니다. 다른 비밀 네임스페이스를 지정하려면 영구 볼륨을 사용합니다.
Azure Files 파일 공유를 Pod에 마운트하려면 컨테이너 스펙에서 볼륨을 구성하세요.
azure-files-pod.yaml
이라는 새 파일을 만들고 다음 콘텐츠를 이 파일에 복사합니다. 파일 공유 이름 또는 비밀 이름을 변경한 경우shareName
및secretName
을 업데이트하세요. 파일 공유가 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,nobrl' # optional
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에서 스토리지 및 백업에 대한 모범 사례를 참조하세요.
Azure Kubernetes Service