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

Container Service for Kubernetes:静的 NAS ボリュームの使用

最終更新日:Sep 16, 2026

NAS ボリュームは、データの永続性によって Pod が再作成された際のデータ損失を防ぎ、データ共有によって複数の Pod からの同時読み書きアクセスを可能にします。Container Service for Kubernetes (ACK) では、既存の NAS ファイルシステムを静的な PersistentVolume としてワークロードにマウントすることができます。

  • 静的ボリューム:NAS ファイルシステムなどの既存のストレージリソースを表す PV を事前に作成する必要があります。アプリケーションはストレージを要求するために PVC を作成し、その後、システムはこの PVC を適切な事前プロビジョニング済みの PV にバインドします。これは、既存のストレージリソースを管理する一般的な方式です。ただし、バインドされた PVC はデフォルトでオンライン拡張をサポートしません。

    自動ボリューム拡張を使用するには、「動的 NAS ボリュームの使用」または「CNFS を使用した NAS ボリュームの自動拡張」をご参照ください。
  • 動的ボリューム: PV を事前に作成する必要はありません。アプリケーションが PVC を作成すると、システムは PVC で指定された StorageClass に基づき、オンデマンドで新しいボリュームと対応する PV を自動的にプロビジョニングします。このアプローチは柔軟性が高く、ボリューム拡張をサポートします。

ワークフロー

この図は、ACK クラスターで静的 NAS ストレージボリュームをマウントするワークフローを示しています。

image
  1. PV の作成:マウントポイント (ルートディレクトリまたは特定のサブディレクトリ)、容量、アクセスモード、その他のプロパティを宣言して、既存の NAS ファイルシステムをクラスターに登録します。

  2. PVC の作成:アプリケーションは PVC を使用して、登録済みのストレージリソースを要求します。その後、Kubernetes は PVC を一致する PV に自動的にバインドします。

  3. アプリケーションの作成:バインドされた PVC を、コンテナ内の永続ディレクトリとしてアプリケーション Pod にマウントします。

前提条件

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

    CSI コンポーネントはデフォルトでインストールされています。インストールされていることを確認してください。インストール状況は、アドオン管理 ページで確認できます。CSI コンポーネントは、最新バージョンへアップグレードすることを推奨します。
  • NAS ファイルシステムが次の条件を満たしていること。満たしていない場合は、ファイルシステムを作成するか、動的にプロビジョニングされた NAS ボリュームを使用してください。

    NAS には、マウント接続性、ファイルシステム数、プロトコルタイプに関する制限があります。
    • [プロトコルタイプ]:NFS である必要があります。

    • [VPC]:NAS ファイルシステムはクラスターと同じ VPC に存在する必要があります。NAS はアベイラビリティーゾーンをまたぐマウントをサポートしますが、VPC をまたぐマウントはサポートしません。

    • [マウントポイント]:クラスターと同じ VPC にマウントターゲットを追加してください。ステータスは [利用可能] である必要があります。詳細については、マウントターゲットの管理をご参照ください。マウントターゲットアドレスを記録してください。

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

使用上の注意

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

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

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

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

ステップ 1:PersistentVolume の作成

PersistentVolume (PV) を作成して、既存の NAS ファイルシステムをクラスターで利用できるようにします。

