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

Container Service for Kubernetes:Use NAS dynamically provisioned volumes

最終更新日:Mar 25, 2026

NAS の動的にプロビジョニングされたボリュームを使用すると、システムは要求に応じてワークロード用のストレージスペースを自動的に作成および割り当てます。永続ボリューム (PV) を事前に作成する必要はありません。このアプローチは、複数の Pod による同時読み書きアクセスなどのデータ永続化と共有アクセスの両方の要件を満たし、Web アプリケーション、ログの保持、および同様のユースケースのストレージ管理を簡素化します。

仕組み

永続ボリューム要求 (PVC) を作成すると、システムは PVC で指定された StorageClass を使用して、新しい PV とそれに対応するストレージボリュームを自動的に作成します。このモデルはより柔軟で、自動ボリューム拡張をサポートします。

マウントモード

マウントモードは、StorageClass の volumeAs パラメーターを使用して設定できます。このパラメーターは、各 PV が NAS ファイルシステムにどのようにマッピングされるかを定義します。

マウントモード

説明

ユースケース

subpath

サブディレクトリモード。各 PV は、1 つの NAS ファイルシステム内の専用サブディレクトリにマッピングされます。これにより、データの隔離に役立ちます。

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

  • 複数の Pod が同じ NAS ファイルシステムの異なるサブディレクトリをマウントして、隔離を実現します。

sharepath

共有ディレクトリモード。すべての PV は、StorageClass で定義された同じ NAS ディレクトリにマッピングされます。この StorageClass を参照するすべての PVC は、NAS ファイルシステム上の同じ共有ディレクトリを指します。

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

filesystem (非推奨)

ファイルシステムモード。各 PV は、新しく作成された独立した NAS ファイルシステムインスタンスにマッピングされます。

パフォーマンスやセキュリティのために厳密な隔離が必要です。システムは、アプリケーション用に独立した NAS ファイルシステムとマウントポイントを動的に作成および削除します。このオプションはコストが高くなります。

一般的なワークフロー

NAS の動的にプロビジョニングされたボリュームをマウントする主な手順は次のとおりです。

image
  1. StorageClass の作成:ストレージテンプレートを定義し、NAS のマウントポイントを宣言します。また、ビジネス要件に応じて、subpath や sharepath などのマウントモードを選択します。

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

  3. アプリケーションへのボリュームマウント:バインド済みの PVC を、コンテナー内の永続ディレクトリとしてアプリケーション Pod にマウントします。

事前準備

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

    CSI コンポーネントはデフォルトでインストールされています。手動でアンインストールされていないことをご確認ください。インストール状況はアドオン管理 ページで確認できます。CSI コンポーネントをアップグレードして最新バージョンにします。
  • subpath または sharepath モードを使用する場合、まず以下の条件を満たす NAS ファイルシステムを作成する必要があります。そうでない場合は、新しいファイルシステムを作成する必要があります。詳細については、「ファイルシステムの作成」をご参照ください。

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

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

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

    • (オプション) 暗号化タイプ:ストレージボリューム上のデータを暗号化するには、NAS ファイルシステムを作成する際に暗号化タイプを設定できます。

注意事項

方法 1:subpath を使用したマウント

このモードでは、各 PVC は NAS ファイルシステム内に専用のサブディレクトリを自動的に作成し、それを 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 のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、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 の動的にプロビジョニングされたボリュームを使用すると、CSI コントローラーのタスクキューが満杯になり、新しい 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 コンソールにログインします。ACK コンソール。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [作成] をクリックします。クラスター内の 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 のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、vers=4.0 を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。

    StorageClass が作成された後、[ストレージクラス] リストで確認できます。

2. PVC の作成

PVC は、アプリケーションのストレージ要求を表します。StorageClass の動的プロビジョニングメカニズムをトリガーして、一致する 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 ディレクトリクォータを設定します。

  2. PVC を作成します。

    kubectl create -f nas-pvc.yaml
  3. PV を表示します。

    kubectl get pv

    期待される出力:PV は自動的に作成され、StorageClass に基づいて 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 を選択します。

    合計

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

    NAS の最大容量は仕様によって異なります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。

    ただし、StorageClass で allowVolumeExpansiontrue に設定されている場合、この値はハードリミットになります。CSI ドライバーは、この制限を強制するために NAS ディレクトリクォータを設定します。

    アクセスモード

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

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

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

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

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

PVC を作成した後、バインドされた PV をアプリケーションにマウントします。このセクションでは、同じ PVC を参照して同じ NAS サブディレクトリを共有する 2 つの Deployment を作成する方法について説明します。

kubectl

2 つの Deployment を作成し、同じ PVC をマウントして、同じ NAS ファイルシステムの同じサブディレクトリを共有します。

同じ NAS ファイルシステムの異なるサブディレクトリを複数の Pod にマウントするには、サブディレクトリごとに個別の StorageClass と対応する PVC を作成し、それぞれの 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 の詳細設定を確認し、PVC がマウントされていることを確認します。

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

    期待される出力では、両方の Pod が同じ PVC をマウントし、同じ NAS サブディレクトリを共有しています。

