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

File Storage NAS:NFS を使用して動的にプロビジョニングされた NAS ボリュームを使用する

最終更新日:Nov 09, 2025

Network Attached Storage (NAS) ボリュームは、ビッグデータ分析、データ共有、Web アプリケーション、ログの永続化などのシナリオに最適です。静的なストレージリソースを手動で作成および構成する代わりに、永続ボリューム要求 (PVC) と StorageClass を使用して動的にプロビジョニングできます。これにより、システムが自動的に永続ボリューム (PV) を作成できます。動的にプロビジョニングされた NAS ボリュームは、subpath、sharepath、filesystem の 3 つのメソッドを使用してマウントできます。

前提条件

  • CSI プラグインがクラスターにインストールされていること。アップグレードが必要な場合は、「csi-plugin と csi-provisioner のアップグレード」をご参照ください。

    説明

    クラスターで FlexVolume を使用している場合は、FlexVolume は非推奨であるため、CSI にアップグレードしてください。詳細については、「FlexVolume から CSI へのアップグレード」をご参照ください。ストレージコンポーネントのタイプを確認するには、[運用] > [アドオン] に移動し、[ストレージ] タブをクリックします。

  • File Storage NAS サービスが有効化されていること。

    初めて使用する場合は、File Storage NAS 製品ページ の画面の指示に従ってサービスを有効化します。

制限事項

  • SMB プロトコルを使用する NAS ファイルシステムのマウントはサポートされていません。

  • NAS ファイルシステムは、同じ VPC (VPC) 内の Pod にのみマウントできます。VPC をまたいだマウントはサポートされていません。

    説明

    同じ VPC 内では、NAS ボリュームは異なるアベイラビリティーゾーン (AZ) をまたいでマウントできます。

  • 汎用型 NAS と超高速型 NAS ファイルシステムでは、接続性、ファイルシステムの数、プロトコルタイプに関して異なる制約があります。詳細については、「制限」をご参照ください。

使用上の注意

マウントメソッド

StorageClass の volumeAs パラメーターは、PV と NAS ファイルシステムまたはそのサブディレクトリとの関係を定義します。必要に応じてマウントメソッドを選択してください。

マウントメソッド

説明

ユースケース

subpath の使用

サブディレクトリタイプの PV を作成します。各 PV は同じ NAS ファイルシステム内のユニークなサブディレクトリに対応します。

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

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

sharepath の使用

StorageClass で指定された同じ共有ディレクトリを指すすべての PV を作成します。PV ごとに新しいサブディレクトリは作成されません。

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

filesystem の使用 (非推奨)

各 PV に対して NAS ファイルシステムを自動的に作成します。1 つの PV は 1 つの NAS ファイルシステム全体に対応します。

アプリケーションが、ワークロードとともに動的に作成および削除する必要がある専用の NAS ファイルシステムを必要とする場合。

subpath メソッドを使用したマウント

重要

subpath メソッドには、Container Storage Interface (CSI) コンポーネントのバージョン 1.31.4 以降が必要です。アップグレードするには、「csi-plugin と csi-provisioner のアップグレード」をご参照ください。

ステップ 1: NAS ファイルシステムとマウントポイントの情報を取得する

  1. NAS コンソールにログインします。左側のナビゲーションウィンドウで、[ファイルシステム] > [ファイルシステムリスト] を選択します。

  2. NAS ファイルシステムとマウントポイントを作成します。

    ファイルシステムがネットワーク ファイル システム (NFS) プロトコルを使用し、マウントポイントがクラスターノードと同じ VPC にあることを確認してください。

  3. マウントポイントのアドレスを取得します。

    1. ファイルシステム ID をクリックします。左側のナビゲーションウィンドウで、[マウントポイント] をクリックします。

    2. [マウントポイント] セクションで、ステータスが [利用可能] であることを確認し、マウントポイントのアドレスをコピーします。

ステップ 2: StorageClass を作成する

