すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Use NAS dynamic volumes

最終更新日:Jun 23, 2026

File Storage NAS の動的プロビジョニングを使用すると、ワークロードのストレージをオンデマンドで自動的にプロビジョニングできるため、事前に PV を作成する必要がなくなります。この機能は、データの永続性と共有を提供し、複数の Pod が同時に読み書きできるようにし、Web アプリケーションやログ保持などのユースケースでストレージ管理を簡素化します。

仕組み

動的ボリュームでは、アプリケーションが PVC を作成すると、システムはオンデマンドで新しいストレージボリュームと対応する PV を自動的に作成します。このプロビジョニングは、PVC で指定された StorageClass によって決定されます。このモードは、より高い柔軟性を提供し、ストレージボリュームの自動拡張をサポートします。

マウントモード

マウントモードは、StorageClass の volumeAs パラメーターで指定できます。このパラメーターは、PV と NAS ファイルシステムの関係を定義します。

マウントモード

説明

シナリオ

subpath

subpath モードでは、各 PV は NAS ファイルシステム内の一意のサブディレクトリにマッピングされます。このモードはデータ分離を容易にします。

  • 複数の Pod が NAS ファイルシステムの同じサブディレクトリをマウントします。

  • 複数の Pod がデータ分離のために同じ NAS ファイルシステムの異なるサブディレクトリをマウントします。

sharepath

sharepath モードでは、すべての PV は StorageClass で定義された同じ NAS ディレクトリにマッピングされます。したがって、この StorageClass を使用するすべての PVC は同じ共有ディレクトリにアクセスします。

異なる名前空間にまたがる複数の Pod が同じ NAS サブディレクトリをマウントする必要があります。

filesystem (非推奨)

filesystem モードでは、各 PV ごとに新しい専用の NAS ファイルシステムインスタンスが動的に作成されます。

このモードは、パフォーマンスとセキュリティの観点から厳密な分離を必要とするアプリケーションに適しています。アプリケーションごとに独立した NAS ファイルシステムとマウントターゲットを動的に作成および削除できますが、コストが高くなります。

ワークフロー

NAS 動的ボリュームをマウントするためのワークフローは次のとおりです。

  1. StorageClass の作成:ストレージテンプレートを定義し、NAS マウントターゲットを宣言し、ビジネス要件に基づいてマウントモード (subpath や sharepath など) を選択します。

  2. PVC の作成:アプリケーションは PVC を使用してストレージリソースを要求します。システムは指定された StorageClass に基づいて PV を自動的に作成し、PVC にバインドします。

  3. アプリケーションでのボリュームのマウント:バインドされた PVC をアプリケーション Pod にマウントします。ボリュームはコンテナ内の永続ディレクトリとして利用可能になります。

前提条件

  • csi-plugin および csi-provisioner コンポーネントがインストールされていること。

    CSI コンポーネントはデフォルトでインストールされています。インストールされたままであることを確認してください。インストール状況は アドオン管理 ページで確認できます。CSI コンポーネントを最新バージョンにアップグレードすることを推奨します。
  • subpath および sharepath を使用するには、次の要件を満たす Apsara File Storage NAS ファイルシステムが必要です。そうでない場合は、ファイルシステムを作成してください。

    NAS には、マウント接続性、ファイルシステム数、プロトコルの種類に関する制限事項があります。
    • プロトコルタイプ:NFS のみがサポートされています。

    • Virtual Private Cloud (VPC):Apsara File Storage NAS ファイルシステムは、クラスターと同じ VPC 内にある必要があります。Apsara File Storage NAS はクロスゾーンマウントをサポートしますが、VPC 間マウントはサポートしません。

    • マウントポイント:クラスターと同じ VPC 内にあり、アクティブなマウントターゲットを追加します。詳細については、「マウントターゲットの管理」をご参照ください。マウントターゲットアドレスをメモしておきます。

    • (オプション) 暗号化タイプ:ボリューム内のデータを暗号化するには、Apsara File Storage NAS ファイルシステムを作成する際に暗号化タイプを設定します。

注意事項

  • マウントターゲットを削除しない:ノードの I/O エラーを防ぐため、対応するボリュームが使用中の間は NAS コンソールでマウントターゲットを削除しないでください。

  • 同時書き込み:NAS は共有ストレージを提供します。複数の Pod が同じボリュームをマウントする場合、アプリケーションは同時書き込みによる潜在的なデータ整合性の問題を処理する必要があります。

    NAS への同時書き込みに関する制限事項の詳細については、「複数のプロセスが同じログファイルに書き込む」および「ECS インスタンス間で更新されたファイルコンテンツの読み取り遅延」をご参照ください。
  • マウントパフォーマンス:アプリケーションで securityContext.fsgroup パラメーターを設定すると、kubelet はボリュームがマウントされた後に再帰的に chmod または chown を実行し、Pod の起動時間が大幅に増加します。

    マウントパフォーマンスを最適化するには、「NAS ボリュームに関するよくある質問」をご参照ください。

方法 1:subpath を使用したボリュームのマウント

この方法では、CSI プロビジョナーが各 PersistentVolumeClaim (PVC) のために NAS ファイルシステム内に専用のサブパスを自動的に作成します。このサブパスが PersistentVolume (PV) として機能します。

1. StorageClass の作成

