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

Container Service for Kubernetes:CPFS for Lingjun 動的ボリュームの使用

最終更新日:Jun 24, 2026

動的ボリュームを使用すると、PersistentVolume を手動で管理することなく、オンデマンドで CPFS for Lingjun ストレージをプロビジョニングできます。複数のアプリケーションが並列に読み書きできるため、コード、設定ファイル、中間計算結果を共有する必要がある AI トレーニングやビッグデータ分析のワークロードに適しています。

制限事項

これらの制約に違反すると、マウントの失敗や、クラスターが回復不能な状態に陥る原因となります。

  • VSC マウントには同じ hpn-zone が必要:Pod のノードは、CPFS for Lingjun ファイルシステムと同じ hpn-zone に存在する必要があります。

  • ノードの初期化:Lingjun ノードは、初期化時に CPFS for Lingjun ファイルシステムに関連付ける必要があります。これを省略すると、CSI マウントが失敗します。

  • Pod あたり 1 つのファイルシステム:1 つの Pod に、同じ CPFS for Lingjun ファイルシステムから複数のボリュームをマウントしないでください (例:同じ bmcpfsId を持つ複数の PersistentVolume)。ネイティブプロトコルは、異なるサブディレクトリであっても、同じファイルシステムを 1 つの Pod 内で複数回マウントすることをサポートしていません。

  • ノードをオフラインにする前のドレイン:障害が発生した Lingjun ノードをオフラインにする前に、すべての Pod をドレインしてください。これを省略すると、回復不能な Pod リソースと、クラスターメタデータの不整合が残ります。

前提条件

以下の要件を満たしていることを確認してください。

  • クラスターバージョン 1.26 以降 (アップグレードガイド)。

  • Alibaba Cloud Linux 3 を実行しているノード。

  • 以下のストレージアドオンは、最小バージョンである必要があります。[アドオン] ページでインストールまたはアップグレードしてください。

    コンポーネント 最小バージョン
    CSI アドオン (csi-plugin および csi-provisioner) v1.33.1
    cnfs-nas-daemon アドオン 0.1.2
    bmcpfs-csi アドオン (ACK マネージドコントロールプレーン上の bmcpfs-csi-controller と、クラスターノード上に DaemonSet としてデプロイされる bmcpfs-csi-node) 1.35.1

cnfs-nas-daemon のリソース設定

cnfs-nas-daemon は Elastic File Client (EFC) プロセスを管理し、ストレージパフォーマンスに直接影響します。そのリソースは [アドオン] ページで設定します:

  • CPU:帯域幅 1 Gb/s あたり 0.5 コア、さらにメタデータ管理用に 1 コア。例:100 Gb/s NIC → 100 × 0.5 + 1 = 51 コア。

  • メモリ:ノードの総メモリの 15%。CPFS for Lingjun は FUSE を使用するため、データキャッシュとファイルメタデータの両方がメモリを消費します。

実際のワークロードに基づいてリソース制限を調整してください。

重要

cnfs-nas-daemon は OnDelete 更新ストラテジーを使用します。[アドオン] ページで設定を変更した後は、オフピーク時に各ノードで cnfs-nas-daemon ポッドを手動で削除して変更を適用してください。

  • ホットアップグレード非対応ノード:ハードウェア割り込みが発生します。アプリケーション Pod は失敗するため、手動で削除する必要があります。その後、自動的に再起動して復旧します。

  • ホットアップグレード対応ノード:Pod は自動的に復旧します。ホットアップグレードには、カーネル 5.10.134-18 以降、bmcpfs-csi-controller および bmcpfs-csi-node 1.35.1 以降、cnfs-nas-daemon 0.1.9-compatible.1 以降が必要です。

ステップ 1:CPFS ファイルシステムの作成

  1. CPFS for Lingjun ファイルシステムを作成し、ファイルシステム ID を記録します。

  2. (オプション) Lingjun 以外のノードにマウントする場合は、クラスターノードと同じ VPC 内に VPC マウントターゲットを作成します。マウントターゲットのドメイン名 (形式: cpfs-*-vpc-*.<Region>.cpfs.aliyuncs.com) を記録します。

    すべての Pod が Lingjun ノード上で実行される場合、VSC (Virtual Storage Controller) マウントがデフォルトで適用されるため、この手順はスキップできます。

続行する前に、CPFS for Lingjun の制限事項を確認してください。

ステップ 2:StorageClass の作成