kubectl

  1. 次の YAML マニフェストを変更し、alicloud-nas-subpath.yaml として保存します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-subpath
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: subpath
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
      archiveOnDelete: "true"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true

    パラメーター

    説明

    mountOptions

    NAS ボリュームのマウントオプションで、NFS プロトコルのバージョンを含みます。NFSv3 の使用を推奨します。超高速型 NAS は NFSv3 のみをサポートします。

    parameters

    volumeAs

    マウントメソッド。この例では、値を subpath に設定して、サブディレクトリタイプの PV を作成します。1 つの PV は NAS ファイルシステム内の 1 つのサブディレクトリに対応します。

    server

    マウントポイントのアドレスとマウントする NAS ファイルシステムのサブディレクトリ。フォーマットは <NAS マウントポイントアドレス>:<マウントディレクトリ> です。サブディレクトリを指定しない場合、デフォルトでルートディレクトリ / がマウントされます。

    archiveOnDelete

    reclaimPolicy が Delete に設定されている場合にバックエンドストレージのデータを削除するかどうかを指定します。NAS は共有ストレージサービスであるため、このパラメーターは確認のために追加されています。

    • true (デフォルト): ディレクトリまたはファイルは保持され、archived-{pvName}.{timestamp} に名前が変更されます。

    • false: バックエンドストレージリソースは完全に削除されます。

    説明
    • 高トラフィックのワークロードの場合、このパラメーターを false に設定することは推奨されません。詳細については、「NAS 永続ボリュームに関するよくある質問」をご参照ください。

    • バックエンドストレージのデータを完全に削除するには、kubectl を使用して parameters.archiveOnDelete を false に設定する必要があります。

    provisioner

    ドライバーのタイプ。値は nasplugin.csi.alibabacloud.com に設定する必要があり、Alibaba Cloud NAS CSI プラグインが使用されることを示します。

    reclaimPolicy

    PV のリクレームポリシー。デフォルト値は Delete です。Retain もサポートされています。

    • Delete: この値は archiveOnDelete と一緒に使用する必要があります。

      • archiveOnDelete が true の場合、PVC が削除されても NAS ファイルシステム内のファイルは名前が変更されるだけで削除されません。

      • archiveOnDelete が false の場合、PVC が削除されると NAS ファイルシステム内のファイルが削除されます。

        重要

        これにより、NAS ファイルシステム内の subpath ディレクトリとそのファイルが削除されます。NAS ファイルシステム自体は削除されません。NAS ファイルシステムを削除するには、「ファイルシステムの削除」をご参照ください。

    • Retain: PVC が削除されても、PV と NAS ファイルシステム内のファイルは保持されます。手動で削除する必要があります。

    データのセキュリティが最優先事項である場合は、偶発的なデータ損失を防ぐために、このパラメーターを Retain に設定することをお勧めします。

    allowVolumeExpansion

    汎用型 NAS ファイルシステムでのみサポートされます。true に設定すると、StorageClass によって動的に作成される PV にディレクトリクォータが構成され、利用可能な容量が制限されます。また、PVC を更新してボリューム容量を拡張することもできます。詳細については、「動的にプロビジョニングされた NAS ボリュームのディレクトリクォータを設定する」をご参照ください。

    説明

    NAS クォータは非同期で有効になります。PV が動的に作成された後、ディレクトリクォータがすぐに有効にならない場合があります。短時間で大量のデータを書き込むと、ストレージ使用量が容量制限を超える可能性があります。「ディレクトリクォータ」をご参照ください。

  2. StorageClass を作成します。

    kubectl create -f alicloud-nas-subpath.yaml