kubectl

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

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV の名前。クラスター内で一意である必要があります。
      name: pv-nas  
      # PV のラベル。PVC との照合に使用されます。
      labels:  
        alicloud-pvname: pv-nas
    spec:
      capacity:
        # この容量は照合のみに使用されます。実際の容量は NAS ファイルシステムによって決まります。
        storage: 5 Gi  
      accessModes:
        - ReadWriteMany
      # PV のリクレームポリシー。
      persistentVolumeReclaimPolicy: Retain
      csi:
        # ドライバー。NAS ボリュームを使用する場合、この値は固定です。
        driver: nasplugin.csi.alibabacloud.com  
        # metadata.name と同じである必要があります。
        volumeHandle: pv-nas   
        volumeAttributes:
          server: "0c47****-mpk25.cn-shenzhen.nas.aliyuncs.com"  # この値を NAS マウントターゲットのアドレスに置き換えてください。
          # マウントする NAS サブディレクトリ。サブディレクトリが存在しない場合は、自動的に作成されます。
          path: "/csi"
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3

    パラメーター

    説明

    storage

    PV の容量です。この値は PersistentVolumeClaim (PVC) との照合にのみ使用され、実際に利用可能な容量を制限するものではありません。アプリケーションで利用可能なストレージ容量は、NAS ファイルシステムの合計容量によって制限されます。

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

    accessModes

    アクセスモードです。有効な値は次のとおりです。

    • ReadWriteMany (デフォルト):複数のノードから読み取り/書き込みとしてマウントできます。

    • ReadWriteOnce:単一のノードから読み取り/書き込みとしてマウントできます。

    • ReadOnlyMany:複数のノードから読み取り専用としてマウントできます。

    persistentVolumeReclaimPolicy

    PV のリクレームポリシーです。このポリシーは、バインドされている PersistentVolumeClaim (PVC) が削除された際の、PV およびバックエンド NAS データの動作を定義します。

    • Retain (推奨):PVC が削除された後、PV は Released ステータスになります。バックエンドの NAS データは保持され、手動で削除する必要があります。

    • Delete:関連する PVC が削除されると、PV も削除されます。このポリシーには archiveOnDelete が必要です。ただし、静的 PV は archiveOnDelete をサポートしていません。そのため、このポリシーを Delete に設定しても、PVC を削除しても PV や NAS ファイルシステム上のファイルは削除されません。

      archiveOnDelete を設定する方法については、「動的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。

    driver

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

    volumeHandle

    バックエンドストレージシステムにおける、ボリュームの一意な識別子です。これは PV 名 (metadata.name) と同じである必要があります。複数の PV を使用する場合、この値は PV ごとに一意である必要があります。

    server

    NAS マウントターゲットのアドレスです。

    マウントターゲットアドレスを確認する方法については、「マウントターゲットの管理」をご参照ください。

    path

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

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

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

    mountOptions

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

  2. PV を作成します。

    kubectl create -f pv-nas.yaml
  3. PV のステータスとプロパティを確認します。

    kubectl get pv

    期待される出力:

    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM    STORAGECLASS     VOLUMEATTRIBUTESCLASS   REASON   AGE
    pv-nas   5Gi        RWX            Retain           Available                             <unset>                          25s

    出力は、容量 5 Gi の PV が正常に作成され、ステータスが Available であることを示しています。これは、まだ PersistentVolumeClaim (PVC) にバインドされていないことを意味します。

コンソール

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ボリューム] > [ボリューム] を選択します。

  3. 永続ボリューム ページで、作成する をクリックします。表示されたダイアログボックスで、パラメーターを設定してから 作成する をクリックします。

    パラメーター

    説明

    [ストレージタイプ]

    NAS を選択します。

    [ボリューム名:]

    PV の名前です。クラスター内で一意である必要があります。

    [容量]

    PV の容量です。この値は PersistentVolumeClaim (PVC) との照合にのみ使用され、実際に利用可能な容量を制限するものではありません。アプリケーションで利用可能なストレージ容量は、NAS ファイルシステムの合計容量によって制限されます。

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

    [アクセスモード]

    アクセスモードを設定します。有効な値は次のとおりです。

    • ReadWriteMany:複数のノードから読み取り/書き込みとしてマウントできます。

    • ReadWriteOnce:単一のノードから読み取り/書き込みとしてマウントできます。

    [CNFS を使用するかどうか]

    Container Network File System (CNFS) を使用して、自動運用管理、キャッシュアクセラレーション、パフォーマンスモニタリングの機能を利用するかどうかを指定します。

    CNFS を使用して既存の NAS ファイルシステムを管理する方法については、「CNFS 管理の NAS ファイルシステムの作成 (推奨)」をご参照ください。

    [マウントポイントドメイン名:]

    このパラメーターは、CNFS が無効の場合にのみ表示されます。

    NAS マウントターゲットのアドレスです。

    アドレスを取得する方法については、「マウントターゲットの管理」をご参照ください。
    • [アタッチポイントの選択]:以前に追加したマウントターゲットのアドレスを選択します。

    • [カスタム]:カスタムドメイン名をマウントアドレスとして使用します。カスタムドメイン名がターゲットの NAS マウントターゲットに解決されることを確認してください。

    [詳細オプション (選択してください)]

    [マウントのパス]

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

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

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

    [再利用ポリシー]

    • Retain (デフォルト):PVC が削除されても、PV と NAS ファイルは削除されません。手動で削除する必要があります。

    • Delete:関連する PVC が削除されると、PV も削除されます。このポリシーには archiveOnDelete が必要です。ただし、静的 PV は archiveOnDelete をサポートしていません。そのため、このポリシーを Delete に設定しても、PVC を削除しても PV や NAS ファイルシステム上のファイルは削除されません。

      archiveOnDelete を設定する方法については、「動的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。

    [マウントオプション]

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

    [タグ]

    PV に適用するラベルです。

    PV が作成されると、永続ボリューム ページで確認できます。