StorageClass は、動的ボリュームをプロビジョニングするためのテンプレートとして機能し、ストレージリソースのソースと動作を定義します。

kubectl

  1. 次の内容で alicloud-nas-subpath.yaml という名前のファイルを作成します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      # StorageClass の名前。クラスター内で一意である必要があります。
      name: alicloud-nas-subpath  
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      # subpath に設定します。
      volumeAs: subpath
      # server フィールドの形式は <nas-server-address>:/<path> です。
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
      archiveOnDelete: "true"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true

    パラメーター

    説明

    mountOptions

    NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。vers=4.0 のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。

    parameters.volumeAs

    ボリュームのプロビジョニングモード。subpath に設定します。

    parameters.server

    マウントする NAS マウントターゲットとサブパスを <nas-server-address>:/<path> の形式で指定します。

    • <nas-server-address>:NAS ファイルシステムのマウントターゲット。詳細については、「マウントターゲットの管理」をご参照ください。

    • :/<path>:マウントする NAS サブパス。このパラメーターが設定されていない場合、または指定されたサブパスが存在しない場合、デフォルトでルートディレクトリがマウントされます。

      • 汎用 NAS:ルートディレクトリは / です。

      • エクストリーム NAS:ルートディレクトリは /share です。サブパスをマウントする場合、path/share で始まる必要があります (例:/share/data)。

    parameters.archiveOnDelete

    PVC が削除され、その reclaimPolicyDelete に設定されている場合に、バックエンドストレージ上のデータを削除するかどうかを指定します。

    このオプションは、共有 NAS ストレージ上の偶発的なデータ損失を防ぐための安全策として機能します。
    • true (デフォルト):ディレクトリとそのファイルは削除されません。代わりに、archived-{pvName}.{timestamp} の形式で名前が変更され、アーカイブされます。

    • false:対応するディレクトリとそのデータは完全に削除されます。

      この操作は NAS サブパスとそのファイルを削除するものであり、NAS ファイルシステム自体を削除するものではありません。

      NAS ファイルシステムを削除するには、「ファイルシステムの削除」をご参照ください。

    PV の作成と削除が頻繁に行われるシナリオでは、このパラメーターを false に設定すると、CSI コントローラーのタスクキューがブロックされ、新しい PV が作成できなくなる可能性があります。詳細については、「動的 NAS ボリュームを使用すると、コントローラーのタスクキューが満杯になり、新しい PV を作成できない」をご参照ください。

    provisioner

    ドライバー。Alibaba Cloud NAS CSI プラグインを使用する場合、このパラメーターを nasplugin.csi.alibabacloud.com に設定します。

    reclaimPolicy

    PV のリクレームポリシー。

    • Delete (デフォルト):PVC が削除されると、バックエンドストレージのデータは archiveOnDelete の設定に基づいて処理されます。

    • Retain:PVC が削除されても、PV と NAS ファイルシステム内のデータは削除されず、手動で削除する必要があります。このポリシーは、偶発的なデータ損失を防ぐために高いデータセキュリティが要求されるシナリオで推奨されます。

    allowVolumeExpansion

    汎用 NAS のみでサポートされています。

    PVC の容量を変更することで、この StorageClass によって作成された PV の動的な拡張を許可します。

    この StorageClass は、NAS のディレクトリクォータ機能を使用して PV 容量を管理し、正確なサイズ制御を可能にします。PVC の spec.resources.requests.storage フィールドを編集することで、オンラインでボリュームを拡張できます。詳細については、「動的 NAS ボリュームのディレクトリクォータの設定」をご参照ください。

    NAS のディレクトリクォータは非同期で有効になります。PV が作成または拡張された直後に高速で大容量のデータ書き込みを行うと、クォータがまだ完全に適用されていないため、指定された容量を超える可能性があります。詳細については、「使用制限」をご参照ください。
  2. StorageClass を作成します。

    kubectl create -f alicloud-nas-subpath.yaml

コンソール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、ボリューム > ストレージクラス をクリックします。

  3. 作成する をクリックし、クラスター内で一意の名前を StorageClass に指定し、ストレージタイプ として NAS を選択し、画面の指示に従って StorageClass を作成します。

    主要なパラメーターは次の表で説明されています。

    パラメーター

    説明

    アタッチポイントの選択

    NAS ファイルシステムのマウントターゲット。

    ストレージボリュームモード

    ボリュームのプロビジョニングモード。パス: を選択します。指定されたマウントパスの下にサブパスが自動的に作成されます。データは <NAS マウントターゲット>:<マウントパス>/<pv-name>/ に保存されます。

    マウントのパス

    マウントする NAS サブディレクトリ。このパラメーターが指定されていない場合、デフォルトでルートディレクトリがマウントされます。

    ディレクトリが NAS ファイルシステムに存在しない場合、自動的に作成されてからマウントされます。
    • 汎用 NAS:ルートディレクトリは / です。

    • エクストリーム NAS:ルートディレクトリは /share です。サブディレクトリをマウントする場合、path/share で始まる必要があります (例:/share/data)。

    リクレームポリシー

    PV のリクレームポリシー。

    • Delete (デフォルト):PVC が削除されると、バックエンドストレージのデータは archiveOnDelete の設定に基づいて処理されます。

    • Retain:PVC が削除されても、PV と NAS ファイルシステム内のデータは削除されず、手動で削除する必要があります。このポリシーは、偶発的なデータ損失を防ぐために高いデータセキュリティが要求されるシナリオで推奨されます。

    マウントオプション

    NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。vers=4.0 のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。

    StorageClass が作成されると、ストレージクラス リストで確認できます。