コンソール

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

  2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[ボリューム] > [ストレージクラス] を選択します。

  3. [StorageClasses] ページで、[作成] をクリックします。

  4. 表示されるダイアログボックスで、パラメーターを構成し、[OK] をクリックします。

    次の表に構成を示します。

    構成

    説明

    例

    [名前]

    StorageClass の名前。フォーマット要件については UI を参照してください。

    alicloud-nas-subpath

    [PV タイプ]

    [NAS] を選択します。

    NAS

    [マウントポイントの選択]

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

    0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com

    [ボリュームモード]

    ボリュームのアクセスモード。この例では、subpath メソッドを使用するために [サブディレクトリ] を選択します。各 PV に対してマウントパスの下にユニークなサブディレクトリが自動的に作成されます。データは <NAS マウントポイント>:<マウントパス>/<pv-name>/ に保存されます。

    説明

    このモードには CSI コンポーネントのバージョン 1.31.4 以降が必要です。それ以外の場合、システムはデフォルトで共有ディレクトリモードになります。

    サブディレクトリ

    [マウントパス]

    マウントする NAS ファイルシステム上のサブディレクトリ。

    • 設定しない場合、デフォルトでルートディレクトリがマウントされます。

    • 指定したディレクトリが存在しない場合は、自動的に作成されてからマウントされます。

    説明

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

    /k8s

    [リクレームポリシー]

    PV のリクレームポリシー。偶発的なデータ損失を防ぐために [Retain] を推奨します。

    • [Delete]: このパラメーターは archiveOnDelete と一緒に構成する必要があります。コンソールで [Delete] を選択しても、PVC を削除する際に NAS ボリューム上のデータは実際には削除されません。これは、基盤となる archiveOnDelete パラメーターが UI を通じて構成できないためです。archiveOnDelete を構成するには、YAML マニフェストを使用して PV を作成します。YAML テンプレートについては、kubectl タブを参照してください。

    • [Retain]: PVC が削除されても、PV と NAS ボリューム上のデータは削除されません。手動で削除する必要があります。

    Retain

    [マウントオプション]

    NAS ボリュームのマウントオプションで、NFS プロトコルのバージョンを含みます。NFSv3 の使用を推奨します。超高速型 NAS は NFSv3 のみをサポートします。

    デフォルト値を維持

    StorageClass が作成されると、[StorageClasses] リストで表示できます。

ステップ 3: PVC を作成する

kubectl

  1. YAML マニフェストを変更し、nas-pvc.yaml として保存します。

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

    パラメーター

    説明

    accessModes

    ボリュームのアクセスモード。デフォルト値は ReadWriteMany です。ReadWriteOnce と ReadOnlyMany もサポートされています。

    storageClassName

    バインドする StorageClass の名前。

    storage

    リクエストするボリュームの容量。

    重要
    • デフォルトでは、NAS ボリュームの実際の利用可能容量はこの構成によって制限されません。これは NAS ファイルシステムの仕様によって決まります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。

    • 汎用型 NAS ファイルシステムを使用し、StorageClass の allowVolumeExpansion を true に設定した場合、CSI コンポーネントはこの構成に基づいてディレクトリクォータを設定し、NAS ボリュームの利用可能容量を制限します。

  2. PVC を作成します。

    kubectl create -f nas-pvc.yaml
  3. PV が作成され、PVC にバインドされたことを確認します。

    kubectl get pvc

    出力には STATUS が Bound と表示され、CSI コンポーネントが StorageClass に基づいて自動的に PV を作成し、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. [永続ボリューム要求] ページで、[作成] をクリックします。

  3. [PVC の作成] ダイアログボックスで、パラメーターを構成し、[OK] をクリックします。

    構成

    説明

    例

    [PVC タイプ]

    [NAS] を選択します。

    [NAS]

    [名前]

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

    pvc-nas

    割り当てモード

    この例では、[StorageClass の使用] を選択します。

    [StorageClass の使用]

    [既存の StorageClass]

    [StorageClass の選択] をクリックし、前のステップで作成したものを選択します。

    alicloud-nas-subpath

    [容量]

    ボリュームの容量。この設定は、アプリケーションが使用できる最大容量を制限するものではありません。

    重要
    • デフォルトでは、NAS ボリュームの実際の利用可能容量はこの構成によって制限されません。これは NAS ファイルシステムの仕様によって決まります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。

    • 汎用型 NAS ファイルシステムを使用し、StorageClass の allowVolumeExpansion を true に設定した場合、CSI コンポーネントはこの構成に基づいてディレクトリクォータを設定し、NAS ボリュームの利用可能容量を制限します。

    20Gi

    [アクセスモード]

    デフォルト値は [ReadWriteMany] です。[ReadWriteOnce] または [ReadOnlyMany] を選択することもできます。

    [ReadWriteMany]

ステップ 4: アプリケーションを作成し、NAS ボリュームをマウントする