コンソール

以下の手順を繰り返して 2 つの Deployment を作成し、同じ PVC をマウントして同じ NAS サブディレクトリを共有します。

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

  2. [イメージから作成] をクリックします。指示に従ってアプリケーションを設定し、作成します。

    以下の表に、主なパラメーターを説明します。他のパラメーターはデフォルト値のままにします。詳細については、「Deployment の作成」をご参照ください。

    設定項目

    パラメーター

    説明

    アプリケーションの基本

    レプリカ

    Deployment のレプリカ数。

    コンテナー設定

    イメージ名

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

    必須リソース

    必要な vCPU とメモリリソース。

    ボリューム

    [クラウドストレージ要求の追加] をクリックし、構成を完了します。

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

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

    デプロイメントが完了すると、[ステートレス] ページでアプリケーション名をクリックし、[コンテナーグループ] タブで Pod が正常に Running していることを確認できます。Pod のステータスは Running である必要があります。

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

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

このモードでは、この StorageClass から作成されたすべての PVC は、StorageClass で定義された同じ NAS ディレクトリを使用します。個々の PV 用に新しいディレクトリは作成されません。

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 のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、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. [作成]」をクリックします。クラスター内の StorageClass に一意の名前を入力し、「[ボリュームタイプ]」を NAS に設定します。プロンプトに従って StorageClass の作成を完了します。

    設定項目

    説明

    マウントポイントの選択

    NAS ファイルシステムのマウントポイントのアドレス。

    ボリュームモード

    ボリューム アクセス モード。この例では、[共有ディレクトリ] (sharepath) を選択します。

    マウントパス

    マウントする NAS ファイルシステムのサブディレクトリ。このパラメーターを設定しない場合、デフォルトでルートディレクトリがマウントされます。

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

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

    リサイクルポリシー

    sharepath の場合、これを Retain に設定します。

    マウントオプション

    NFS プロトコルのバージョンを含む NAS のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、vers=4.0 を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。

2. PVC の作成

PVC は、アプリケーションのストレージ要求を表します。StorageClass の動的プロビジョニングメカニズムをトリガーして、一致する PV を自動的に作成およびバインドします。

名前空間をまたいでデータを共有できるようにするため、このセクションでは、2 つの異なる名前空間に同じ名前の PVC を作成する方法について説明します。PVC は名前を共有しますが、別々の名前空間に存在するため、独立したリソースです。同じ StorageClass を使用して、同じ NAS ファイルシステム上に独立した PV を取得します。

kubectl

  1. `ns1` と `ns2` の名前空間を作成します。

    kubectl create ns ns1
    kubectl create ns ns2
  2. `ns1` と `ns2` の名前空間に同じ名前の 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 ディレクトリクォータを設定します。

  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. 名前空間を作成します。

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

    • [作成] をクリックします。プロンプトに従って、`ns1` および `ns2` の名前空間を作成します。

  2. 詳細ページの左側ナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。

  3. `ns1` 名前空間に永続ボリューム要求を作成します。

    [永続ボリューム要求] ページで、[名前空間] を ns1 に設定し、プロンプトに従って PVC を作成します。

    設定項目

    説明

    永続ボリューム要求タイプ

    NAS を選択します。

    名前

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

    割り当てモード

    [ストレージクラスを使用して動的に作成] を選択します。

    既存のストレージクラス

    [ストレージクラスの選択] をクリックし、以前に作成したストレージクラスを選択します。

    合計

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

    NAS の最大容量は仕様によって異なります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。

    ただし、StorageClass で allowVolumeExpansiontrue に設定されている場合、この値はハードリミットになります。CSI ドライバーは、この制限を強制するために NAS ディレクトリクォータを設定します。

    アクセスモード

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

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

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

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

  4. 前の手順を繰り返して、`ns2` 名前空間に PVC を作成します。

    PVC が作成されたら、[永続ボリューム要求] ページに戻り、`ns1` および `ns2` 名前空間内の 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. [名前空間] を [ns1] に設定し、[イメージから作成] をクリックします。

    2. プロンプトに従ってアプリケーションの作成を完了します。

      以下の表に、主なパラメーターを説明します。他のパラメーターはデフォルト値のままにします。詳細については、「Deployment の作成」をご参照ください。

      設定項目

      パラメーター

      説明

      アプリケーションの基本

      レプリカ

      Deployment のレプリカ数。

      コンテナー設定

      イメージ名

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

      必須リソース

      必要な vCPU とメモリリソース。

      ボリューム

      [クラウドストレージ要求の追加] をクリックし、構成を完了します。

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

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

  3. 前の手順を繰り返して、`ns2` 名前空間に Deployment を作成し、対応する PVC をマウントします。

    [ステートレス]」ページに戻って、名前空間 ns1 および ns2 内の 2 つのデプロイメントのステータスを確認し、対応する PVC がマウントされた状態で Pod が正常に実行されていることを確認できます。

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