2. PVC の作成

PersistentVolumeClaim (PVC) は、アプリケーションからのストレージ要求であり、関連する StorageClass をトリガーして、一致する PersistentVolume (PV) を動的にプロビジョニングし、バインドします。

kubectl

  1. 次の内容で nas-pvc.yaml という名前のファイルを作成します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
    spec:
      accessModes:
      - ReadWriteMany 
      # 使用する StorageClass を指定します。
      storageClassName: alicloud-nas-subpath  
      resources: 
        requests:
          # ストレージボリュームの必要な容量を宣言します。
          storage: 20Gi  

    パラメーター

    説明

    accessModes

    アクセスモード。有効な値:

    • ReadWriteMany (デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。

    • ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。

    • ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。

    storageClassName

    使用する StorageClass の名前。

    storage

    ストレージボリュームの必要な容量。デフォルトでは、この宣言はリソース要求として機能し、Pod が利用できる実際のストレージ容量を制限しません。

    NAS ファイルシステムの容量制限は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。

    ただし、StorageClass の allowVolumeExpansiontrue に設定されている場合、この値は厳密に適用されるハードリミットになります。CSI プラグインは、この設定に基づいて NAS ディレクトリクォータを設定し、PV の利用可能な容量を制限します。

  2. PVC を作成します。

    kubectl create -f nas-pvc.yaml
  3. PV を確認します。

    kubectl get pv

    期待される出力は次のようになり、StorageClass が自動的に PersistentVolume (PV) をプロビジョニングし、PVC にバインドしたことを示します。

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    nas-a7540d97-0f53-4e05-b7d9-557309******   20Gi       RWX            Retain           Bound    default/nas-csi-pvc   alicloud-nas-subpath     <unset>                          5m

コンソール

  1. クラスター管理ページの左側のナビゲーションウィンドウで、ストレージ > ボリュームクレーム を選択します。

  2. ボリュームクレーム ページで、作成する をクリックし、PVC パラメーターを設定してから 作成する をクリックします。

    パラメーター

    説明

    ボリュームタイプ

    NAS を選択します。

    名前

    PVC の名前。名前は名前空間内で一意である必要があります。

    割り当てモード

    StorageClass の使用 を選択します。

    既存のストレージクラス

    ストレージクラスの選択 をクリックし、作成した StorageClass を選択します。

    合計容量

    ストレージボリュームの必要な容量。デフォルトでは、この宣言はリソース要求として機能し、Pod が利用できる実際のストレージ容量を制限しません。

    NAS ファイルシステムの容量制限は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。

    ただし、StorageClass の allowVolumeExpansiontrue に設定されている場合、この値は厳密に適用されるハードリミットになります。CSI プラグインは、この設定に基づいて NAS ディレクトリクォータを設定し、PV の利用可能な容量を制限します。

    アクセスモード

    アクセスモード。有効な値:

    • ReadWriteMany (デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。

    • ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。

    • ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。

3. アプリケーションの作成と NAS のマウント

PVC が作成された後、ボリュームをアプリケーションにマウントできます。このセクションでは、同じ PVC を参照する 2 つの Deployment を作成し、複数の Pod が同じ NAS サブパスを共有できるようにする方法を示します。

kubectl

同じ PVC を参照する 2 つの Deployment を作成し、NAS ファイルシステムの同じサブパスを共有できるようにします。

同じ NAS ファイルシステムから異なるサブパスを異なる Pod にマウントするには、サブパスごとに一意の StorageClass と対応する PVC を作成する必要があります。
  1. 次の内容で nginx-1.yamlnginx-2.yaml という名前の 2 つのファイルを作成します。

    両方のアプリケーションの構成はほぼ同じです。どちらも同じ PVC を参照します。
    • nginx-1.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test-1     
        labels:
          app: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  # コンテナ内の NAS ボリュームのマウントパス。
                  mountPath: "/data"          
            volumes:
              - name: nas-pvc                 
                persistentVolumeClaim:
                  # 事前に作成した PVC を参照します。
                  claimName: nas-csi-pvc      
    • nginx-2.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test-2     
        labels:
          app: nginx
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  # コンテナ内の NAS ボリュームのマウントパス。
                  mountPath: "/data"           
            volumes:
              - name: nas-pvc                 
                persistentVolumeClaim:
                  # 事前に作成した PVC を参照します。
                  claimName: nas-csi-pvc       
  2. 2 つの Deployment を作成します。

    kubectl create -f nginx-1.yaml -f nginx-2.yaml
  3. Pod のステータスを確認します。

    kubectl get pod -l app=nginx

    期待される出力:

    NAME                         READY   STATUS    RESTARTS   AGE
    nas-test-1-b75d5b6bc-*****   1/1     Running   0          51s
    nas-test-2-b75d5b6bc-*****   1/1     Running   0          44s
  4. 各 Pod を検査して、正しい PersistentVolumeClaim (PVC) を使用していることを確認します。

    <podName> を各 Pod の実際の名前で置き換えてください。
    kubectl describe pod <podName> | grep "ClaimName:"

    期待される出力では、両方の Pod が同じ PVC を使用しており、NAS ファイルシステムの同じサブパスを共有していることが確認されます。

コンソール

次の手順を繰り返して、同じ PVC を使用する 2 つの Deployment を作成し、NAS ファイルシステムの同じサブパスを共有できるようにします。

  1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Workloads > Deployments をクリックします。

  2. イメージを使用して作成 をクリックし、画面の指示に従ってアプリケーションを設定および作成します。

    主要なパラメーターは以下に説明されています。他のパラメーターはデフォルト値のままにできます。詳細については、「ステートレスアプリケーション (Deployment) の作成」をご参照ください。

    セクション

    パラメーター

    説明

    基本情報

    Replicas:

    Deployment のレプリカ数。

    コンテナー

    画像

    アプリケーションのデプロイに使用されるイメージのアドレス。

    リソースリクエスト

    コンテナが必要とする vCPU およびメモリリソース。

    データボリューム

    PVC を追加 をクリックし、パラメーターを設定します。

    • マウントソース:作成した PVC を選択します。

    • コンテナーパス:NAS ファイルシステムがマウントされるコンテナ内のパスを入力します。

    デプロイが完了したら、デプロイメント ページでアプリケーション名をクリックし、ポッド タブを確認して、Pod が正常に実行されていること (ステータスが Running) を確認できます。

ストレージが共有され、永続的であることを確認するには、「共有ストレージと永続ストレージの検証」をご参照ください。

方法 2:sharepath モードを使用したマウント

このモードでは、この StorageClass を使用する PVC のために PV が作成される際、プロビジョナーは新しいディレクトリを作成しません。代わりに、すべての PV は StorageClass で定義されたパスを使用し、各 PV を同じ NAS ディレクトリにマッピングします。

1. StorageClass の作成

StorageClass は、動的ボリュームをプロビジョニングするためのテンプレートとして機能し、ストレージリソースのソースと動作を定義します。

kubectl

  1. 次の内容で alicloud-nas-sharepath.yaml という名前のファイルを作成します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-sharepath
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: sharepath
      # server フィールドの形式は <nas-server-address>:/<path> です
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    パラメーター

    説明

    mountOptions

    NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。vers=4.0 のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。

    parameters.volumeAs

    ボリュームのプロビジョニングモード。sharepath に設定します。

    parameters.server

    マウントする NAS マウントターゲットとサブパスを <nas-server-address>:/<path> の形式で指定します。

    • <nas-server-address>:NAS ファイルシステムのマウントターゲット。詳細については、「マウントターゲットの管理」をご参照ください。

    • :/<path>:マウントする NAS サブパス。このパラメーターが設定されていない場合、または指定されたサブパスが存在しない場合、デフォルトでルートディレクトリがマウントされます。

      • 汎用 NAS:ルートディレクトリは / です。

      • エクストリーム NAS:ルートディレクトリは /share です。サブパスをマウントする場合、path/share で始まる必要があります (例:/share/data)。

    provisioner

    ドライバー。Alibaba Cloud NAS CSI プラグインを使用する場合、このパラメーターを nasplugin.csi.alibabacloud.com に設定します。

    reclaimPolicy

    PV のリクレームポリシー。sharepath モードの場合、これは Retain である必要があります。

  2. StorageClass を作成します。

    kubectl create -f alicloud-nas-sharepath.yaml

コンソール

  1. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、ボリューム > ストレージクラス をクリックします。

  2. 作成する をクリックし、StorageClass に一意の名前を指定し、ストレージタイプ として NAS を選択します。

    パラメーター

    説明

    アタッチポイントの選択

    NAS ファイルシステムのマウントターゲット。

    ストレージボリュームモード

    ボリュームのプロビジョニングモード。この例では、sharepath モードを有効にする 共有ディレクトリ を選択します。

    マウントのパス

    マウントする NAS サブディレクトリ。このパラメーターが指定されていない場合、デフォルトでルートディレクトリがマウントされます。

    ディレクトリが NAS ファイルシステムに存在しない場合、自動的に作成されてからマウントされます。
    • 汎用 NAS:ルートディレクトリは / です。

    • エクストリーム NAS:ルートディレクトリは /share です。サブディレクトリをマウントする場合、path/share で始まる必要があります (例:/share/data)。

    リクレームポリシー

    sharepath モードの場合、これは Retain である必要があります。

    マウントオプション

    NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。vers=4.0 のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。

2. PVC の作成

PersistentVolumeClaim (PVC) は、アプリケーションからのストレージ要求であり、関連する StorageClass をトリガーして、一致する PersistentVolume (PV) を動的にプロビジョニングし、バインドします。

名前空間をまたいでデータを共有するには、2 つの異なる名前空間に同じ名前の PVC を作成します。PVC は名前を共有しますが、異なる名前空間にあるため、別々のリソースです。StorageClass は各 PVC に対して個別の PV をプロビジョニングし、両方の PV は NAS ファイルシステム上の同じ共有ディレクトリを指します。

kubectl

  1. ns1ns2 の 2 つの名前空間を作成します。

    kubectl create ns ns1
    kubectl create ns ns2
  2. ns1ns2 の両方の名前空間に同じ名前の PVC を作成するために、次の内容で pvc.yaml という名前のファイルを作成します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
      namespace: ns1
    spec:
      accessModes:
      - ReadWriteMany 
      storageClassName: alicloud-nas-sharepath
      resources: 
        requests:
          storage: 20Gi
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
      namespace: ns2
    spec:
      accessModes:
      - ReadWriteMany 
      storageClassName: alicloud-nas-sharepath
      resources: 
        requests:
          storage: 20Gi

    パラメーター

    説明

    accessModes

    アクセスモード。有効な値:

    • ReadWriteMany (デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。

    • ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。

    • ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。

    storageClassName

    使用する StorageClass の名前。

    storage

    ストレージボリュームの必要な容量。デフォルトでは、この宣言はリソース要求として機能し、Pod が利用できる実際のストレージ容量を制限しません。

    NAS ファイルシステムの容量制限は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。

    ただし、StorageClass の allowVolumeExpansiontrue に設定されている場合、この値は厳密に適用されるハードリミットになります。CSI プラグインは、この設定に基づいて NAS ディレクトリクォータを設定し、PV の利用可能な容量を制限します。

  3. PVC を作成します。

    kubectl create -f pvc.yaml
  4. PV のステータスを確認し、PV が自動的に作成され、PVC にバインドされていることを確認します。

    kubectl get pv

    期待される出力は次のようになります。両方の PV のステータスは Bound であり、CLAIM 列は各 PV が異なる名前空間 (ns1/nas-csi-pvcns2/nas-csi-pvc) の PVC にバインドされていることを示しています。

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    nas-0b448885-6226-4d22-8a5b-d0768c******   20Gi       RWX            Retain           Bound    ns1/nas-csi-pvc       alicloud-nas-sharepath   <unset>                          74s
    nas-bcd21c93-8219-4a11-986b-fd934a******   20Gi       RWX            Retain           Bound    ns2/nas-csi-pvc       alicloud-nas-sharepath   <unset>                          74s

コンソール

  1. 名前空間を作成します。

    • クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、名前空間とクォータ をクリックします。

    • 立ち上げ をクリックし、画面の指示に従って ns1ns2 の名前空間を作成します。

  2. クラスター管理ページの左側のナビゲーションウィンドウで、ストレージ > ボリュームクレーム を選択します。

  3. ns1 名前空間で、ストレージ要求を作成します。

    ボリュームクレーム ページで、名前空間 ドロップダウンリストから ns1 を選択し、画面の指示に従って PVC を作成します。

    パラメーター

    説明

    ボリュームタイプ

    NAS を選択します。

    名前

    PVC の名前。名前は名前空間内で一意である必要があります。

    割り当てモード

    StorageClass の使用を選択します。

    既存のストレージクラス

    ストレージクラスの選択 をクリックし、作成した StorageClass を選択します。

    容量

    ストレージボリュームの必要な容量。デフォルトでは、この宣言はリソース要求として機能し、Pod が利用できる実際のストレージ容量を制限しません。

    NAS ファイルシステムの容量制限は、その仕様によって決まります。詳細については、「汎用 NAS」および「エクストリーム NAS」をご参照ください。

    ただし、StorageClass の allowVolumeExpansiontrue に設定されている場合、この値は厳密に適用されるハードリミットになります。CSI プラグインは、この設定に基づいて NAS ディレクトリクォータを設定し、PV の利用可能な容量を制限します。

    アクセスモード

    アクセスモード。有効な値:

    • ReadWriteMany (デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。

    • ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。

    • ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。

  4. 前の手順に従って、ns2 名前空間にもう 1 つの PVC を作成します。

    作成後、ボリュームクレーム ページに戻ります。ns1ns2 の両方の名前空間で、両方の PVC が自動的に作成された PV にバインドされていることを確認します。

3. アプリケーションの作成と NAS のマウント

PVC が作成された後、バインドされた PV をアプリケーションにマウントできます。このセクションでは、2 つの名前空間のそれぞれにアプリケーションを作成し、対応する PVC をマウントします。この構成により、両方のアプリケーションが StorageClass で定義された NAS サブディレクトリを共有できます。

kubectl

  1. 次の内容で nginx-ns1.yamlnginx-ns2.yaml という名前の 2 つのファイルを作成します。

    両方のアプリケーションの構成はほぼ同じです。それぞれがそれぞれの名前空間の PVC にバインドします。
    • nginx-ns1.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        namespace: ns1   
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
    • nginx-ns2.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        namespace: ns2   
      spec:
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
                - name: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
  2. 2 つの Deployment を作成します。

    kubectl create -f nginx-ns1.yaml -f nginx-ns2.yaml
  3. Pod のステータスを確認します。

    kubectl get pod -A -l app=nginx

    期待される出力:

    NAMESPACE   NAME                         READY   STATUS    RESTARTS   AGE
    ns1         nas-test-b75d5b6bc-*****     1/1     Running   0          2m19s
    ns2         nas-test-b75d5b6bc-*****     1/1     Running   0          2m11s
  4. Pod の詳細な構成を確認して、PVC のマウントを確認します。

    <namespace-name><pod-name> を実際の名前空間と Pod 名に置き換えてください。
    kubectl describe pod -n <namespace-name> <pod-name> | grep "ClaimName:"

    期待される出力では、2 つの Pod はそれぞれ ns1/nas-csi-pvcns2/nas-csi-pvc をマウントしています。

コンソール

  1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Workloads > Deployments をクリックします。

  2. ns1 名前空間で、Deployment を作成し、対応する PVC をマウントします。

    1. 名前空間ドロップダウンリストから 名前空間 を選択し、 イメージによる作成 をクリックします。

    2. 画面の指示に従ってアプリケーションを作成します。

      主要なパラメーターは以下に説明されています。他のパラメーターはデフォルト値のままにします。詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。

      セクション

      パラメーター

      説明

      基本情報

      Replicas:

      Deployment のレプリカ数。

      コンテナー

      画像

      アプリケーションのデプロイに使用されるイメージのアドレス。

      リソースリクエスト

      必要な vCPU およびメモリリソース。

      データボリューム

      PVC を追加 をクリックし、パラメーターを設定します。

      • マウントソース:作成した PVC を選択します。

      • コンテナーパス:NAS ファイルシステムがマウントされるコンテナ内のパス (例:/data) を入力します。

  3. 前の手順に従って、ns2 名前空間にもう 1 つの Deployment を作成し、対応する PVC をマウントします。

    デプロイメント ページに戻ります。`ns1` および `ns2` の名前空間で、各デプロイメントのステータスを確認し、Pod が実行中であり、正しい PVC がマウントされていることを確認します。

結果を検証するには、「共有ストレージと永続ストレージの検証」をご参照ください。

方法 3:filesystem モードでのボリュームのマウント

filesystem モードでは、アプリケーション専用の NAS ファイルシステムとマウントターゲットを動的に作成および管理できます。sharepath モードとは異なり、filesystem モードで作成された各 PV は、個別の NAS ファイルシステムインスタンスに対応します。

filesystem タイプの各 PV は、専用の NAS ファイルシステムと 1 つのマウントターゲットに対応します。
  • デフォルトでは、filesystem タイプの PV を削除しても、対応する NAS ファイルシステムとマウントターゲットは保持されます。PV が削除されたときに NAS ファイルシステムとマウントターゲットを自動的に削除するには、StorageClass に次のパラメーターを追加します。

    • reclaimPolicy: Delete

    • parameters.deleteVolume: "true"

  • ACK 専用クラスターを使用する場合、csi-provisioner に必要な権限を付与します。

    認可プロセス

    filesystem タイプの NAS ボリュームを使用するには、NAS ファイルシステムとマウントターゲットの動的な作成と削除が伴います。したがって、ACK 専用クラスターの csi-provisioner コンポーネントには、対応する権限が必要です。

    以下は、RAM ポリシーに必要な最小限の権限セットです。

    {
        "Action": [
            "nas:DescribeMountTargets",
            "nas:CreateMountTarget",
            "nas:DeleteFileSystem",
            "nas:DeleteMountTarget",
            "nas:CreateFileSystem"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }

    次のいずれかの方法で権限を付与できます。

    • ACK 専用クラスターマスター RAM ロールのカスタムポリシーに、前述の NAS 権限を追加します。詳細については、「カスタムポリシーの内容と説明の変更」をご参照ください。クラスター詳細ページで、[クラスターリソース] タブをクリックし、[マスター RAM ロール] (例:KubernetesMasterRole-xxx) を見つけて、このロールにポリシーをアタッチします。

    • RAM ユーザーを作成し、前述の RAM ポリシーをアタッチして、アクセスキーを生成します。次に、csi-provisioner の env 変数にアクセスキーを設定します。

      env:
      - name: CSI_ENDPOINT
        value: unix://socketDir/csi.sock
      - name: ACCESS_KEY_ID
        value: ""
      - name: ACCESS_KEY_SECRET
        value: ""

1. StorageClass の作成

StorageClass は、動的ボリュームのプロビジョニングテンプレートです。ストレージリソースのソースと動作を定義します。

  1. filesystem モードで StorageClass を定義するために、次の内容で alicloud-nas-fs.yaml という名前のファイルを作成します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-fs
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-beijing
      zoneId: cn-beijing-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    パラメーター

    説明

    mountOptions

    NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、ボリュームは NFSv3 を使用してマウントされます。vers=4.0 のようなオプションで異なるバージョンを指定できます。異なる NAS タイプでサポートされている NFS プロトコルの詳細については、「NFS プロトコル」をご参照ください。

    parameters.volumeAs

    マウントタイプを filesystem に設定します。

    parameters.fileSystemType

    NAS ファイルシステムのタイプ。有効な値:

    • standard (デフォルト):汎用 NAS。

    • extreme:エクストリーム NAS。

    parameters.storageType

    NAS ファイルシステムのストレージクラス。

    • 汎用 NAS の有効な値:

      • Performance (デフォルト):パフォーマンス

      • Capacity:容量

    • エクストリーム NAS の有効な値:

      • standard (デフォルト):標準

      • advance:アドバンスト

    parameters.regionId

    NAS ファイルシステムのリージョン。これはクラスターと同じリージョンである必要があります。

    parameters.zoneId

    NAS ファイルシステムのアベイラビリティゾーン。同じ VPC 内では、NAS はクロスゾーンマウントをサポートします。

    parameters.vpcId

    ファイルシステムのマウントターゲットの VPC。これはクラスターと同じ VPC である必要があります。

    parameters.vSwitchId

    ファイルシステムのマウントターゲットの VSwitch の ID。

    parameters.accessGroupName

    NAS ファイルシステムのマウントターゲットのアクセスグループ。デフォルト値は DEFAULT_VPC_GROUP_NAME です。

    parameters.deleteVolume

    PVC が削除されたときに、PV とそれに対応する NAS ファイルシステムおよびマウントターゲットを削除するかどうかを指定します。NAS は共有ファイルシステムであるため、セキュリティ上の理由から deleteVolumereclaimPolicy の両方を設定する必要があります。

    provisioner

    ドライバー。Alibaba Cloud NAS CSI プラグインを使用する場合、このパラメーターを nasplugin.csi.alibabacloud.com に設定します。

    reclaimPolicy

    PV、対応する NAS ファイルシステム、およびマウントターゲットは、PV のリクレームポリシーが Delete に設定され、deleteVolume パラメーターが true に設定されている場合にのみ、PVC と共に削除されます。

  2. 次のコマンドを実行して StorageClass を作成します。

    kubectl create -f alicloud-nas-fs.yaml

2. PVC の作成

  1. ストレージリソースを要求するために、次の内容で nas-pvc-fs.yaml という名前のファイルを作成します。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-csi-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-fs
      resources:
        requests:
          storage: 20Gi

    パラメーターは次のとおりです。

    パラメーター

    説明

    accessModes

    アクセスモード。有効な値:

    • ReadWriteMany (デフォルト):ボリュームは多くのノードから読み書き可能としてマウントできます。

    • ReadWriteOnce:ボリュームは単一のノードから読み書き可能としてマウントできます。

    • ReadOnlyMany:ボリュームは多くのノードから読み取り専用としてマウントできます。

    storage

    作成する NAS ボリュームの容量。

    エクストリーム NAS の最小容量は 100 GiB です。StorageClass でエクストリーム NAS が定義されている場合、storage の値は 100 GiB 以上である必要があります。

    storageClassName

    この要求がリクエストする StorageClass の名前。

  2. PVC を作成します。

    kubectl create -f nas-pvc-fs.yaml

3. アプリケーションの作成と NAS のマウント

  1. 以下を参照して nas-fs.yaml を作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nas-fs
      labels:
        app: nginx-test
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
              - name: nas-pvc
                mountPath: "/data"
          volumes:
            - name: nas-pvc
              persistentVolumeClaim:
                claimName: nas-csi-pvc-fs
  2. Deployment を作成します。

    kubectl create -f nas-fs.yaml
  3. PVC のステータスを確認します。

    kubectl get pvc nas-csi-pvc-fs

    次の出力は、PVC が PV に正常にバインドされたことを示しています。

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
    nas-csi-pvc-fs   Bound    nas-8338540d-34a1-4796-89cf-be2a7*******   20Gi       RWX            alicloud-nas-fs   <unset>                 13m
  4. PV の詳細で、新しく作成された NAS ファイルシステムの ID を確認します。

    nas-8338540d-34a1-4796-89cf-be2a7******* を実際の PV 名に置き換えてください。
    kubectl describe pv nas-8338540d-34a1-4796-89cf-be2a7******* | grep "fileSystemId"

    出力には、新しく作成された NAS ファイルシステムの ID が表示されます。このファイルシステムは、NAS コンソールファイルシステムリスト ページで表示できます。

共有ストレージと永続ストレージの検証

アプリケーションを正常にデプロイした後、ストレージボリュームが期待どおりに機能することを確認できます。このセクションでは、subpath モードを使用して nas-test-1nas-test-2 を作成する例で検証します。

共有ストレージ

永続ストレージ

共有ストレージを検証するには、1 つの Pod にファイルを作成し、別の Pod で表示します。

  1. Pod をリストして名前を取得します。

    kubectl get pod | grep nas-test

    期待される出力:

    nas-test-1-b75d5b6bc-*****           1/1     Running   0          50s
    nas-test-2-b75d5b6bc-*****           1/1     Running   0          60s
  2. いずれかの Pod にファイルを作成します。

    nas-test-1-b75d5b6bc-***** という名前の Pod を例にとります。

    kubectl exec nas-test-1-b75d5b6bc-***** -- touch /data/test.txt
  3. もう一方の Pod にファイルが存在するかどうかを確認します。

    nas-test-2-b75d5b6bc-***** という名前の Pod を例にとります。

    kubectl exec nas-test-2-b75d5b6bc-***** -- ls /data

    期待される出力:

    test.txt

    出力には新しいファイルが表示され、Pod 間でデータを共有できることが確認されます。

永続ストレージを検証するには、Deployment を再起動し、新しい Pod のファイルシステムにデータがまだ存在するかどうかを確認します。

  1. Deployment を再起動して Pod の再作成をトリガーします。

    kubectl rollout restart deploy nas-test-1
  2. Pod を確認し、新しい Pod のステータスが Running になるまで待ちます。

    kubectl get pod | grep nas-test

    期待される出力:

    nas-test-1-5bb845b795-*****           1/1     Running   0          115m
    nas-test-2-5b6bccb75d-*****           1/1     Running   0          103m
  3. 以前に作成したファイルが新しい Pod に存在するかどうかを確認します。

    nas-test-1-5bb845b795-***** という名前の Pod を例にとります。

    kubectl exec nas-test-1-5bb845b795-***** -- ls /data

    期待される出力:

    test.txt

    出力には以前に書き込まれたファイルが表示され、データが永続的であることが確認されます。

本番環境向け

  • セキュリティとデータ保護

    • Retain リクレームポリシーの使用:StorageClass の reclaimPolicyRetain に設定します。これにより、PVC が誤って削除された場合のデータ損失を防ぎます。

    • アクセス制御のための権限グループの使用:NAS は権限グループを使用してネットワークアクセスを管理します。最小権限の原則に従い、クラスターノードのプライベート IP アドレスまたはその vSwitch CIDR ブロックのみを権限グループに追加します。0.0.0.0/0 のような過度に広範な権限は避けてください。

  • パフォーマンスとコストの最適化

    • 適切な NAS タイプの選択:「ファイルシステムの選択」を参照して、アプリケーションの IOPS とスループット要件を満たす NAS タイプを選択します。

    • マウントオプションの最適化 (mountOptions):ワークロードの特性に基づいて NFS マウントパラメーターを調整します。たとえば、vers=4.0vers=4.1 などのプロトコルバージョンを使用すると、一部のシナリオでパフォーマンスとファイルロック機能が向上する場合があります。大規模なファイル I/O を伴うワークロードでは、異なる rsizewsize の値をテストして、読み取りおよび書き込みスループットを最適化します。

  • 運用と信頼性

    • ヘルスチェックの設定:アプリケーション Pod の liveness プローブを設定して、マウントポイントが正常であることを確認します。マウントポイントが応答しなくなった場合、ACK は自動的に Pod を再起動し、ストレージボリュームの再マウントをトリガーします。

    • モニタリングとアラートの設定:コンテナストレージモニタリングを使用してアラートを設定し、ストレージボリュームの問題やパフォーマンスボトルネックを迅速に検出します。

リソースのリリース

NAS ストレージボリュームが不要になった場合は、予期しない課金を避けるために、次の順序で関連リソースを解放してください。

  1. ワークロードの削除

    • 操作:NAS ストレージボリュームを使用するすべてのワークロード (Deployment や StatefulSet など) を削除します。これにより、アプリケーション Pod がボリュームをマウント、読み取り、書き込みするのを防ぎます。

    • コマンド例:kubectl delete deployment <your-deployment-name>

  2. PVC の削除

    • 操作:ワークロードに関連付けられている PVC を削除します。PVC が削除された後の、バインドされた PV とバックエンド NAS の動作は、対応する StorageClass で定義された reclaimPolicy に依存します。

      • Subpath モード

        • reclaimPolicyRetain の場合:PVC が削除された後、バインドされた PV は Released 状態になります。PV オブジェクトと、バックエンド NAS 上の対応するサブディレクトリおよびデータは保持され、手動で削除する必要があります。

        • reclaimPolicyDelete の場合:PVC が削除された後、バインドされた PV は自動的に削除されます。バックエンド NAS サブディレクトリの処理は、archiveOnDelete パラメーターに依存します。

          • archiveOnDelete"true" の場合:バックエンドデータは削除されず、archived-{pvName}.{timestamp} として名前が変更され、アーカイブされます。

          • archiveOnDelete"false" の場合:PV に対応するバックエンド NAS 上のサブディレクトリとそのすべてのデータが完全に削除されます。注意して進めてください。

          ACK Serverless クラスターでは、権限の制限により、reclaimPolicy: Delete が設定されていても、バックエンドの NAS ディレクトリとデータは削除もアーカイブもされません。PV オブジェクトのみが削除されます。
      • Sharepath モード

        このモードは reclaimPolicyRetain のみをサポートします。PVC が削除された後、バインドされた PV は Released 状態になります。PV オブジェクト、バックエンドの共有ディレクトリ、およびすべてのデータは保持されます。

      • Filesystem モード

        • reclaimPolicyRetain の場合:PVC が削除された後、バインドされた PV は Released 状態になります。PV オブジェクト、動的に作成されたバックエンド NAS ファイルシステム、およびマウントポイントはすべて保持されます。

        • reclaimPolicyDelete の場合:PVC が削除された後、バインドされた PV は自動的に削除されます。バックエンド NAS ファイルシステムの処理は、deleteVolume パラメーターに依存します。

          • deleteVolume"false" の場合:バックエンドの NAS ファイルシステムとマウントポイントは保持され、手動で削除する必要があります。

          • deleteVolume"true" の場合:バックエンドの NAS ファイルシステムとマウントポイントは自動的に削除されます。注意して進めてください。

    • コマンド例:kubectl delete pvc <your-pvc-name>

  3. PV の削除

    • 操作:PV が Available または Released 状態のときに削除できます。この操作は Kubernetes クラスターから PV 定義を削除するだけで、バックエンドの NAS ファイルシステムからデータを削除することはありません。

    • コマンド例:kubectl delete pv <your-pv-name>

  4. バックエンド NAS ファイルシステムの削除 (オプション)

    • subpath および sharepath モード:「ファイルシステムの削除」をご参照ください。この操作は NAS 上のすべてのデータを完全に削除し、データは回復できません。注意して進めてください。この操作を実行する前に、NAS にビジネス上の依存関係がないことを確認する必要があります。

    • filesystem モード:PVC を削除したときにバックエンドの NAS ファイルシステムが自動的に削除されない場合は、「ファイルシステムの削除」を参照して、対応するファイルシステムを見つけて手動で削除してください。

関連ドキュメント