kubectl

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

説明

同じ NAS ファイルシステム上のユニークなサブディレクトリに異なる Pod を割り当てるには、ターゲットディレクトリごとに異なる StorageClass と PVC を作成します。

  1. 次の YAML マニフェストを変更し、ファイルをそれぞれ nginx-1.yaml と nginx-2.yaml として保存します。

    nginx-1.yaml と nginx-2.yaml の次の構成は、metadata.name の値を除いて同じです。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
                mountPath: "/data"           # NAS ボリュームがコンテナーにマウントされるパス
          volumes:
            - name: nas-pvc                 
              persistentVolumeClaim:
                claimName: nas-csi-pvc       # 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
                mountPath: "/data"           # NAS ボリュームがコンテナーにマウントされるパス
          volumes:
            - name: nas-pvc                 
              persistentVolumeClaim:
                claimName: nas-csi-pvc       # PVC をバインドするために使用
  2. 2 つの Deployment を作成します。

    kubectl create -f nginx-1.yaml -f nginx-2.yaml
  3. Pod が実行中であることを確認します。

    kubectl get pod -l app=nginx

    出力は、同じ NAS ファイルシステムの同じサブディレクトリが異なるアプリケーションにマウントされていることを示します。

    NAME                         READY   STATUS    RESTARTS   AGE
    nas-test-1-b75d5b6bc-vqwq9   1/1     Running   0          51s
    nas-test-2-b75d5b6bc-8k9vx   1/1     Running   0          44s

コンソール

次の手順を繰り返して、同じ PVC をマウントする 2 つの Deployment を作成し、NAS ファイルシステム内の単一のサブディレクトリを共有できるようにします。

  1. クラスター詳細ページの左側のナビゲーションペインで、[ワークロード] > [デプロイメント] に移動します。

  2. [デプロイメント] ページで、[イメージから作成] をクリックします。

  3. パラメーターを構成してアプリケーションを作成します。

    次の表に主要なパラメーターを示します。他のパラメーターはデフォルト設定のままにできます。詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。

    構成ステップ

    パラメーター

    説明

    例

    [基本情報]

    [名前]

    Deployment のカスタム名を入力します。名前はコンソールに表示されるフォーマット要件を満たす必要があります。

    deployment-nas-1

    [レプリカ]

    Pod レプリカの数。

    1

    [コンテナー]

    [イメージ名]

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

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    [必須リソース]

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

    0.25 vCPU, 512 MiB

    [ボリューム]

    [PVC の追加] をクリックし、パラメーターを構成します。

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

    • [コンテナーパス]: NAS ファイルシステムをマウントするコンテナーパスを指定します。

    • マウントソース: pvc-nas

    • コンテナーパス: /data

    nas1.png

  4. アプリケーションのデプロイステータスを表示します。

    1. [デプロイメント] ページで、アプリケーションの名前をクリックします。

    2. [Pod] タブで、Pod が [実行中] 状態であることを確認します。

sharepath メソッドを使用したマウント

ステップ 1: NAS ファイルシステムとマウントポイントの情報を取得する

  1. NAS コンソールにログインします。左側のナビゲーションウィンドウで、[ファイルシステム] > [ファイルシステムリスト] を選択します。

  2. NAS ファイルシステムとマウントポイントを作成します。

    ファイルシステムがネットワーク ファイル システム (NFS) プロトコルを使用し、マウントポイントがクラスターノードと同じ VPC にあることを確認してください。

  3. マウントポイントのアドレスを取得します。

    1. ファイルシステム ID をクリックします。左側のナビゲーションウィンドウで、[マウントポイント] をクリックします。

    2. [マウントポイント] セクションで、ステータスが [利用可能] であることを確認し、マウントポイントのアドレスをコピーします。

ステップ 2: StorageClass を作成する