StorageClass は、ファイルシステム ID や再利用ポリシーなどのプロビジョニングパラメーターを定義します。

  1. sc.yaml を作成します。

    パラメーター 必須 説明
    bmcpfsId はい CPFS for Lingjun ファイルシステム ID。形式: bmcpfs-xxxxxxxxx または cpfs-xxxxxxxxx
    path いいえ ファイルシステム内のサブディレクトリ。ボリュームは {path}/{volumeName}/ 配下に作成されます。デフォルトは /{volumeName}/ です。
    allowVolumeExpansion いいえ 予約済みパラメーター。現在のバージョンでは動的拡張をサポートしていません。
    reclaimPolicy いいえ Delete (デフォルト):PersistentVolumeClaim が削除されると、バックエンドのファイルセットを削除します。Retain:ファイルセットを保持するため、手動でのクリーンアップが必要です。本番環境では Retain の使用を推奨します。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-bmcpfs-test
    provisioner: bmcpfsplugin.csi.alibabacloud.com
    parameters:
      # 必須: CPFS for Lingjun ファイルシステム ID (形式: bmcpfs-xxxxxxxxx または cpfs-xxxxxxxxx)
      bmcpfsId: bmcpfs-29000z8xz3lf5nj*****
      # オプション: ファイルシステム内のサブディレクトリ。ボリュームは {path}/{volumeName}/ 配下に作成されます
      # path: "/shared"
    # 予約済みパラメーター — 現在のバージョンでは動的拡張をサポートしていません
    allowVolumeExpansion: true
    # Delete (デフォルト): PersistentVolumeClaim が削除されると自動的にファイルセットを削除します
    # Retain (本番環境推奨): ファイルセットを保持します。手動でのクリーンアップが必要です
    reclaimPolicy: Delete
  2. StorageClass を適用します。

    kubectl apply -f sc.yaml

    期待される出力:

    storageclass.storage.k8s.io/alicloud-bmcpfs-test created

ステップ 3:PersistentVolumeClaim の作成

PersistentVolumeClaim は StorageClass を参照して、動的にプロビジョニングされたストレージをリクエストします。

  1. pvc.yaml を作成します。

    パラメーター 説明
    accessModes ReadWriteMany のみ。複数の Pod からの同時アクセスを許可します。
    storage リクエストするストレージ容量。Gi や Ti などの単位をサポートします。
    volumeMode Filesystem のみがサポートされています。
    storageClassName StorageClass 名。動的ボリューム作成をトリガーします。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: bmcpfs-vsc
      namespace: default
    spec:
      accessModes:
        - ReadWriteMany  # 複数の Pod 間での同時読み書きをサポートします
      resources:
        requests:
          storage: 10Ti  # 大容量ストレージ (Ti レベル) をサポートします
      volumeMode: Filesystem  # Filesystem のみがサポートされています
      storageClassName: alicloud-bmcpfs-test  # ステップ 2 で作成した StorageClass と一致する必要があります
  2. PersistentVolumeClaim を適用します。

    kubectl apply -f pvc.yaml
  3. PersistentVolumeClaim がバインドされたことを確認します。

    kubectl get pvc bmcpfs-vsc -n default

    期待される出力:

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS           AGE
    bmcpfs-vsc   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   10Ti       RWX            alicloud-bmcpfs-test   30s

    STATUSBound の場合、PersistentVolume が自動的に作成されたことを示します。プロビジョニングの状況を確認します。

    kubectl describe pvc bmcpfs-vsc -n default

    イベントProvisioning succeeded メッセージを確認します。

ステップ 4:ワークロードのデプロイと PersistentVolumeClaim のマウント

以下の Deployment は、単一の CPFS for Lingjun ボリュームを共有する 3 つのレプリカを実行します。

  1. deploy.yaml を作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cpfs-shared-example
    spec:
      replicas: 3  # 3 つのレプリカで、複数の Pod 間で共有ストレージが機能することを検証します
      selector:
        matchLabels:
          app: cpfs-shared-app
      template:
        metadata:
          labels:
            app: cpfs-shared-app
        spec:
          tolerations:
            - key: node-role.alibabacloud.com/lingjun
              operator: Exists
              effect: NoSchedule
          # オプション: すべての Pod を特定のノードに固定する場合は、コメントを解除してノード名を設定してください
          # nodeName: cn-hangzhou.10.XX.XX.226
          containers:
          - name: app-container
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
              - name: pvc-cpfs
                mountPath: /data  # 共有ボリュームはコンテナ内の /data にマウントされます
            lifecycle:
              postStart:
                exec:
                  command:
                    - /bin/sh
                    - -c
                    - >
                      echo "Data written by $(hostname)" > /data/$(hostname).txt &&
                      echo "Deployment is running, check shared data in /data." &&
                      sleep 3600
          volumes:
            - name: pvc-cpfs
              persistentVolumeClaim:
                claimName: bmcpfs-vsc  # ステップ 3 で作成した PersistentVolumeClaim を参照します
  2. Deployment を適用します。

    kubectl apply -f deploy.yaml

    期待される出力:

    deployment.apps/cpfs-shared-example created

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