Step 2: Create a PVC

Create a Persistent Volume Claim (PVC) to request persistent storage for your application.

kubectl

  1. Create a file named pvc-nas.yaml to bind to the previously created PV.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas  # The PVC name, which must be unique within the namespace.
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas   # Matches the PV created earlier by its label.

    Parameter

    Description

    accessModes

    The access mode. Valid values:

    • ReadWriteMany (default): The volume can be mounted as read-write by many nodes.

    • ReadWriteOnce: The volume can be mounted as read-write by a single node.

    • ReadOnlyMany: The volume can be mounted as read-only by many nodes.

    storage

    This value is used to find a matching PV and does not limit the actual storage capacity.

    The maximum capacity of a NAS file system is determined by its specifications. For more information, see General-purpose NAS and Extreme NAS.

    matchLabels

    Specifies the label used to select a PV for binding.

  2. Create the PVC.

    kubectl create -f pvc-nas.yaml
  3. Check the status of the PVC.

    kubectl get pvc

    Expected output:

    NAME       STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-nas    Bound    pv-nas    5Gi        RWX                           <unset>                 5s

    The output shows that the pvc-nas PVC is Bound to the pv-nas PV and is ready for use by an application.

Console

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

  2. On the [永続ボリュームクレーム] page, click [作成する] and configure the parameters as described in the following table.

    Parameter

    Description

    [ボリュームタイプ]

    Select [NAS].

    [名前]

    The PVC name, which must be unique within the namespace.

    [割り当てモード]

    Select Existing Persistent Volume.

    This topic uses the PV created in the previous step. If you have not created a PV, you can set the [割り当てモード] to [ボリュームの作成].

    [既存ボリューム]

    Select the previously created PV.

    [容量]

    This value is used to find a matching PV and does not limit the actual storage capacity.

    The maximum capacity of a NAS file system is determined by its specifications. For more information, see General-purpose NAS and Extreme NAS.

    [アクセスモード]

    The access mode. Valid values:

    • ReadWriteMany (default): The volume can be mounted as read-write by many nodes.

    • ReadWriteOnce: The volume can be mounted as read-write by a single node.

    • ReadOnlyMany: The volume can be mounted as read-only by many nodes.

ステップ 3:アプリケーションの作成と NAS のマウント

PVC を作成した後、バインドされた PV をアプリケーションにマウントできます。

kubectl

  1. 次の内容で deploy.yaml という名前のファイルを作成します。このマニフェストは、以前に作成した PVC を参照します。

    この設定により、NAS の共有ストレージ機能を検証できます。

    YAML

    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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-nas
                # NAS ボリュームのマウントパス。
                mountPath: "/data"  
          volumes:
            # 使用する PVC を指定します。
            - name: pvc-nas  
              persistentVolumeClaim:
                claimName: pvc-nas
  2. Deployment を作成します。

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

    kubectl get pod -l app=nginx

    予想される出力:

    NAME                  READY   STATUS    RESTARTS   AGE
    nas-test-****-***a    1/1     Running   0          32s
    nas-test-****-***b    1/1     Running   0          32s