kubectl

  1. alicloud-nas-sharepath.yaml という名前のファイルを次の YAML マニフェストで作成し、必要に応じてパラメーターを変更します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-sharepath
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: sharepath
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/sharepath"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    パラメーター

    説明

    mountOptions

    NAS ボリュームのマウントオプションで、NFS プロトコルのバージョンを含みます。NFSv3 の使用を推奨します。超高速型 NAS は NFSv3 のみをサポートします。

    parameters

    volumeAs

    マウントメソッド。この例では、値を sharepath に設定します。これは、PV が作成されるときに実際のディレクトリは作成されず、代わりに StorageClass で指定されたパスが使用されることを示します。つまり、各 PV は同じ NAS ディレクトリにマッピングされます。

    server

    マウントポイントのアドレスとマウントする NAS ファイルシステムのサブディレクトリ。フォーマットは <NAS マウントポイントアドレス>:<マウントディレクトリ> です。

    • サブディレクトリを指定しない場合、デフォルトでルートディレクトリ / がマウントされます。

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

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

    provisioner

    ドライバーのタイプ。値は nasplugin.csi.alibabacloud.com に設定する必要があり、Alibaba Cloud NAS CSI プラグインが使用されることを示します。

    reclaimPolicy

    PV のリクレームポリシー。sharepath メソッドを使用する場合、このパラメーターを Retain に設定する必要があります。

  2. StorageClass を作成します。

    kubectl create -f alicloud-nas-sharepath.yaml

コンソール

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

  2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[ボリューム] > [ストレージクラス] を選択します。

  3. [StorageClasses] ページで、[作成] をクリックします。

  4. 表示されるダイアログボックスで、パラメーターを構成し、[OK] をクリックします。

    次の表に主要な構成を示します。

    構成

    説明

    例

    [名前]

    StorageClass の名前。フォーマット要件については UI を参照してください。

    alicloud-nas-sharepath

    [PV タイプ]

    [NAS] を選択します。

    [NAS]

    [マウントポイントの選択]

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

    0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com

    [ボリュームモード]

    ボリュームのアクセスモード。この例では、sharepath メソッドを使用するために [共有ディレクトリ] を選択します。PV が作成されるとき、実際のディレクトリは作成されません。代わりに、StorageClass で指定されたパスが使用されます。これは、各 PV が同じ NAS ディレクトリにマッピングされることを意味します。このメソッドは、名前空間をまたいでディレクトリを共有する必要があるシナリオに最適です。

    [共有ディレクトリ]

    [マウントパス]

    マウントする NAS ファイルシステム上のサブディレクトリ。

    • 設定しない場合、デフォルトでルートディレクトリがマウントされます。

    • 指定したディレクトリが存在しない場合は、自動的に作成されてからマウントされます。

    説明

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

    /sharepath

    [リクレームポリシー]

    sharepath メソッドを使用する場合、このパラメーターを Retain に設定する必要があります。

    Retain

    [マウントオプション]

    NAS ボリュームのマウントオプションで、NFS プロトコルのバージョンを含みます。NFSv3 の使用を推奨します。超高速型 NAS は NFSv3 のみをサポートします。

    デフォルト値を維持

    StorageClass が作成されると、[ストレージクラス] リストで表示できます。

ステップ 3: PVC を作成する

次の例は、2 つの異なる名前空間に PVC を作成する方法を示しています。

kubectl

NAS ボリュームを異なる名前空間の Pod にマウントするには、まず 2 つの名前空間を作成します。

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

    kubectl create ns ns1
    kubectl create ns ns2
  2. 次の YAML マニフェストを変更し、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

    リクエストするボリュームの容量。

    重要
    • デフォルトでは、NAS ボリュームの実際の利用可能容量はこの構成によって制限されません。これは NAS ファイルシステムの仕様によって決まります。詳細については、「汎用型 NAS」および「超高速型 NAS」をご参照ください。

    • 汎用型 NAS ファイルシステムを使用し、StorageClass の allowVolumeExpansion を true に設定した場合、CSI コンポーネントはこの構成に基づいてディレクトリクォータを設定し、NAS ボリュームの利用可能容量を制限します。

  3. PVC を作成します。

    kubectl create -f pvc.yaml
  4. PV が作成され、PVC にバインドされたことを確認します。

    kubectl get pv

    出力は、CSI コンポーネントが StorageClass に基づいて自動的に 2 つの PV を作成し、それらを異なる名前空間の 2 つの 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 名前空間に PVC を作成します。

    1. [永続ボリューム要求] ページで、[名前空間] を [ns1] に設定し、[作成] をクリックします。

    2. [PVC の作成] ダイアログボックスで、パラメーターを構成し、[OK] をクリックします。

      構成

      説明

      例

      [PVC タイプ]

      [NAS] を選択します。

      [NAS]

      [名前]

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

      pvc-nas

      [割り当てモード]

      この例では、[StorageClass の使用] を選択します。

      [StorageClass の使用]

      [既存の StorageClass]

      [StorageClass の選択] をクリックし、作成したものを選択します。

      alicloud-nas-sharepath

      [容量]

      ボリュームの容量。

      20Gi

      [アクセスモード]

      デフォルト値は [ReadWriteMany] です。[ReadWriteOnce] または [ReadOnlyMany] を選択することもできます。

      [ReadWriteMany]

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

  5. [永続ボリューム要求] ページに戻ります。ns1 と ns2 の名前空間で、2 つの PVC が自動的に作成された PV にバインドされていることを確認します。