方法 3:filesystem を使用したマウント

filesystem モードは、アプリケーション専用の NAS ファイルシステムとマウントポイントを動的に作成および管理する必要があるシナリオに適しています。sharepath モードとは異なり、filesystem モードで作成された各 PV は、独立した NAS ファイルシステムインスタンスにマッピングされます。

各 filesystem モードの PV は、1 つの独立した NAS ファイルシステムと 1 つのマウントポイントにマッピングされます。
  • デフォルトでは、filesystem モードの PV を削除しても、NAS ファイルシステムとマウントポイントは保持されます。PV と一緒にそれらを削除するには、StorageClass で次のように設定します。

    • reclaimPolicy: Delete

    • parameters.deleteVolume: "true"

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

    権限付与の手順を表示するには、ここを展開してください

    NAS ファイルシステムとマウントポイントの動的な作成と削除には、ACK 専用クラスターで csi-provisioner が特定の権限を持つ必要があります。

    以下は、最低限必要な RAM ポリシーです。

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

    これらの権限は、次のいずれかの方法で付与できます。

    • ACK 専用クラスターの Master RAM ロールにアタッチされているカスタムポリシーを編集し、前述の NAS 関連の権限を追加します。詳細については、「カスタムポリシーの内容と説明の変更」をご参照ください。自定义授权

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

      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 のマウントオプション。デフォルトでは、NAS は NFS v3 を使用してマウントします。別のバージョンを指定するには、vers=4.0 を使用します。NAS タイプごとにサポートされている NFS バージョンについては、「NFS プロトコル」をご参照ください。

    parameters.volumeAs

    マウントモード。filesystem に設定します。

    parameters.fileSystemType

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

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

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

    parameters.storageType

    NAS ファイルシステムのストレージ仕様。

    • 汎用型 NAS の場合、有効な値:

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

      • Capacity:容量型

    • Extreme NAS の有効な値:

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

      • advance:アドバンスド。

    parameters.regionId

    NAS ファイルシステムが存在するリージョン。クラスターのリージョンと一致する必要があります。

    parameters.zoneId

    NAS ファイルシステムが存在するゾーン。同じ VPC 内では、NAS はゾーン間のマウントをサポートします。

    parameters.vpcId

    NAS ファイルシステムのマウントポイントが存在する VPC。クラスターの VPC と一致する必要があります。

    parameters.vSwitchId

    NAS ファイルシステムのマウントポイントが存在する 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) のリサイクルポリシー。PVC を削除するときに、PV、および対応する NAS ファイルシステムとマウントポイントが削除されるのは、リサイクルポリシーが Delete に設定され、deleteVolumetrue の場合のみです。

  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-1 および nas-test-2 の Deployment を使用して検証します。

共有ストレージ

永続ストレージ

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. 1 つの Pod でファイルを作成します。

    Pod nas-test-1-b75d5b6bc-***** を使用した例:

    kubectl exec nas-test-1-b75d5b6bc-***** -- touch /data/test.txt
  3. 他の Pod でファイルを確認します。

    Pod nas-test-2-b75d5b6bc-***** を使用した例:

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

    期待される出力:

    test.txt

    ファイルが表示され、Pod 間のデータ共有が確認されます。

Deployment を再起動し、新しい Pod でファイルを確認して永続ストレージを検証します。

  1. アプリケーション Pod を削除して再起動をトリガーします。

    kubectl rollout restart deploy nas-test-1
  2. 新しい 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 で以前に作成したファイルを確認します。

    Pod nas-test-1-5bb845b795-***** を使用した例:

    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.0 または vers=4.1 プロトコルバージョンを使用すると、一部のシナリオでパフォーマンスとファイルロック機能が向上する場合があります。大規模なファイルの読み書きには、rsize および wsize パラメーターを調整して読み書きパフォーマンスを最適化することをテストできます。

  • O&M と信頼性

    • ヘルスチェックの設定:アプリケーション Pod に liveness プローブを設定して、マウントポイントが正常かどうかを確認します。マウントに失敗した場合、ACK は自動的に Pod を再起動してボリュームの再マウントをトリガーできます。

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

リソースのクリーンアップに関するガイドライン

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

  1. ワークロードの削除

    • 操作:Deployment や StatefulSet など、NAS ストレージボリュームを使用するすべてのアプリケーションを削除します。これにより、Pod がボリュームをマウントしたり、ボリュームからデータを読み書きしたりすることが停止します。

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

  2. PVC の削除

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

      • subpath モード

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

        • reclaimPolicy: Delete: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 オブジェクト、バックエンドの NAS 共有ディレクトリ、およびそのデータは保持されます。

      • filesystem モード

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

        • reclaimPolicy: Delete:PVC を削除すると、バインドされた PV は自動的に削除されます。バックエンドの NAS ファイルシステムがどのように処理されるかは、deleteVolume パラメーターに依存します。

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

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

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

  3. PV の削除

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

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

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

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

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

参考文献