コンソール

  1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

  2. デプロイメント ページで、イメージによる作成 をクリックし、アプリケーションパラメーターを設定します。

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

    カテゴリ

    パラメーター

    説明

    [基本情報]

    [名前]

    Deployment の名前。

    [Replicas:]

    Deployment のレプリカ数。

    この設定により、NAS の共有ストレージ機能を検証できます。

    [コンテナー]

    [イメージ名]

    アプリケーションイメージのアドレス。

    [リソースリクエスト]

    要求される vCPU とメモリリソース。

    [ボリューム]

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

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

    • [コンテナパス]:NAS ファイルシステムをマウントするコンテナ内のパス (例: /data)。

    デプロイが完了したら、展開 ページに移動し、アプリケーション名をクリックします。ポッド タブで、Pod が [実行中] 状態であることを確認します。

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

アプリケーションをデプロイした後、ボリュームが期待どおりに動作することを検証します。

共有ストレージ

永続ストレージ

共有ストレージを検証するには、一方の Pod でファイルを作成し、もう一方の 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. いずれか一方の Pod にファイルを作成します。

    例えば、nas-test-*****a という名前の Pod を使用します:

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

    例えば、nas-test-*****b という名前の Pod を使用します:

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

    予想される出力:

    test.txt

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

永続ストレージを検証するには、Deployment を再起動し、新しい Pod でデータが永続化されているかを確認します。

  1. Deployment を再起動して、アプリケーション Pod を再作成します。

    kubectl rollout restart deploy nas-test
  2. ポッドのステータスを確認し、新しいポッドが起動して Running 状態になるまで待ちます。

    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

    予想される出力:

    test.txt

    出力にファイルが表示され、Pod の再起動後もデータが永続化されていることを確認できます。

本番稼働準備

  • セキュリティとアクセス管理

    • 権限グループを使用したアクセスコントロール: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 を再起動し、ストレージボリュームの再マウントをトリガーします。

    • 監視とアラートの設定:コンテナストレージの監視を使用してアラートを設定し、ストレージボリュームの問題やパフォーマンスのボトルネックを速やかに検出できるようにしてください。

    • Retain リクレームポリシーの使用:本番環境のデータの場合、PV の persistentVolumeReclaimPolicyRetain に設定してください。これにより、対応する PVC が削除された際に、バックエンド NAS ファイルシステム上のデータが誤って失われることを防ぎます。

リソースの解放

想定外の課金を避けるため、NAS ボリュームが不要になった場合は、次の順序でリソースを解放します。

  1. ワークロードの削除

    • NAS ボリュームを使用している Deployment や StatefulSet などのアプリケーションをすべて削除します。この操作により、Pod からボリュームがアンマウントされ、すべての読み取りおよび書き込みアクセスが停止します。

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

  2. PVC の削除

    • アプリケーションに関連付けられている PVC を削除します。PVC が削除されると、バインドされた PV がどうなるかは、その persistentVolumeReclaimPolicy によって決まります。

    • リクレームポリシー:

      • Retain (推奨): PVC を削除すると、バインドされていた PV は Released 状態になります。PV オブジェクトとバックエンド NAS ファイルシステム上のデータは保持されるため、手動で削除する必要があります。

      • Delete: PVC を削除すると、対応する PV オブジェクトも削除されます。次の点に注意してください。

        • PV が NAS ファイルシステムのルートディレクトリを指している場合、誤削除を防ぐため、ファイルシステム上のデータは保持されます。

        • 静的 PV の volumeHandlepath のサフィックスである場合 (例: volumeHandleapp で、 path/exports/app の場合)、PVC を削除すると、バックエンド NAS ファイルシステム上のサブディレクトリが自動的に削除されます。この機能は慎重に使用してください。

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

  3. PV の削除

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

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

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

    • ファイルシステムの削除をご参照ください。この操作により、NAS ファイルシステム上のすべてのデータが完全に削除され、元に戻すことはできません。続行する前に、ファイルシステムに依存するワークロードがないことを確認してください。

参考資料