다음을 통해 공유


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 볼륨을 사용하는 애플리케이션에 대해 정적으로 구성

이 섹션에서는 Azure NetApp Files에서 NFS 볼륨을 만들고 볼륨을 정적으로 Kubernetes에 노출하는 방법을 설명합니다. 컨테이너화된 애플리케이션에서 볼륨을 사용하는 방법도 설명합니다.

NFS 볼륨 만들기

  1. 나중에 사용할 변수를 정의합니다. myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname, vnetidanfSubnetID를 계정과 환경의 적절한 값으로 바꿉니다. 파일 경로는 모든 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"
    
  2. 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
    

영구 볼륨 만들기

  1. 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",
          ...
        }
      ],
      ...
    }
    
  2. 파일 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
    
  3. kubectl apply 명령을 사용하여 영구 볼륨을 만듭니다.

    kubectl apply -f pv-nfs.yaml
    
  4. kubectl describe 명령을 사용하여 영구 볼륨의 상태가 Available인지 확인합니다.

    kubectl describe pv pv-nfs
    

영구적 볼륨 클레임 만들기

  1. 파일 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
    
  2. kubectl apply 명령을 사용하여 영구 볼륨 클레임을 만듭니다.

    kubectl apply -f pvc-nfs.yaml
    
  3. 명령을 사용하여 영구 볼륨 클레임의 상태Boundkubectl describe인지 확인합니다.

    kubectl describe pvc pvc-nfs
    

Pod를 사용하여 탑재

  1. 파일 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
    
  2. kubectl apply 명령을 사용하여 Pod를 만듭니다.

    kubectl apply -f nginx-nfs.yaml
    
  3. kubectl describe 명령을 사용하여 Pod가 Running인지 확인합니다.

    kubectl describe pod nginx-nfs
    
  4. 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 설치 가이드를 참조하세요.

  1. 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
    
  2. 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 구독과 볼륨을 만들어야 하는 위치에 대해 지시하기 위해 백 엔드가 만들어집니다. 이 단계에서는 이전 단계에서 만든 계정에 대한 세부 정보가 필요합니다.

  1. 파일 backend-secret.yaml을 만들고 다음 YAML에 복사합니다. Client IDclientSecret을 사용자 환경에 맞는 올바른 값으로 변경합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: backend-tbc-anf-secret
    type: Opaque
    stringData:
      clientID: 00001111-aaaa-2222-bbbb-3333cccc4444
      clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
    
  2. 파일 backend-anf.yaml을 만들고 다음 YAML에 복사합니다. subscriptionID, tenantID, locationserviceLevel을 환경에 맞는 올바른 값으로 변경합니다. Azure NetApp Files를 사용하도록 설정된 Azure 구독에 subscriptionID를 사용합니다. Azure NetApp Files 서비스에 대한 충분한 권한이 있는 Microsoft Entra ID의 애플리케이션 등록에서 tenantID, clientIDclientSecret을 가져옵니다. 애플리케이션 등록에는 Azure에서 미리 정의한 소유자 또는 기여자 역할이 포함됩니다. 위치는 이전 단계에서 만든 위임된 서브넷이 최소 하나 이상 포함된 Azure 위치여야 합니다. serviceLevelAKS 워크로드용 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 백 엔드 구성 옵션 및 예를 참조하세요.

  3. 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
    
  4. kubectl get 명령을 사용하여 백 엔드가 생성되었는지 확인합니다.

     kubectl get tridentbackends -n trident
    

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

    NAME        BACKEND               BACKEND UUID
    tbe-kfrdh   backend-tbc-anf   8da4e926-9dd4-4a40-8d6a-375aab28c566
    

스토리지 클래스 만들기

스토리지 클래스를 사용하여 영구적 볼륨에서 스토리지 단위를 동적으로 생성되는 방법을 정의합니다. Azure NetApp Files 볼륨을 사용하려면 스토리지 클래스를 만들어야 합니다.

  1. 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"
    
  2. kubectl apply 명령을 사용하여 스토리지 클래스를 만듭니다.

    kubectl apply -f anf-storageclass.yaml
    

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

    storageclass/azure-netapp-files created
    
  3. 스토리지 클래스의 상태를 보려면 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 워크로드에서 사용할 수 있도록 합니다.

  1. 파일 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
    
  2. kubectl apply 명령을 사용하여 영구 볼륨 클레임을 만듭니다.

    kubectl apply -f anf-pvc.yaml
    

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

    persistentvolumeclaim/anf-pvc created
    
  3. 영구 볼륨 클레임에 대한 정보를 보려면 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에 탑재됩니다.

  1. 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
    
  2. kubectl apply 명령을 사용하여 Pod를 만듭니다.

    kubectl apply -f anf-nginx-pod.yaml
    

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

    pod/nginx-pod created
    

    Kubernetes에서 볼륨이 탑재되고 /mnt/datanginx 컨테이너 내에서 액세스할 수 있는 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를 통해 많은 기능을 지원합니다. 자세한 내용은 다음을 참조하세요.