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

:動的にプロビジョニングされた NAS ボリュームのマウント

最終更新日:May 07, 2025

高いディスク I/O スループットとデータ共有が必要なシナリオでは、ファイルストレージ NAS (NAS) を永続ストレージボリュームとして使用できます。このトピックでは、動的にプロビジョニングされた NAS ボリュームをマウントする方法について説明します。また、動的にプロビジョニングされた NAS ボリュームを使用してデータを永続化できるかどうか、および動的にプロビジョニングされた NAS ボリューム内のデータをポッド間で共有できるかどうかを確認する方法についても説明します。

背景情報

NAS は、共有アクセス、スケーラビリティ、高信頼性、高パフォーマンスを特徴とする分散ファイルシステムサービスです。 NAS は、データ共有と高 IOPS が必要なシナリオに適しています。詳細については、「ストレージの概要」をご参照ください。

説明

Alibaba Cloud Container Service for Kubernetes (ACK) は、動的にプロビジョニングされた NAS ボリュームと静的にプロビジョニングされた NAS ボリュームをサポートしています。このトピックでは、動的にプロビジョニングされた NAS ボリュームをマウントする方法について説明します。静的にプロビジョニングされた NAS ボリュームをマウントする方法の詳細については、「静的にプロビジョニングされた NAS ボリュームをマウントする」をご参照ください。

前提条件

managed-csiprovisioner コンポーネントが ACK クラスタにインストールされていること。

説明

ACK コンソールの ACK クラスタ管理ページに移動します。クラスタ管理ページの左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。[ストレージ] タブで、managed-csiprovisioner がインストールされているかどうかを確認できます。

制限事項

  • サーバーメッセージブロック (SMB) プロトコルを使用する NAS ファイルシステムはマウントできません。

  • NAS ファイルシステムを複数のポッドにマウントする場合、ポッドは同じ VPC にデプロイする必要があります。異なる VPC のポッドに NAS ファイルシステムをマウントすることはできません。

    説明

    同じ VPC 内の異なるゾーンにまたがって NAS ボリュームをマウントできます。

  • NAS ファイルシステムのマウントには、NFSv3 プロトコルのみ使用できます。

使用上の注意

  • NAS は共有ストレージサービスです。 1 つの NAS ファイルシステムを複数のポッドにマウントできます。NAS ファイルシステムが複数のポッドにマウントされている場合、ファイルシステム内のデータはポッドによって共有されます。この場合、NAS ファイルシステム内のデータが複数のポッドによって変更された場合、アプリケーションはポッド間でデータを同期できる必要があります。

  • NAS ファイルシステムをアプリケーションにマウントする場合、アプリケーションの YAML ファイルに securityContext.fsgroup パラメータを追加しないでください。追加すると、NAS ファイルシステムのマウントに失敗する可能性があります。

    説明

    NAS ファイルシステムの / ディレクトリにアクセスするための権限を付与することはできません。ディレクトリが属するユーザーアカウントとユーザーグループは変更できません。

  • NAS ファイルシステムをマウントした後、NAS ファイルシステムのマウントポイントを削除しないでください。削除すると、オペレーティングシステムのハングの問題が発生する可能性があります。

動的にプロビジョニングされた NAS ボリュームをマウントする

手順 1:StorageClass を作成する

  1. ACK クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」および「Cloud Shell で kubectl を使用して ACK クラスタを管理する」をご参照ください。

  2. nas-sc.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-shanghai
      zoneId: cn-shanghai-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    次の表にパラメータを示します。

    重要

    種類とストレージ仕様が異なる NAS ファイルシステムは、異なるリージョンとゾーンをサポートしています。ビジネスのストレージ要件、ACK クラスタのリージョン、ACK クラスタ内のポッドで使用される VPC と vSwitch に基づいて、作成する NAS ファイルシステムとマウントポイントのリージョン、ゾーン、VPC、vSwitch を指定します。詳細については、以下のトピックをご参照ください。

    • 各タイプの NAS ファイルシステムのストレージ仕様、パフォーマンス、課金、およびサポートされているリージョンとゾーンの詳細については、「汎用型 NAS ファイルシステム」および「超高速型 NAS ファイルシステム」をご参照ください。

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

    • kubectl get cm -n kube-system acs-profile -o yaml コマンドを実行して acs-profile の YAML ファイルを表示し、vpcId パラメータと vSwitchIds パラメータの値に基づいてポッドの VPC ID と vSwitch ID を取得します。

    パラメータ

    説明

    volumeAs

    filesystem のみがサポートされています。これは、NAS ファイルシステムが自動的に作成されることを示します。各 NAS ボリュームは、NAS ファイルシステムに対応しています。

    fileSystemType

    NAS ファイルシステムのタイプ。

    storageType

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

    • 汎用型 NAS ファイルシステムの場合、次の値がサポートされています。

      • Performance (デフォルト)

      • Capacity

    • 超高速型 NAS ファイルシステムの場合、次の値がサポートされています。

      • standard (デフォルト)

      • advanced

    regionId

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

    zoneId

    NAS ファイルシステムが属するゾーンの ID。ACK クラスタ内のポッドで使用される vSwitch に基づいてゾーンを選択します。

    説明

    同じ VPC 内の異なるゾーンにまたがって NAS ボリュームをマウントできます。最適なパフォーマンスを得るには、同じゾーンを選択することをお勧めします。

    vpcIdvSwitchId

    NAS ファイルシステムのマウントポイントが属する VPC と vSwitch の ID。ACK クラスタ内のポッドで使用される VPC と vSwitch の ID に設定します。

    accessGroupName

    NAS ファイルシステムのマウントポイントが属する権限グループ。デフォルト値: DEFAULT_VPC_GROUP_NAME

    provisioner

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

    reclaimPolicy

    永続ボリューム (PV) の再利用ポリシー。Retain のみがサポートされています。これは、PV が削除されたときに、関連する NAS ファイルシステムとマウントポイントが保持されることを示します。

  3. StorageClass を作成します。

    kubectl create -f nas-sc.yaml
  4. StorageClass を表示します。

    kubectl get sc

    予期される出力:

    NAME                             PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-nas-fs                  nasplugin.csi.alibabacloud.com    Retain          Immediate              false                  13m
    ......

