Container Service for Kubernetes (ACK) は、CPFS for Lingjun ファイルシステムのマウントをサポートしています。複数のポッドで同時にマウントし、データを共有できます。
前提条件
ACK クラスターが作成されている必要があります。
ACK の場合、CSI コンポーネント (bmcpfs-csi-controller、bmcpfs-csi-node、cnfs-nas-daemon) は ACK プラットフォームが管理します。コンポーネントのバージョン管理やアップグレードを行う必要はありません。
CPFS for Lingjun ファイルシステムを作成し、ファイルシステム ID を記録しておいてください。詳細については、「CPFS for Lingjun ファイルシステムの作成」をご参照ください。
ポッドが RDMA をサポートしていないノードにスケジューリングされる場合や、コンピューティングとストレージのアフィニティドメインをまたいでアクセスする場合は、事前に VPC マウントポイントを作成し、マウントポイントのドメイン名 (形式:
cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com) を記録しておく必要があります。VPC マウントポイントは、ACK クラスターと同じ VPC に属している必要があります。詳細については、「VPC マウントポイントの管理」をご参照ください。
手順1:PV と PVC の作成
ポッドのタイプに応じて、適切なテンプレートを選択します。
コンピューティングとストレージのアフィニティドメインが同一である Lingjun GPU ポッド: 「方法A:RDMA」を使用します。
CPU ポッド、または コンピューティングとストレージのアフィニティドメインをまたいで Lingjun にアクセスする場合:「方法B:VPC マウントポイント」を使用します。
ACK Lingjun ポッドが CPFS と同じコンピューティングとストレージのアフィニティドメインにある場合、最高のパフォーマンスを得るために VSC + RDMA ダイレクトマウントを介してファイルシステムにアクセスします。CPU ポッドの場合、またはコンピューティングとストレージのアフィニティドメインをまたいで Lingjun にアクセスする場合、VPC マウントポイントを介してアクセスします。コンピューティングとストレージのアフィニティドメインの概念と判断方法については、「マウントアクセスの概要」をご参照ください。
RDMAネットワーク
kubectl CLI
PV と PVC を定義するために、
cpfs-pv-pvc.yamlという名前のファイルを作成します。apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test spec: accessModes: - ReadWriteMany capacity: storage: 10Ti csi: driver: bmcpfsplugin.csi.alibabacloud.com volumeAttributes: filesystemId: bmcpfs-***** path: / volumeHandle: bmcpfs-***** --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test resources: requests: storage: 10Tiパラメーターの説明:
-
PersistentVolume のパラメーター
パラメーター
説明
labelsPersistentVolume のラベル。PersistentVolumeClaim は、
セレクターを使用してこれらのラベルを照合し、PersistentVolume にバインドします。accessModesPersistentVolume のアクセスモード。
capacity.storageボリュームの容量。
csi.driverCSI ドライバー。値を
bmcpfsplugin.csi.alibabacloud.comに設定します。csi.volumeAttributesCPFS ボリュームの属性。
-
filesystemId:CPFS for LINGJUN ファイルシステムの ID。 -
path:マウントするディレクトリ。デフォルト値は/で、CPFS ファイルシステムのルートディレクトリを示します。/dirのようなサブディレクトリを指定することもできます。サブディレクトリが存在しない場合、マウント時に自動的に作成されます。
csi.volumeHandleCPFS for LINGJUN ファイルシステムの ID。
-
-
PersistentVolumeClaim のパラメーター
パラメーター
説明
accessModesPersistentVolumeClaim が要求するアクセスモード。
selectorラベルに基づいて、一致する PersistentVolume を見つけるためのセレクター。
resources.requests.storagePersistentVolumeClaim が要求するストレージ量。この値は PersistentVolume の容量を超えることはできません。
-
作成コマンドを実行します。
kubectl create -f cpfs-pv-pvc.yamlPVC が PV にバインドされていることを確認します。
kubectl get pvc cpfs-test出力例 (
STATUSがBoundであれば成功です):NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <unset> 10s
コンソール
ACK コンソールにログインします。
[クラスター] ページで、目的のクラスターの名前をクリックして、その管理ページに移動します。
ナビゲーションペインで、 を選択し、[作成] をクリックして、次の設定を行います。
パラメーター
説明
例
[PVC タイプ]
[CPFS] を選択します。
CPFS
[名前]
PVC のカスタム名。命名要件については、画面上のプロンプトをご参照ください。
cpfs-pvc
[割り当てモード]
必要に応じて、[既存のボリューム] または [ボリュームの作成] を選択します。
[ボリュームの作成]
[CPFS タイプ]
[CPFS for Lingjun] を選択します。
[CPFS for Lingjun]
[アクセスモード]
[ReadWriteMany] と [ReadWriteOnce] をサポートします。
[ReadWriteMany]
[ファイルシステムID]
マウントする CPFS for Lingjun ファイルシステムの ID を設定します。
bmcpfs-0115******13q5
作成された PV と PVC を表示します。
[永続ボリューム要求] ページおよび [ボリューム] ページで、新しく作成された PV と PVC を確認できます。それらがバインドされていることを確認します。
VPCネットワーク
CPU ポッド、標準 GPU (T4 や A10 など)、およびコンピューティングとストレージのアフィニティドメインをまたぐ Lingjun GPU アクセスに適用されます。
PV と PVC を定義するために、
cpfs-pv-pvc.yamlという名前のファイルを作成します。apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test # [PV ラベル] PVC がこの PV にバインドする際に使用 spec: accessModes: - ReadWriteMany capacity: storage: 10Ti csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: efc server: cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com # VPC マウントポイントのドメイン名に置き換えます path: / autoSwitch: "true" # オプション。VSC/VPC の自動切り替えを有効にします (Lingjun のクロス AZ シナリオで推奨) volumeHandle: bmcpfs-***** # CPFS for Lingjun ファイルシステム ID に置き換えます --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test # [PVC 名] デプロイメントから参照されます spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test # [PVC セレクター] PV ラベルと一致させます resources: requests: storage: 10Tiパラメーターの説明:
-
PersistentVolume のパラメーター
パラメーター
説明
labelsPersistentVolume のラベル。PersistentVolumeClaim は、
セレクターを使用してこれらのラベルを照合し、PersistentVolume にバインドします。accessModesPersistentVolume のアクセスモード。
capacity.storageボリュームの容量。
csi.driverCSI ドライバー。値を
nasplugin.csi.alibabacloud.comに設定します。csi.volumeAttributesCPFS ボリュームの属性。
-
mountProtocol:マウントプロトコル。値をefcに設定します。 -
server:CPFS ファイルシステムの VPC マウントターゲットドメイン名。 -
path:マウントするディレクトリ。デフォルト値は/で、CPFS ファイルシステムのルートディレクトリを示します。/dirのようなサブディレクトリを指定することもできます。サブディレクトリが存在しない場合、マウント時に自動的に作成されます。
csi.volumeHandleCPFS for LINGJUN ファイルシステムの ID。
-
-
PersistentVolumeClaim のパラメーター
パラメーター
説明
accessModesPersistentVolumeClaim が要求するアクセスモード。
selectorラベルに基づいて、一致する PersistentVolume を見つけるためのセレクター。
resources.requests.storagePersistentVolumeClaim が要求するストレージ量。この値は PersistentVolume の容量を超えることはできません。
autoSwitch:オプションのパラメーターです。"true"に設定すると、VSC/VPC の自動切り替えが有効になります。Lingjun GPU がアベイラビリティゾーンをまたいでアクセスする場合、システムは自動的に RDMA から VPC チャネルに切り替えます。
説明VPC チャネルのスループットはネットワーク帯域幅によって制限され、最大で約 3.2 GB/s (25 Gbps) となり、直接 RDMA 接続よりも低くなります。パフォーマンスが重視されるシナリオでは、同じコンピューティングとストレージのアフィニティドメインにある CPFS インスタンスを優先することを推奨します。
-
作成コマンドを実行します。
kubectl create -f cpfs-pv-pvc.yamlPVC が PV にバインドされていることを確認します。
kubectl get pvc cpfs-test出力例 (
STATUSがBoundであれば成功です):NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <unset> 10s
手順2:アプリケーションの作成と CPFS のマウント
PVC を参照するデプロイメントを作成し、ストレージをコンテナー内の特定のディレクトリにマウントします。お好みに応じて、kubectl CLI またはコンソールのいずれかを使用してください。
kubectl
次の内容で
cpfs-test.yamlという名前のファイルを作成します。GPU アプリケーション
次の YAML の例では、2つのポッドを持つデプロイメントを作成します。両方のポッドは、
alibabacloud.com/compute-class: gpuラベルを使用して GPU ベースのコンピューティング性能を要求し、cpfs-testという名前の永続ボリューム要求 (PVC) を使用してストレージリソースを要求します。両方のポッドのマウントパスは/dataです。説明特定の GPU モデルの詳細については、「ACK GPU ポッドの 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 # コンピューティングタイプを GPU として指定します。 alibabacloud.com/compute-class: gpu # GPU モデル (例:T4) を指定します。 alibabacloud.com/gpu-model-series: 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-testCPU アプリケーション
次の YAML の例では、2つのポッドを持つデプロイメントを作成します。これらのポッドは、
cpfs-testという名前の PVC を使用してストレージリソースを要求し、両方とも/dataパスにマウントされます。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デプロイメントを作成し、CPFS ボリュームをマウントします。
kubectl create -f cpfs-test.yamlデプロイメント内のポッドのステータスを確認します。
kubectl get pod | grep cpfs-test出力例のように、2つのポッドが 「Running」 状態と表示されます。
cpfs-test-****-***a 1/1 Running 0 45s cpfs-test-****-***b 1/1 Running 0 45sマウントパスを確認します。
このコマンドは、マウントされたディレクトリ (/data) の内容を一覧表示します。このディレクトリには、CPFS for Lingjun ファイルシステムのデータが含まれています。デフォルトでは、ディレクトリは空です。
kubectl exec cpfs-test-****-***a -- ls /data
コンソール
クラスター管理ページのナビゲーションペインで、 を選択します。
展開 ページで、イメージによる作成 をクリックします。
デプロイメントのパラメーターを設定し、作成する をクリックします。
主要なパラメーターを以下に示します。他のパラメーターはデフォルト値のままにできます。詳細については、「デプロイメントを使用したステートレスアプリケーションの作成」をご参照ください。
GPU アプリケーション
セクション
パラメーター
説明
例
[基本情報]
[名前]
デプロイメントの一意の名前を入力します。名前はページに表示される形式要件に従ってください。
cpfs-test
[Replicas:]
デプロイメントのポッドレプリカ数。
2
[インスタンスタイプ]
ポッドのハードウェアリソース (CPU や特定の GPU モデルなど) を指定します。
説明特定の 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 を追加 をクリックし、パラメーターを設定します。
[マウントソース]:既存の永続ボリューム要求を選択します。
[コンテナーパス]:CPFS ファイルシステムがマウントされるコンテナー内のパスを入力します。
マウントソース:pvc-cpfs
コンテナーパス:/data
CPU アプリケーション
セクション
パラメーター
説明
例
[基本情報]
[名前]
デプロイメントの一意の名前を入力します。名前はページに表示される形式要件に従ってください。
cpfs-test
[Replicas:]
デプロイメントのポッドレプリカ数。
2
[インスタンスタイプ]
ポッドのコンピューティングタイプ。
CPU、汎用
[コンテナー]
[イメージ名]
アプリケーションのデプロイに使用するコンテナーイメージ。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
[リソースリクエスト]
各ポッドに割り当てる vCPU とメモリのリソース量。
CPU:0.25 vCPU
メモリ:0.5 GiB
[ボリューム]
PVC を追加 をクリックし、パラメーターを設定します。
[マウントソース]:既存の永続ボリューム要求を選択します。
[コンテナーパス]:CPFS ファイルシステムがマウントされるコンテナー内のパスを入力します。
マウントソース:pvc-cpfs
コンテナーパス:/data
アプリケーションのステータスを確認します。
展開 ページで、アプリケーション名をクリックします。
ポッド タブで、ポッドの状態が「実行中」であることを確認します。
手順3:マウントの検証
前の例で作成した Deployment には 2 つの Pod が含まれており、両方とも同じ CPFS ファイルシステムをマウントします。次のように、共有ストレージと永続ストレージを検証できます:
Deployment を再起動し、新しく作成された Pod でデータが永続化されているかを確認して、永続ストレージを検証します。
-
Pod を確認します。
kubectl get pod | grep cpfs-test出力例:
cpfs-test-****-***a 1/1 Running 0 45s cpfs-test-****-***b 1/1 Running 0 45s -
共有ストレージを検証します。
-
いずれかの Pod にファイルを作成します。
この例では、
cpfs-test-****-***aという名前の Pod を使用します:kubectl exec cpfs-test-****-***a -- touch /data/test.txt -
もう一方の Pod でファイルを確認します。
この例では、
cpfs-test-****-***bという名前の Pod を使用します:kubectl exec cpfs-test-****-***b -- ls /data出力
test.txtは、ストレージが共有されていることを示します。test.txt
-
-
永続ストレージを検証します。
-
Deployment を再起動します。
kubectl rollout restart deploy cpfs-test -
Pod のステータスを確認し、新しい Pod が作成されるのを待ちます。
kubectl get pod | grep cpfs-test出力例:
cpfs-test-****-***c 1/1 Running 0 78s cpfs-test-****-***d 1/1 Running 0 52s -
新しい Pod でデータが永続化されていることを確認します。
この例では、
cpfs-test-****-***cという名前の Pod を使用します:kubectl exec cpfs-test-****-***c -- ls /dataこの出力により、CPFS ファイルシステム上のデータが永続化され、新しい Pod のマウントディレクトリからアクセス可能であることがわかります。
test.txt
-