ステップ 4: アプリケーションを作成し、NAS ボリュームをマウントする

2 つの異なる名前空間にアプリケーションを作成し、対応する名前空間の PVC をマウントします。アプリケーションは StorageClass で定義された NAS ディレクトリを共有します。

kubectl

  1. 次の YAML コンテンツをそれぞれ nginx-ns1.yaml と nginx-ns2.yaml として保存し、必要に応じて変更します。

    nginx-ns1.yaml と nginx-ns2.yaml の次の構成は、metadata.namespace の値を除いて同じです。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

    出力は、同じ NAS ファイルシステムの同じサブディレクトリが異なる名前空間の Pod にマウントされていることを示します。

    NAMESPACE   NAME                         READY   STATUS    RESTARTS   AGE
    ns1         nas-test-b75d5b6bc-ljvfd     1/1     Running   0          2m19s
    ns2         nas-test-b75d5b6bc-666hn     1/1     Running   0          2m11s

コンソール

  1. クラスター詳細ページの左側のナビゲーションペインで、[ワークロード] > [デプロイメント] に移動します。

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

    1. [名前空間] を [ns1] に設定し、[イメージから作成] をクリックします。

    2. パラメーターを構成してアプリケーションを作成します。

      次の表に主要なパラメーターを示します。他のパラメーターはデフォルト設定のままにできます。詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。

      構成ステップ

      パラメーター

      説明

      例

      [基本情報]

      [名前]

      Deployment のカスタム名を入力します。名前はコンソールに表示されるフォーマット要件を満たす必要があります。

      nginx

      [レプリカ]

      Pod レプリカの数。

      2

      [コンテナー]

      [イメージ名]

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

      anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

      [必須リソース]

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

      0.25 vCPU, 512 MiB

      [ボリューム]

      [PVC の追加] をクリックし、パラメーターを構成します。

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

      • [コンテナーパス]: NAS ファイルシステムをマウントするコンテナーパスを指定します。

      • マウントソース: pvc-nas

      • コンテナーパス: /data

      nas1.png

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

  4. [デプロイメント] ページに戻ります。ns1 と ns2 の名前空間で、2 つの Deployment のステータスを表示します。Pod が実行中であり、対応する PVC がマウントされていることを確認します。

filesystem メソッドを使用したマウント

アプリケーションが NAS ファイルシステムとマウントポイントを動的に作成および削除する必要がある場合は、filesystem メソッドを使用して NAS ボリュームをマウントできます。filesystem タイプの NAS ボリュームを使用する Pod は、1 つのファイルシステムと 1 つのマウントポイントしか作成できません。

重要

デフォルトでは、filesystem タイプの動的にプロビジョニングされた NAS ボリュームが削除されると、ファイルシステムとマウントポイントは保持されます。PV リソースが解放されると同時に NAS ファイルシステムとマウントポイントを解放するには、StorageClass で reclaimPolicy を Delete に、deleteVolume を true に設定する必要があります。

ステップ 1: RAM 権限の付与 (ACK 専用クラスター のみ必須)

filesystem タイプの NAS ボリュームには、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 を生成して、AccessKey を csi-provisioner の env 変数に追加します。

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