手順 2:PVC を作成する

  1. 次の内容を nas-pvc-fs.yaml という名前の YAML ファイルとして保存します。

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

    次の表にパラメータを示します。

    パラメータ

    説明

    accessModes

    アクセスモード。

    storage

    ポッドに割り当てられるストレージ容量。これは、作成する NAS ボリュームの容量を指します。

    説明

    超高速型 NAS ファイルシステムの最小容量制限は 100 GiB です。StorageClass で定義されている NAS ファイルシステムタイプが超高速型 NAS ファイルシステムの場合、storage パラメータの値は 100 GiB 以上である必要があります。そうでない場合、対応する PV を作成できません。

    storageClassName

    関連付ける StorageClass の名前。

  2. 永続ボリューム要求 (PVC) を作成します。

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

    kubectl get pvc

    次の例が返されます。PVC は、自動的に作成される PV に関連付けられています。[NAS コンソール] にログインして、NAS ファイルシステムを表示できます。

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS  AGE
    nas-pvc-fs   Bound    nas-04a730ba-010d-4fb1-9043-476d8c38****   20Gi       RWX            alicloud-nas-fs   <unset>                14s

手順 3:アプリケーションを作成し、NAS ボリュームをマウントする

  1. nas-test-fs.yaml という名前のファイルを作成し、次の内容をファイルに追加します。

    次の YAML テンプレートは、2 つのポッドを含むデプロイメントの作成方法の例を示しています。2 つのポッドは、nas-pvc-fs という名前の PVC を使用してストレージリソースを申請します。2 つのポッドは、/data パスにマウントされます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-test
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                mountPath: /data
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: nas-pvc-fs
  2. デプロイメントを作成し、NAS ボリュームをマウントします。

    kubectl create -f nas-test-fs.yaml
  3. デプロイメントによってプロビジョニングされたポッドがデプロイされているかどうかを確認します。

    kubectl get pod | grep nas-test

    次の出力は、2 つのポッドが作成されたことを示しています。

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  4. マウントパス内のファイルを表示します。

    次のコマンドを実行して、マウントパス内のファイルを表示します。NAS ファイルシステムのマウントディレクトリ内のデータが返されるはずです。デフォルトでは、データは返されません。

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

NAS ファイルシステムに基づいてデータの共有と永続化が有効になっているかどうかを確認する

前の例で作成したデプロイメントは 2 つのポッドをプロビジョニングし、NAS ファイルシステムがポッドにマウントされます。次の手順を実行して、データの共有と永続化が有効になっているかどうかをテストします。

  • 一方のポッドでファイルを作成し、もう一方のポッドからファイルにアクセスします。アクセスに成功した場合、データ共有は有効になっています。

  • デプロイメントを再作成します。再作成されたポッドから NAS ボリュームにアクセスして、元のデータが NAS ファイルシステムにまだ存在するかどうかを確認します。データがまだ存在する場合、データの永続化は有効になっています。

  1. ポッド情報を表示します。

    kubectl get pod | grep nas-test

    予期される出力:

    nas-test-****-***a   1/1     Running   0          40s
    nas-test-****-***b   1/1     Running   0          40s
  2. データ共有が有効になっているかどうかを確認します。

    1. ポッドにファイルを作成します。

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

      kubectl exec nas-test-****-***a -- touch /data/test.txt
    2. もう一方のポッドから作成したファイルにアクセスします。

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

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

      次の出力は、nas-test-****-***a ポッドで作成した test.txt ファイルに nas-test-****-***b ポッドからアクセスできることを示しています。

      test.txt
  3. データの永続化が有効になっているかどうかを確認します。

    1. デプロイメントを再作成します。

      kubectl rollout restart deploy nas-test
    2. ポッドが再作成されたら、再作成されたポッドを確認します。

      kubectl get pod | grep nas-test

      予期される出力:

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

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

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

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

      test.txt