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

Container Service for Kubernetes:動的プロビジョニングによる NAS ボリュームのマウント

最終更新日:Aug 29, 2026

動的プロビジョニングは、File Storage NAS (NAS) ファイルシステム内にサブディレクトリを自動的に作成し、それを永続ボリューム (PV) にマッピングします。Container Service for Kubernetes (ACK) クラスター内のアプリケーションは、永続ボリューム要求 (PVC) を通じてこれらの PV を使用できます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

alicloud-nas-controller が実行されていることを確認するには:

kubectl get pods -n kube-system | grep alicloud-nas-controller

想定される出力:

alicloud-nas-controller-xxxxxxxxx-xxxxx   1/1     Running   0          1d
説明

アプリケーションテンプレートで securityContext.fsgroup が設定されている場合、ボリュームがマウントされた後、kubelet は chmod または chown を実行します。これにより、マウント時間が増加します。詳細については、「NAS ボリュームのマウントに時間がかかるのはなぜですか」をご参照ください。

説明

このトピックでは、FlexVolume プラグインを介して NAS ボリュームを動的にプロビジョニングするため、FlexVolume プラグインがすでにインストールされている既存のクラスターにのみ適用されます。 クラスターを作成すると、1.12 より後のすべての Kubernetes バージョンでは ボリュームプラグイン パラメーターがデフォルトで CSI に設定され、サンドボックス化されたコンテナランタイムを実行するクラスターは常に CSI を使用します。 コンソールから永続ボリュームを作成する場合も、CSI ストレージドライバーが使用されます。 お使いのクラスターで CSI を使用している場合は、このトピックの手順に従わずに、nas-csi-plugin を使用して NAS ボリュームをプロビジョニングしてください。

ステップ 1: StorageClass の作成

  1. 次の YAML コンテンツを nas-sc.yaml として保存します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      server: "23a9649583-i****.cn-shenzhen.nas.aliyuncs.com:/nasroot1/"
      driver: flexvolume
    provisioner: alicloud/nas
    reclaimPolicy: Delete
  2. StorageClass を作成します。

    kubectl apply -f nas-sc.yaml
  3. StorageClass を確認します。

    kubectl get sc alicloud-nas

    想定される出力:

    NAME            PROVISIONER    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    alicloud-nas    alicloud/nas   Delete          Immediate           false                  10s

StorageClass パラメータ

パラメータ

説明

mountOptions

永続ボリューム (PV) に適用される NAS ボリュームのマウントオプション。

server

PV をプロビジョニングするためのマウントターゲットリストです。形式: nfsurl1:/path1,nfsurl2:/path2。複数のサーバーは、ラウンドロビン順で PV を分配します。Extreme NAS ファイルシステムの場合、パスは /share で始まる必要があります。

driver

ボリュームドライバータイプ。デフォルト: nfs。有効な値: flexvolumenfs

reclaimPolicy

PV リクレームポリシー。 Delete は、マップされたサブディレクトリの名前を自動的に変更します (たとえば、path-namearchived-path-name になります)。 サブディレクトリをアーカイブする代わりに完全に削除するには、archiveOnDeletefalse に設定します。

有効な値: DeleteRetain (データ損失を防ぐため推奨)。

ステップ 2: NAS ボリュームを使用する StatefulSet のデプロイ

  1. 次の YAML コンテンツを nas-statefulset.yaml として保存します。これにより、動的にプロビジョニングされた NAS ボリュームを使用するヘッドレス Service と StatefulSet が作成されます。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 5
      volumeClaimTemplates:
      - metadata:
          name: html
        spec:
          accessModes:
            - ReadWriteOnce
          storageClassName: alicloud-nas
          resources:
            requests:
              storage: 2Gi
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:alpine
            volumeMounts:
            - mountPath: "/data"
              name: html
  2. Service と StatefulSet をデプロイします。

    kubectl apply -f nas-statefulset.yaml
  3. 永続ボリューム要求 (PVC) がバインドされていることを確認します。

    kubectl get pvc

    想定される出力:

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    html-web-0   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   2Gi        RWO            alicloud-nas   2m
    html-web-1   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   2Gi        RWO            alicloud-nas   2m
    html-web-2   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   2Gi        RWO            alicloud-nas   1m
    html-web-3   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   2Gi        RWO            alicloud-nas   1m
    html-web-4   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   2Gi        RWO            alicloud-nas   1m
  4. すべての Pod が実行されていることを確認します。

    kubectl get pods -l app=nginx

    想定される出力:

    NAME    READY   STATUS    RESTARTS   AGE
    web-0   1/1     Running   0          3m
    web-1   1/1     Running   0          2m
    web-2   1/1     Running   0          2m
    web-3   1/1     Running   0          1m
    web-4   1/1     Running   0          1m

データの永続性の確認

StatefulSet が実行された後、Pod の再起動後もデータが永続化されることを確認します。

  1. Pod にテストファイルを書き込みます。

    kubectl exec web-0 -- sh -c "echo 'Hello from NAS' > /data/test.txt"
  2. ファイルを読み取ります。

    kubectl exec web-0 -- cat /data/test.txt

    想定される出力:

    Hello from NAS
  3. Pod を削除し、Kubernetes が再作成するのを待ちます。

    kubectl delete pod web-0
    kubectl wait --for=condition=Ready pod/web-0 --timeout=120s
  4. Pod の再作成後、再度ファイルを読み取ります。

    kubectl exec web-0 -- cat /data/test.txt

    出力に引き続き Hello from NAS と表示される場合、NAS ボリュームはデータを正しく永続化しています。

リソースのクリーンアップ

以下の順序でリソースを削除します:

  1. StatefulSet を削除します。

    kubectl delete statefulset web
  2. Service を削除します。

    kubectl delete service nginx
  3. 永続ボリューム要求 (PVC) を削除します。

    kubectl delete pvc -l app=nginx
  4. StorageClass を削除します。

    kubectl delete sc alicloud-nas
説明

reclaimPolicyDelete に設定されている場合、PVC が削除されると、PV は自動的に削除され、対応する NAS サブディレクトリは名前が変更されてアーカイブされます。サブディレクトリをアーカイブする代わりに完全に削除するには、StorageClass で archiveOnDeletefalse に設定します。reclaimPolicyRetain に設定されている場合、PVC を削除した後、PV と NAS サブディレクトリを手動で削除する必要があります。