ステップ 2: StorageClass を作成する

  1. 次の YAML マニフェストを変更し、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

    NAS ボリュームのマウントオプションで、NFS プロトコルのバージョンを含みます。NFSv3 の使用を推奨します。超高速型 NAS は NFSv3 のみをサポートします。

    parameters

    volumeAs

    マウントメソッド。この例では、値を filesystem に設定します。これにより、NAS ファイルシステムが自動的に作成されます。1 つの PV は 1 つの NAS ファイルシステムに対応します。

    fileSystemType

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

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

    • extreme: 超高速型 NAS。

    storageType

    NAS ファイルシステムのストレージタイプ。

    • 汎用型 NAS の場合、有効な値は次のとおりです。

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

      • Capacity: 容量

    • 超高速型 NAS の場合、有効な値は次のとおりです。

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

      • advance: アドバンス

    regionId

    NAS ファイルシステムが存在するリージョン。リージョンはクラスターのリージョンと同じでなければなりません。

    zoneId

    NAS ファイルシステムが存在するゾーン。

    説明

    同じ VPC 内では、ゾーンをまたいで NAS ファイルシステムをマウントできます。

    vpcId

    NAS ファイルシステムのマウントポイントが存在する VPC。VPC はクラスターの VPC と同じでなければなりません。

    vSwitchId

    NAS ファイルシステムのマウントポイントが存在する vSwitch の ID。

    accessGroupName

    マウントポイントの権限グループ。デフォルト値は DEFAULT_VPC_GROUP_NAME です。

    deleteVolume

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

    provisioner

    ドライバーのタイプ。値は nasplugin.csi.alibabacloud.com である必要があり、Alibaba Cloud NAS CSI コンポーネントが使用されることを示します。

    reclaimPolicy

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

  2. StorageClass を作成します。

    kubectl create -f alicloud-nas-fs.yaml

ステップ 3: PVC を作成する

  1. 次の YAML コンテンツを変更し、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
  2. PVC を作成します。

    kubectl create -f nas-pvc-fs.yaml

ステップ 4: アプリケーションを作成し、NAS ボリュームをマウントする

  1. 次の YAML コンテンツを変更し、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. デプロイメントを作成します。

    kubectl create -f nas-fs.yaml

NAS の共有ストレージと永続ストレージの機能を検証する

前の例で作成した複数の Pod は、同じ NAS ファイルシステムをマウントします。次の手順を実行して、機能を検証できます。

  • 1 つの Pod にファイルを作成し、別の Pod でそのファイルを確認して、共有ストレージ機能を検証します。

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

  1. Pod 情報を表示します。

    kubectl get pod | grep nas-test

    サンプル結果:

    nas-test-*****a   1/1     Running   0          40s
    nas-test-*****b   1/1     Running   0          40s
  2. 共有ストレージを検証します。

    1. Pod にファイルを作成します。

      この例では、nas-test-*****a Pod を使用します。

      kubectl exec nas-test-*****a -- touch /data/test.txt
    2. 他の Pod からファイルを表示します。

      この例では、nas-test-*****b Pod を使用します。

      kubectl exec nas-test-*****b -- ls /data

      期待される出力は、新しく作成されたファイル test.txt が共有されていることを示します。

      test.txt
  3. 永続ストレージを検証します。

    1. Deployment を再作成します。

      kubectl rollout restart deploy nas-test
    2. Pod が再作成されるまで待ちます。

      kubectl get pod | grep nas-test

      サンプル結果:

      nas-test-*****c   1/1     Running   0          67s
      nas-test-*****d   1/1     Running   0          49s
    3. 再作成された Pod にログインし、ファイルがファイルシステムにまだ存在するかどうかを確認します。

      この例では、nas-test-*****c Pod を使用します。

      kubectl exec nas-test-*****c -- ls /data

      次の出力は、ファイルがまだ NAS ファイルシステムに存在し、再作成された Pod のマウントディレクトリからアクセスできることを示しています。test.txt

      test.txt

よくある質問

NAS ボリュームのマウントまたは使用中に問題が発生した場合は、以下をご参照ください。

リファレンス