Azure Kubernetes Service의 Azure NetApp Files NFS 볼륨 프로비전
Azure Kubernetes Service용 Azure NetApp Files를 구성한 후 Azure Kubernetes Service에 대한 Azure NetApp Files 볼륨을 프로비전할 수 있습니다.
Azure NetApp Files에서는 NFS(NFSv3 또는 NFSv4.1), SMB 또는 이중 프로토콜(NFSv3과 SMB 또는 NFSv4.1과 SMB)을 사용하여 볼륨을 만들 수 있습니다.
- 이 문서에서는 NFS 볼륨을 정적 또는 동적으로 프로비전하는 방법을 자세히 설명합니다.
- SMB 볼륨을 정적 또는 동적으로 프로비전하는 방법에 대한 자세한 내용은 Azure Kubernetes Service에 대한 Azure NetApp Files SMB 볼륨 프로비전을 참조하세요.
- 이중 프로토콜 볼륨을 정적으로 프로비전하는 방법에 대한 자세한 내용은 Azure Kubernetes Service에 대한 Azure NetApp Files 이중 프로토콜 볼륨 프로비전을 참조하세요.
NFS 볼륨을 사용하는 애플리케이션에 대해 정적으로 구성
이 섹션에서는 Azure NetApp Files에서 NFS 볼륨을 만들고 볼륨을 정적으로 Kubernetes에 노출하는 방법을 설명합니다. 컨테이너화된 애플리케이션에서 볼륨을 사용하는 방법도 설명합니다.
NFS 볼륨 만들기
나중에 사용할 변수를 정의합니다. myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname, vnetid 및 anfSubnetID를 계정과 환경의 적절한 값으로 바꿉니다. 파일 경로는 모든 ANF 계정 내에서 고유해야 합니다.
RESOURCE_GROUP="myresourcegroup" LOCATION="mylocation" ANF_ACCOUNT_NAME="myaccountname" POOL_NAME="mypool1" SERVICE_LEVEL="premium" # Valid values are Standard, Premium, and Ultra UNIQUE_FILE_PATH="myfilepath" VOLUME_SIZE_GIB="myvolsize" VOLUME_NAME="myvolname" VNET_ID="vnetId" SUBNET_ID="anfSubnetId"
az netappfiles volume create
명령을 사용하여 볼륨을 만듭니다. 자세한 내용은 Azure NetApp Files의 NFS 볼륨 만들기를 참조하세요.az netappfiles volume create \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --name "$VOLUME_NAME" \ --service-level $SERVICE_LEVEL \ --vnet $VNET_ID \ --subnet $SUBNET_ID \ --usage-threshold $VOLUME_SIZE_GIB \ --file-path $UNIQUE_FILE_PATH \ --protocol-types NFSv3
영구 볼륨 만들기
az netappfiles volume show
명령을 사용하여 볼륨의 세부 정보를 나열합니다. 이전 단계에서 정의되지 않은 경우 변수를 Azure NetApp Files 계정 및 환경의 적절한 값으로 바꿉니다.az netappfiles volume show \ --resource-group $RESOURCE_GROUP \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --volume-name "$VOLUME_NAME -o JSON
다음 출력은 실제 값으로 실행된 위 명령의 예입니다.
{ ... "creationToken": "myfilepath2", ... "mountTargets": [ { ... "ipAddress": "10.0.0.4", ... } ], ... }
파일
pv-nfs.yaml
을 만들고 다음 YAML에 복사합니다. 서버가 1단계의 출력 IP 주소와 일치하고 경로가 위creationToken
의 출력과 일치하는지 확인합니다. 용량도 위 단계의 볼륨 크기와 일치해야 합니다.apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 100Gi accessModes: - ReadWriteMany mountOptions: - vers=3 nfs: server: 10.0.0.4 path: /myfilepath2
kubectl apply
명령을 사용하여 영구 볼륨을 만듭니다.kubectl apply -f pv-nfs.yaml
kubectl describe
명령을 사용하여 영구 볼륨의 상태가 Available인지 확인합니다.kubectl describe pv pv-nfs
영구적 볼륨 클레임 만들기
파일
pvc-nfs.yaml
을 만들고 다음 YAML에 복사합니다. 이 매니페스트는 사용자가 만든 PV와 일치하는 100Gi 스토리지 및ReadWriteMany
액세스 모드에 대해pvc-nfs
라는 PVC를 만들고 사용자가 만든 PV와 일치하는지 확인합니다.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 100Gi
kubectl apply
명령을 사용하여 영구 볼륨 클레임을 만듭니다.kubectl apply -f pvc-nfs.yaml
명령을 사용하여 영구 볼륨 클레임의 상태가 Bound
kubectl describe
인지 확인합니다.kubectl describe pvc pvc-nfs
Pod를 사용하여 탑재
파일
nginx-nfs.yaml
을 만들고 다음 YAML에 복사합니다. 이 매니페스트는 영구 볼륨 클레임을 사용하는nginx
Pod를 정의합니다.kind: Pod apiVersion: v1 metadata: name: nginx-nfs spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: nginx-nfs command: - "/bin/sh" - "-c" - while true; do echo $(date) >> /mnt/azure/outfile; sleep 1; done volumeMounts: - name: disk01 mountPath: /mnt/azure volumes: - name: disk01 persistentVolumeClaim: claimName: pvc-nfs
kubectl apply
명령을 사용하여 Pod를 만듭니다.kubectl apply -f nginx-nfs.yaml
kubectl describe
명령을 사용하여 Pod가 Running인지 확인합니다.kubectl describe pod nginx-nfs
Pod에 연결하기 위해
kubectl exec
를 사용하여 볼륨이 Pod에 탑재되었는지 확인한 다음,df -h
를 사용하여 볼륨이 탑재되었는지 확인합니다.kubectl exec -it nginx-nfs -- sh
/ # df -h Filesystem Size Used Avail Use% Mounted on ... 10.0.0.4:/myfilepath2 100T 384K 100T 1% /mnt/azure ...
NFS 볼륨을 사용하는 애플리케이션에 대해 동적으로 구성
Astra Trident는 Azure NetApp Files에서 NFS 파일이나 SMB 파일을 동적으로 프로비전하는 데 사용될 수 있습니다. 동적으로 프로비전된 SMB 볼륨은 Windows 작업자 노드에서만 지원됩니다.
이 섹션에서는 Astra Trident를 사용하여 Azure NetApp Files에서 NFS 볼륨을 동적으로 만들고 컨테이너화된 애플리케이션에 자동으로 탑재하는 방법을 설명합니다.
Astra Trident 설치
NFS 볼륨을 동적으로 프로비전하려면 Astra Trident를 설치해야 합니다. Astra Trident는 Kubernetes용으로 특별히 빌드된 NetApp의 동적 스토리지 프로비저닝 프로그램입니다. Astra Trident의 업계 표준 CSI(Container Storage Interface) 드라이버를 사용하여 Kubernetes 애플리케이션에 대한 스토리지 사용을 간소화합니다. Astra Trident에서 Pod로 Kubernetes 클러스터에 배포하고 Kubernetes 워크로드에 대한 동적 스토리지 오케스트레이션 서비스를 제공합니다.
Trident는 Trident 연산자(수동으로 또는 Helm 사용) 또는 tridentctl
을 사용하여 설치할 수 있습니다. 이러한 설치 방법과 작동 방식에 대한 자세한 내용은 Astra Trident 설치 가이드를 참조하세요.
Helm을 사용하여 Astra Trident 설치
이 방법을 사용하여 Astra Trident를 설치하려면 워크스테이션에 Helm을 설치해야 합니다. Astra Trident를 설치하는 다른 방법은 Astra Trident 설치 가이드를 참조하세요.
Linux 작업자 노드만 있는 클러스터의 Helm을 사용하여 Astra Trident를 설치하려면 다음 명령을 실행합니다.
helm repo add netapp-trident https://netapp.github.io/trident-helm-chart helm install trident netapp-trident/trident-operator --version 23.04.0 --create-namespace --namespace trident
명령의 출력은 다음 예제와 유사합니다.
NAME: trident LAST DEPLOYED: Fri May 5 13:55:36 2023 NAMESPACE: trident STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI storage provisioner for Kubernetes. Your release is named 'trident' and is installed into the 'trident' namespace. Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster. To configure Trident to manage storage resources, you will need a copy of tridentctl, which is available in pre-packaged Trident releases. You may find all Trident releases and source code online at https://github.com/NetApp/trident. To learn more about the release, try: $ helm status trident $ helm get all trident
Astra Trident가 성공적으로 설치되어 있는지 확인하려면 다음
kubectl describe
명령을 실행합니다.kubectl describe torc trident
명령의 출력은 다음 예제와 유사합니다.
Name: trident Namespace: Labels: app.kubernetes.io/managed-by=Helm Annotations: meta.helm.sh/release-name: trident meta.helm.sh/release-namespace: trident API Version: trident.netapp.io/v1 Kind: TridentOrchestrator Metadata: ... Spec: IPv6: false Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: <nil> Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent k8sTimeout: 0 Kubelet Dir: <nil> Log Format: text Log Layers: <nil> Log Workflows: <nil> Namespace: trident Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Windows: false Status: Current Installation Params: IPv6: false Autosupport Hostname: Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: Autosupport Serial Number: Debug: false Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent Image Pull Secrets: Image Registry: k8sTimeout: 30 Kubelet Dir: /var/lib/kubelet Log Format: text Log Layers: Log Level: info Log Workflows: Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Message: Trident installed Namespace: trident Status: Installed Version: v23.04.0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Installing 2m59s trident-operator.netapp.io Installing Trident Normal Installed 2m31s trident-operator.netapp.io Trident installed
백 엔드 만들기
Astra Trident에게 Azure NetApp Files 구독과 볼륨을 만들어야 하는 위치에 대해 지시하기 위해 백 엔드가 만들어집니다. 이 단계에서는 이전 단계에서 만든 계정에 대한 세부 정보가 필요합니다.
파일
backend-secret.yaml
을 만들고 다음 YAML에 복사합니다.Client ID
및clientSecret
을 사용자 환경에 맞는 올바른 값으로 변경합니다.apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: 00001111-aaaa-2222-bbbb-3333cccc4444 clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
파일
backend-anf.yaml
을 만들고 다음 YAML에 복사합니다.subscriptionID
,tenantID
,location
및serviceLevel
을 환경에 맞는 올바른 값으로 변경합니다. Azure NetApp Files를 사용하도록 설정된 Azure 구독에subscriptionID
를 사용합니다. Azure NetApp Files 서비스에 대한 충분한 권한이 있는 Microsoft Entra ID의 애플리케이션 등록에서tenantID
,clientID
및clientSecret
을 가져옵니다. 애플리케이션 등록에는 Azure에서 미리 정의한 소유자 또는 기여자 역할이 포함됩니다. 위치는 이전 단계에서 만든 위임된 서브넷이 최소 하나 이상 포함된 Azure 위치여야 합니다.serviceLevel
은 AKS 워크로드용 Azure NetApp Files 구성에서 용량 풀에 대해 구성된serviceLevel
과 일치해야 합니다.apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: backend-tbc-anf spec: version: 1 storageDriverName: azure-netapp-files subscriptionID: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e tenantID: aaaabbbb-0000-cccc-1111-dddd2222eeee location: eastus serviceLevel: Premium credentials: name: backend-tbc-anf-secret
백 엔드에 대한 자세한 내용은 Azure NetApp Files 백 엔드 구성 옵션 및 예를 참조하세요.
kubectl apply
명령을 사용하여 비밀과 백 엔드를 적용합니다. 먼저 비밀을 적용합니다.kubectl apply -f backend-secret.yaml -n trident
명령의 출력은 다음 예제와 유사합니다.
secret/backend-tbc-anf-secret created
백 엔드를 적용합니다.
kubectl apply -f backend-anf.yaml -n trident
명령의 출력은 다음 예제와 유사합니다.
tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
kubectl get
명령을 사용하여 백 엔드가 생성되었는지 확인합니다.kubectl get tridentbackends -n trident
명령의 출력은 다음 예제와 유사합니다.
NAME BACKEND BACKEND UUID tbe-kfrdh backend-tbc-anf 8da4e926-9dd4-4a40-8d6a-375aab28c566
스토리지 클래스 만들기
스토리지 클래스를 사용하여 영구적 볼륨에서 스토리지 단위를 동적으로 생성되는 방법을 정의합니다. Azure NetApp Files 볼륨을 사용하려면 스토리지 클래스를 만들어야 합니다.
anf-storageclass.yaml
이라는 파일을 만들고 다음 YAML에 복사합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azure-netapp-files provisioner: csi.trident.netapp.io parameters: backendType: "azure-netapp-files" fsType: "nfs"
kubectl apply
명령을 사용하여 스토리지 클래스를 만듭니다.kubectl apply -f anf-storageclass.yaml
명령의 출력은 다음 예제와 유사합니다.
storageclass/azure-netapp-files created
스토리지 클래스의 상태를 보려면
kubectl get
명령을 실행합니다.kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE azure-netapp-files csi.trident.netapp.io Delete Immediate false
PVC 만들기
PVC(영구적 볼륨 클레임)는 사용자의 스토리지 요청입니다. 영구 볼륨 클레임이 만들어지면 Astra Trident에서 자동으로 Azure NetApp Files 볼륨을 만들고 Kubernetes 워크로드에서 사용할 수 있도록 합니다.
파일
anf-pvc.yaml
을 만들고 다음 YAML에 복사합니다. 이 예제에서는 ReadWriteMany 액세스 권한이 있는 1TiB 볼륨이 필요합니다.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Ti storageClassName: azure-netapp-files
kubectl apply
명령을 사용하여 영구 볼륨 클레임을 만듭니다.kubectl apply -f anf-pvc.yaml
명령의 출력은 다음 예제와 유사합니다.
persistentvolumeclaim/anf-pvc created
영구 볼륨 클레임에 대한 정보를 보려면
kubectl get
명령을 실행합니다.kubectl get pvc
명령의 출력은 다음 예제와 유사합니다.
kubectl get pvc -n trident NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc Bound pvc-bffa315d-3f44-4770-86eb-c922f567a075 1Ti RWO azure-netapp-files 62s
영구적 볼륨 사용
PVC를 만들면 Astra Trident에서 영구 볼륨을 만듭니다. Pod를 회전하여 Azure NetApp Files 볼륨을 탑재하고 액세스할 수 있습니다.
다음 매니페스트를 사용하여 이전 단계에서 만든 Azure NetApp Files 볼륨을 탑재하는 NGINX Pod를 정의할 수 있습니다. 이 예제에서는 볼륨이 /mnt/data
에 탑재됩니다.
anf-nginx-pod.yaml
이라는 파일을 만들고 다음 YAML에 복사합니다.kind: Pod apiVersion: v1 metadata: name: nginx-pod spec: containers: - name: nginx 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/data" name: volume volumes: - name: volume persistentVolumeClaim: claimName: anf-pvc
kubectl apply
명령을 사용하여 Pod를 만듭니다.kubectl apply -f anf-nginx-pod.yaml
명령의 출력은 다음 예제와 유사합니다.
pod/nginx-pod created
Kubernetes에서 볼륨이 탑재되고
/mnt/data
의nginx
컨테이너 내에서 액세스할 수 있는 Pod를 만들었습니다.kubectl describe
명령을 사용하여 Pod의 이벤트 로그를 확인해 확인할 수 있습니다.kubectl describe pod nginx-pod
명령의 출력은 다음 예제와 유사합니다.
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: anf-pvc ReadOnly: false default-token-k7952: Type: Secret (a volume populated by a Secret) SecretName: default-token-k7952 Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 15s default-scheduler Successfully assigned trident/nginx-pod to brameshb-non-root-test Normal SuccessfulAttachVolume 15s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-bffa315d-3f44-4770-86eb-c922f567a075" Normal Pulled 12s kubelet Container image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" already present on machine Normal Created 11s kubelet Created container nginx Normal Started 10s kubelet Started container nginx
다음 단계
Astra Trident는 Azure NetApp Files를 통해 많은 기능을 지원합니다. 자세한 내용은 다음을 참조하세요.
Azure Kubernetes Service