静的にプロビジョニングされた CPFS ボリュームをマウントします。
クラウド並列ファイルストレージ (CPFS) は、ハイパフォーマンスコンピューティングシナリオ向けの、フルマネージドで拡張可能な並列ファイルシステムです。CPFS は、何千ものサーバーからの同時アクセスを可能にし、ミリ秒未満のレイテンシーで、数十 GB/s のスループットと数百万の IOPS (1 秒あたりの入出力操作数) を提供します。Alibaba Cloud Container Service (ACS) で実行される AI および HPC ワークロードでは、複数の Pod から同時にアクセスできる、このような共有型の高スループットストレージが必要になることがよくあります。このトピックでは、静的にプロビジョニングされた CPFS ボリュームを ACS アプリケーションにマウントし、そのボリュームが共有ストレージと永続ストレージをサポートしていることを確認する方法について説明します。
事前準備
CPFS for LINGJUN は、AIGC や自動運転などのインテリジェントコンピューティングシナリオ向けに設計されています。次に進む前に、以下の制約にご注意ください。
-
CPFS for LINGJUN は、エンドツーエンドの RDMA ネットワークをサポートしており、現在招待制プレビュー段階です。サポートは特定のリージョンとゾーンに限られます。
-
RDMA を介して CPFS for LINGJUN にアクセスする場合、Pod の
hpn-zoneは CPFS for LINGJUN ファイルシステムのhpn-zoneと一致する必要があります。 -
CPFS は共有ファイルシステムです。CPFS ボリュームを複数の Pod に同時にマウントできます。
-
CPFS ボリュームは、任意の CPU アクセラレーション対応の ACS Pod にマウントできます。GPU アクセラレーション対応の Pod については、特定の GPU モデルのみがサポートされています。対象かどうかを確認するには、チケットを送信してください。
前提条件
開始する前に、以下が完了していることを確認してください。
-
お使いの ACS クラスターにインストールされている managed-csiprovisioner アドオン
インストールを確認するには、ACS クラスター管理ページに移動し、左側のナビゲーションウィンドウで [操作] > [アドオン] を選択して、[ストレージ] タブを確認します。
静的プロビジョニングの仕組み
静的プロビジョニングには 3 つのステップが必要です。
-
CPFS コンソールで CPFS ファイルシステムを作成し、そのファイルシステム ID を記録します。
-
ご利用の ACS クラスターで、そのファイルシステムを参照する PersistentVolume (PV) と PersistentVolumeClaim (PVC) を作成します。
-
PVC を参照する Deployment を作成します。Kubernetes は PVC を PV にバインドし、ファイルシステムを Pod にマウントします。
アクセス方法の選択
PV の設定は、Pod のタイプとネットワークアクセス方法によって異なります。ステップ 1 に進む前に、どのシナリオが適用されるかを確認してください。
| シナリオ | Pod タイプ | ネットワーク | CSI ドライバー |
|---|---|---|---|
| RDMA 経由の CPFS for LINGJUN | GPU (特定モデルのみ) | 直接 RDMA | povplugin.csi.alibabacloud.com |
| VPC 経由の CPFS for LINGJUN | CPU Pod または RDMA 非対応の GPU Pod | VPC マウントターゲット | nasplugin.csi.alibabacloud.com |
ステップ 1:CPFS ファイルシステムの作成
-
CPFS for LINGJUN ファイルシステムを作成し、ファイルシステム ID を記録します。
-
(オプション) VPC マウントターゲットを作成します。Pod が RDMA をサポートしていない場合 (例えば、CPU Pod や RDMA 非対応の GPU Pod など) は、VPC マウントターゲットを作成します。マウントターゲットを作成する際は、ご利用の ACS クラスターの VPC と vSwitch を使用してください。マウントターゲットのドメイン名を記録します。ドメイン名は
cpfs-*-vpc-*.<Region>.cpfs.aliyuncs.comの形式です。
ステップ 2:PV と PVC の作成
kubectl
-
cpfs-pv-pvc.yamlという名前のファイルを作成します。「アクセス方法の選択」の表から、ご利用のアクセス方法に一致する YAML を選択します。CPFS for LINGJUN — RDMA ネットワーク重要RDMA をサポートしているのは、特定の GPU モデルを搭載した Pod のみです。サポートされているモデルについては、「ACS がサポートする GPU モデル」をご参照ください。
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test # PVC セレクターがこの PV にバインドするために使用します spec: accessModes: - ReadWriteMany capacity: storage: 10Ti # 宣言された容量。PVC のリクエスト以上である必要があります csi: driver: povplugin.csi.alibabacloud.com volumeAttributes: filesystemId: bmcpfs-***** # ご利用の CPFS for LINGJUN ファイルシステム ID に置き換えます path: / # ファイルシステム内のマウントパス。サブディレクトリは自動的に作成されます volumeHandle: bmcpfs-***** # filesystemId と同じ --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test # 上記の PV のラベルと一致させる必要があります resources: requests: storage: 10Ti # PV の容量を超えてはなりませんCPFS for LINGJUN — VPC ネットワーク
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test # PVC セレクターがこの PV にバインドするために使用します spec: accessModes: - ReadWriteMany capacity: storage: 10Ti # 宣言された容量。PVC のリクエスト以上である必要があります csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: efc # VPC ベースの CPFS アクセスのためのプロトコル server: cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com # ご利用の VPC マウントターゲットドメイン名に置き換えます path: / # ファイルシステム内のマウントパス。サブディレクトリは自動的に作成されます volumeHandle: bmcpfs-***** # ご利用の CPFS for LINGJUN ファイルシステム ID に置き換えます --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test # 上記の PV のラベルと一致させる必要があります resources: requests: storage: 10Ti # PV の容量を超えてはなりません -
PV と PVC を作成します。
kubectl create -f cpfs-pv-pvc.yaml -
PVC が PV にバインドされていることを確認します。
kubectl get pvc cpfs-test期待される出力:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <unset> 10s
コンソール
現在、コンソールでは VPC マウントターゲットを介して CPFS for LINGJUN を CPU アプリケーションにマウントすることはサポートされていません。このシナリオでは kubectl を使用してください。
-
ACS コンソールにログインします。
-
[クラスター] ページで、クラスター名をクリックします。
-
左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。
-
「[永続ボリューム要求]」ページで、[作成] をクリックします。
-
パラメーターを設定し、[作成] をクリックします。
パラメーター 説明 例 PVC の種類 CPFS を選択します。 CPFS 名前 PVC のカスタム名を指定します。 cpfs-test 割り当てモード 既存の PV にバインドする場合は 既存ボリューム を、PV と PVC を同時に作成する場合は ボリュームの作成 を選択します。 ボリュームの作成 CPFS の種類 LINGJUN 向け CPFS を選択します。
LINGJUN 向け CPFS アクセスモード ReadWriteMany または ReadWriteOnce を選択します。 ReadWriteMany ファイルシステム ID LINGJUN 向け CPFS ファイルシステムの ID です。 bmcpfs-0115\*\*\*\*\*\*13q5 -
[永続ボリューム要求] ページおよび [永続ボリューム] ページで、新しく作成された PVC および PV が表示され、そのステータスが [バインド済み] と表示されることを確認します。
ステップ 3:CPFS ボリュームを使用したアプリケーションのデプロイ
kubectl
-
cpfs-test.yamlという名前のファイルを作成します。ご利用の Pod タイプに一致するテンプレートを選択します。以下の例では、2 つのレプリカを持つ Deployment を作成します。両方の Pod は、ステップ 2 で作成した PVC を使用して、CPFS ファイルシステムを/dataにマウントします。GPU アクセラレーション対応アプリケーションサポートされている GPU モデルとドライバーのバージョンについては、「ACS の GPU アクセラレーション対応 Pod の GPU モデルとドライバーのバージョンを指定する」をご参照ください。
apiVersion: apps/v1 kind: Deployment metadata: name: cpfs-test labels: app: cpfs-test spec: replicas: 2 selector: matchLabels: app: cpfs-test template: metadata: labels: app: cpfs-test alibabacloud.com/compute-class: gpu # GPU コンピュートリソースをリクエストします alibabacloud.com/gpu-model-series: T4 # GPU モデル (例:T4) を指定します。必要に応じて更新してください alibabacloud.com/compute-qos: default spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-cpfs mountPath: /data # コンテナ内のマウントパス volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: cpfs-test # ステップ 2 の PVC 名と一致させる必要がありますCPU アクセラレーション対応アプリケーション
apiVersion: apps/v1 kind: Deployment metadata: name: cpfs-test labels: app: cpfs-test spec: replicas: 2 selector: matchLabels: app: cpfs-test template: metadata: labels: app: cpfs-test spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-cpfs mountPath: /data # コンテナ内のマウントパス volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: cpfs-test # ステップ 2 の PVC 名と一致させる必要があります -
Deployment を作成します。
kubectl create -f cpfs-test.yaml -
両方の Pod が実行中であることを確認します。
kubectl get pod | grep cpfs-test期待される出力:
cpfs-test-****-***a 1/1 Running 0 45s cpfs-test-****-***b 1/1 Running 0 45s -
CPFS ファイルシステムが期待されるパスにマウントされていることを確認します。
kubectl exec cpfs-test-****-***a -- ls /dataデータが書き込まれていない場合、デフォルトでディレクトリは空です。
コンソール
-
クラスター管理ページの左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。
-
[デプロイメント] ページで、[イメージから作成] をクリックします。
-
Deployment のパラメーターを設定します。以下に記載されていないパラメーターについては、デフォルト値を保持します。詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
GPU アクセラレーション対応アプリケーション
設定ページ パラメーター 説明 例 基本情報 名前 Deployment のカスタム名。 cpfs-test レプリカ数 Pod レプリカの数。 2 タイプ Pod の計算タイプ。サポートされている GPU モデルについては、「ACS の GPU アクセラレーション対応 Pod の GPU モデルとドライバーのバージョンを指定する」をご参照ください。 GPU, T4 コンテナ イメージ名 コンテナイメージのアドレス。 registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest 必須リソース 割り当てる GPU、vCPU、およびメモリ。 GPU: 1, CPU: 2 vCPU, メモリ: 2 GiB ボリューム [PVC の追加] をクリックし、マウントソースとコンテナパスを設定します。 マウントソース: pvc-cpfs, コンテナパス: /data CPU アクセラレーション対応アプリケーション
設定ページ パラメーター 説明 例 基本情報 アプリケーション名 Deployment のカスタム名。 cpfs-test レプリカ数 Pod レプリカの数。 2 タイプ Pod の計算タイプ。 CPU, 汎用 コンテナ イメージ名 コンテナイメージのアドレス。 registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest 必須リソース 割り当てる vCPU とメモリ。 CPU: 0.25 vCPU, メモリ: 0.5 GiB ボリューム [PVC の追加] をクリックし、マウントソースとコンテナパスを設定します。 マウントソース: pvc-cpfs, コンテナパス: /data -
「[デプロイメント]」ページでデプロイメント名をクリックします。「[Pod]」タブで、すべてのPodのステータスが「[実行中]」であることを確認します。
共有ストレージと永続ストレージの検証
上記で作成した Deployment には、同じ CPFS ファイルシステムをマウントする 2 つの Pod があります。以下の手順で、共有ストレージと永続ストレージが正しく機能することを確認します。
-
Pod 名を取得します。
kubectl get pod | grep cpfs-test期待される出力:
cpfs-test-****-***a 1/1 Running 0 45s cpfs-test-****-***b 1/1 Running 0 45s -
データを書き込む前に、マウントディレクトリが空であることを確認します。
kubectl exec cpfs-test-****-***a -- ls /data何も出力が返されない場合、ディレクトリは空でテストの準備ができています。
-
共有ストレージを検証します。
-
ある Pod にファイルを作成します。``
shell kubectl exec cpfs-test-**-*a -- touch /data/test.txt`` -
他の Pod でファイルが表示されることを確認します。 ``
shell kubectl exec cpfs-test-**-*b -- ls /data`期待される出力 — 最初の Pod で作成されたファイルが 2 番目の Pod で表示されます:`test.txt``
-
-
永続ストレージを検証します。
-
Deployment を再起動して、新しい Pod を作成します。 ``
shell kubectl rollout restart deploy cpfs-test`` -
新しい Pod が Running ステータスになるまで待ちます。``
shell kubectl get pod | grep cpfs-test`出力例:`cpfs-test-**-*c 1/1 Running 0 78s cpfs-test-**-*d 1/1 Running 0 52s`` -
新しい Pod でデータが保持されることを確認します。``
shell kubectl exec cpfs-test-**-*c -- ls /data`期待される出力 — Pod が再作成された後もファイルは存在し続ける:`test.txt``
-