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. 後で使用するために、いくつかの変数を定義します。 myresourcegroupmylocationmyaccountnamemypool1premiummyfilepathmyvolsizemyvolnamevnetidanfSubnetID を、お使いのアカウントと環境の適切な値に置き換えます。 "ファイルパス" は、すべての 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 を作成します。

    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. kubectl describe コマンドを使用して、永続ボリューム要求の StatusBound であることを確認します。

    kubectl describe pvc pvc-nfs
    

ポッドを使ったマウント

  1. nginx-nfs.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。 このマニフェストは、永続ボリューム要求を使用する nginx ポッドを定義します。

    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 コマンドを使用してポッドを作成します。

    kubectl apply -f nginx-nfs.yaml
    
  3. kubectl describe コマンドを使用してポッドが Running であることを確認します。

    kubectl describe pod nginx-nfs
    
  4. kubectl exec を使用してボリュームがポッドにマウントされていることを確認してポッドに接続してから、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 の業界標準である Container Storage Interface (CSI) ドライバーを使用して、Kubernetes アプリケーションのストレージの消費を簡素化します。 Astra Trident は、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: abcde356-bf8e-fake-c111-abcde35613aa
      clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
    
  2. backend-anf.yaml という名前のファイルを作成し、そこに以下の YAML をコピーします。 subscriptionIDtenantIDlocationserviceLevel を環境に合った適切な値に変更します。 Azure NetApp Files が有効になっている Azure サブスクリプションの subscriptionID を使用します。 Azure NetApp Files サービスに対する十分なアクセス許可を持つ、Microsoft Entra ID 内のアプリケーションの登録tenantIDclientIDclientSecret を取得します。 アプリケーションの登録には、Azure によって定義済みの所有者ロールまたは共同作成者ロールが含まれます。 場所は、前の手順で作成した、少なくとも 1 つの委任されたサブネットを含む 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: 12abc678-4774-fake-a1b2-a7abcde39312
      tenantID: a7abcde3-edc1-fake-b111-a7abcde356cf
      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 アクセス権を備えた 1 TiB のボリュームが必要です。

    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 で永続ボリュームが作成されます。 Azure NetApp Files ボリュームをマウントしてアクセスするためにポッドを起動できます。

次のマニフェストを使用して、前の手順で作成した Azure NetApp Files ボリュームをマウントする NGINX ポッドを定義することができます。 この例では、ボリュームは /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 コマンドを使用してポッドを作成します。

    kubectl apply -f anf-nginx-pod.yaml
    

    コマンドの出力は、次の例のようになります。

    pod/nginx-pod created
    

    Kubernetes によって、/mnt/data にある nginx コンテナー内に、ボリュームがマウントされてアクセス可能なポッドが作成されました。 kubectl describe コマンドを使用して、ポッドのイベント ログを調べると確認できます。

    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 の多くの機能がサポートされています。 詳細については、次のトピックを参照してください。