予期しないコストを回避し、データの安全性を確保するために、この順序でリソースを削除してください。

  1. ワークロードの削除 — PersistentVolumeClaim を使用しているすべてのアプリケーションを停止します。これによりボリュームがアンマウントされます。

    kubectl delete deployment <your-deployment-name>
  2. PersistentVolumeClaim の削除 — 結果は StorageClass の reclaimPolicy によって異なります。

    • Retain (推奨):CPFS for Lingjun のファイルセットとデータは保持されます。次の手順で PersistentVolume を削除してください。

    • Delete:バインドされた PersistentVolume とバックエンドのファイルセットが完全に削除されます。この操作は元に戻せません。

    kubectl delete pvc <your-pvc-name>
  3. PersistentVolume の削除 (reclaimPolicyRetain の場合のみ) — PersistentVolumeClaim の削除後、PersistentVolume は Released ステータスになります。Kubernetes リソースをクリーンアップするために、この PV を削除します。この操作はバックエンドのデータに影響しません。

    kubectl delete pv <your-pv-name>
  4. (オプション) StorageClass の削除 — 不要になった場合は削除します。既存のボリュームには影響しません。

    kubectl delete sc <your-sc-name>
  5. CPFS for Lingjun ファイルシステムの削除Retain ポリシーで保持されたデータを含め、すべてのデータが完全に削除されます。依存関係がないことを確認した上で、ファイルシステムを削除してください。

トラブルシューティング

PersistentVolumeClaim が Pending ステータスのままになる

PersistentVolumeClaim が Pending のままの場合、プロビジョニングに失敗しています。原因は通常、PersistentVolumeClaim のイベントで特定できます。

kubectl describe pvc <your-pvc-name> -n <your-namespace>

Events で警告を確認してください。一般的な原因は次のとおりです。

  • StorageClass not foundstorageClassName が正しくないか、StorageClass が存在しません。

  • provisioning failed または failed to create fileset:バックエンドストレージの問題です。以下の手順で確認を続けてください。

イベントが設定の問題を示している場合は、StorageClass を確認し、CSI ドライバーの登録を検証してください。

# StorageClass の設定を確認します
kubectl get storageclass <your-sc-name> -o yaml

# CSI ドライバーが登録されていることを確認します
kubectl get csidriver bmcpfsplugin.csi.alibabacloud.com

以下の点を確認してください。

  • provisionerbmcpfsplugin.csi.alibabacloud.com と一致していること。

  • bmcpfsId が正しく、ファイルシステムが存在すること。

  • get csidriver の出力がない場合、ドライバーはインストールされていません。[アドオン] ページから bmcpfs-csi-controller、bmcpfs-csi-node、および cnfs-nas-daemon をインストールしてください。

Pod が ContainerCreating 状態のままになる、または MountVolume.Setup failed エラーが発生する

これは、Pod がノードに到達したものの、ボリュームのマウントに失敗したことを示します。以下の手順で原因を特定してください。

  1. Pod のイベントを確認します。

    kubectl describe pod <pod-name> -n <your-namespace>

    EventsWarning メッセージ (FailedMountMountVolume.Setup failed など) を確認してください。

  2. PersistentVolumeClaim がバインドされていることを確認します。

    kubectl get pvc <your-pvc-name>

    STATUSBound である必要があります。Pending の場合は、「PersistentVolumeClaim が Pending ステータスのままになる」を参照してください。

  3. バインドされている場合は、ノード側の CSI プラグインのログを確認します。

    kubectl get pods -n kube-system -l app.kubernetes.io/name=bmcpfs-csi-driver \
      --field-selector spec.nodeName=<nodeName> \
      -o name | xargs kubectl logs -n kube-system -c csi-plugin

    これらのログから、ネットワーク接続、マウントターゲットの権限、I/O エラーなどの情報を確認できます。