CPFS for Lingjun は、高いスループットと IOPS (Input/Output Operations Per Second) を提供します。エンドツーエンドの RDMA ネットワークアクセラレーションをサポートし、AIGC や自動運転などのインテリジェントコンピューティングシナリオに適しています。Container Service for Kubernetes (ACK) を使用すると、CPFS for Lingjun ファイルシステムを静的永続ボリューム (PV) としてワークロードにアタッチできます。
CPFS for Lingjun は現在、招待プレビュー段階にあり、一部のリージョンとゾーンでのみサポートされています。この機能を利用するには、アカウントマネージャーに連絡してアクセスをリクエストしてください。
機能紹介
ACK は、Container Storage Interface (CSI) コンポーネントに基づいて、PV と PersistentVolumeClaim (PVC) を使用して、CPFS for Lingjun の静的 PV をワークロードにアタッチすることをサポートします。CSI は、Pod がスケジュールされるノードタイプに基づいて、最適なマウント方法を自動的に選択します。
VSC マウント:このマウント方法は Lingjun ノードでのみサポートされています。この機能を有効にするには、チケットを送信して、CPFS および Lingjun プロダクトチームにホワイトリストへの追加を依頼する必要があります。
VPC マウント:このマウント方法は Lingjun 以外のノードでサポートされています。VPC マウントポイントを作成することで実現され、同じ VPC 内のすべてのノードがファイルシステムをマウントしてアクセスできるようになります。
前提条件
CPFS for Lingjun の制限について精通していること。
クラスターが次の要件を満たしていること:
クラスターバージョン:1.26 以降。クラスターをアップグレードするには、「ACK クラスターの手動アップグレード」をご参照ください。
ノードのオペレーティングシステム:Alibaba Cloud Linux 3。
以下のストレージコンポーネントがインストールされており、バージョン要件を満たしていること。
クラスターの[コンポーネント管理]ページでは、コンポーネントのバージョンを確認し、コンポーネントをインストールまたはアップグレードできます。
CSI コンポーネント (csi-plugin および csi-provisioner):v1.33.1 以降。アップグレード方法の詳細については、「CSI コンポーネントの管理」をご参照ください。
cnfs-nas-daemon コンポーネント:0.1.2 以降。
bmcpfs-csi コンポーネント:このコンポーネントには、ACK によって管理されるコントロールプレーンコンポーネントである bmcpfs-csi-controller と、クラスターに DaemonSet としてデプロイされるノード側コンポーネントである bmcpfs-csi-node が含まれます。
注意事項
VSC マウントを使用する場合、Pod が実行されるノードは、CPFS for Lingjun ファイルシステムインスタンスと同じ hpn-zone にある必要があります。
初期化中に、Lingjun ノードは CPFS for Lingjun インスタンスに関連付けられている必要があります。そうでない場合、インスタンスは CSI を使用してマウントできません。
障害が発生した Lingjun ノードをオフラインにする前に、まず Pod をドレインする必要があります。そうしないと、クラスターのメタデータに不整合が生じ、Pod リソースが残ってしまい、回収できなくなります。
同じ Pod 内で複数の PV を使用して、同じ CPFS インスタンスから異なるサブディレクトリをマウントすることはサポートされていません。基盤となるドライバーの制限により、この構成では Pod のマウントと起動に失敗します。
CPFS インスタンスに対しては 1 つの PV/PVC のみを作成できます。その後、Pod の
volumeMounts構成でsubPathフィールドを使用して、必要なサブディレクトリを個別にマウントできます。subPathは軽量なbind mountメカニズムに基づいて実装されており、追加のパフォーマンスオーバーヘッドは発生しません。
ステップ 1: CPFS ファイルシステムを作成する
CPFS for Lingjun ファイルシステムを作成し、ファイルシステム ID を記録します。詳細については、「CPFS for Lingjun ファイルシステムの作成」をご参照ください。
(オプション) Lingjun 以外のノードからマウントするには、クラスターノードと同じ VPC に VPC マウントポイントを作成し、マウントポイントのドメイン名を記録します。ドメイン名は
cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.comの形式です。Pod が Lingjun ノードにスケジュールされる場合、デフォルトで VSC マウントが使用されます。この場合、この手順は不要です。
ステップ 2: PV と PVC を作成する
既存の CPFS ファイルシステムに基づいて PV と PVC を作成できます。
次の YAML サンプルを修正し、bmcpfs-pv-pvc.yaml として保存します。
apiVersion: v1 kind: PersistentVolume metadata: name: bmcpfs spec: accessModes: - ReadWriteMany capacity: storage: 10Ti claimRef: name: bmcpfs namespace: default csi: driver: bmcpfsplugin.csi.alibabacloud.com volumeAttributes: # このフィールドは、Pod が Lingjun 以外のノードにスケジュールされる場合、またはクロスドメインの自動 VPC スイッチオーバーが有効になっている場合に必須です。そうでない場合、マウントは失敗します。 vpcMountTarget: cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com # Pod が現在の bmcpfs とは異なるゾーンのノードにスケジュールされた場合、vpcMountTarget マウントポイントが自動的に使用され、CPFS ストレージにアクセスします。 mountpointAutoSwitch: "true" # volumeHandle を CPFS for Lingjun ファイルシステムの ID に置き換えます。 volumeHandle: bmcpfs-***** mountOptions: [] --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bmcpfs namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 10Ti volumeMode: Filesystem volumeName: bmcpfsPV パラメータ
パラメーター
説明
accessModesPV のアクセスモード。
capacity.storageボリュームの宣言されたストレージ容量。これは単なる宣言であり、実際の容量には影響しません。
csi.driverドライバーのタイプ。CPFS for Lingjun をマウントする場合、これは
bmcpfsplugin.csi.alibabacloud.comに固定されます。csi.volumeAttributes.vpcMountTargetCPFS の VPC マウントポイントのドメイン名。これを空にすると、Lingjun 以外のノードでのマウントに失敗します。
Pod が Lingjun ノードにスケジュールされる場合、これを設定する必要はありません。
csi.volumeAttributes.mountpointAutoSwitchbmcpfs が VSC マウントポイント (デフォルトで作成および取得) と VPC マウントポイント (指定が必要) を自動的に切り替えることを許可するかどうかを指定します。
csi.volumeAttributes.vpcMountTargetと組み合わせて使用します。csi.volumeHandleCPFS ファイルシステムの ID。
mountOptionsマウントパラメーター。
PVC パラメータ
パラメータ
説明
accessModesPVC が PV に要求するアクセスモード。PV と一致する必要があります。
resources.requests.storagePod に割り当てられるストレージ容量。PV の容量より大きくすることはできません。
volumeModeマウントモード。
Filesystemに設定する必要があります。volumeNamePVC がバインドされる PV の名前。
PV と PVC を作成します。
kubectl apply -f bmcpfs-pv-pvc.yaml
PVC が PV にバインドされていることを確認します。
kubectl get pvc bmcpfs予期される出力:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE bmcpfs Bound bmcpfs 10Ti RWX <unset> 51sSTATUSがBoundであることは、PV と PVC が正常にバインドされたことを示します。
手順3:アプリケーションを作成し、CPFS をマウントする
シナリオ1:CPFS ファイルシステム全体をマウントする
このシナリオでは、CPFS ファイルシステム全体がコンテナーにマウントされます。
次の YAML コンテンツを使用して
cpfs-test.yamlという名前のファイルを作成し、CPFS for Lingjun の静的 PV を宣言します。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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: # ボリュームマウントの設定 - name: pvc-cpfs mountPath: /data volumes: # ボリュームの設定 - name: pvc-cpfs persistentVolumeClaim: claimName: bmcpfsDeployment を作成します。
kubectl create -f cpfs-test.yamlPod のデプロイメントステータスを確認します。
kubectl get pod -l app=cpfs-test予期される出力:
NAME READY STATUS RESTARTS AGE cpfs-test-76b77d64b5-2hw96 1/1 Running 0 42s cpfs-test-76b77d64b5-dnwdx 1/1 Running 0 42sいずれかの Pod に入り、CPFS for Lingjun の静的 PV がマウントされていることを確認します。
kubectl exec -it <pod-name> -- mount | grep /data次の出力は、CPFS for Lingjun の静的 PV がマウントされたことを示しています。
bindroot-f0a5c-******:cpfs-*******-vpc-****.cn-shanghai.cpfs.aliyuncs.com:/ on /data type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)
シナリオ2:CPFS ファイルシステムのサブディレクトリをマウントする
共有ストレージのシナリオでは、volumeMounts.subPath を使用して、複数のテナントまたはタスクのデータ隔離を実現できます。これにより、複数のアプリケーション Pod が同じ CPFS ボリュームを共有しながら、それぞれが独立したディレクトリを持つことができます。
次の内容で pod.yaml ファイルを作成します。この Pod には、
subPathを使用して同じ PVC (bmcpfs) の異なるサブディレクトリをマウントする 2 つのコンテナーが含まれています。Pod のマウント時に、
subPathで指定されたサブディレクトリ (例:workspace/alpha) が CPFS ファイルシステムに存在しない場合、自動的に作成されます。apiVersion: v1 kind: Pod metadata: name: cpfs-subpath-demo-pod spec: containers: - name: task-alpha-container image: busybox:1.35 command: ["/bin/sh", "-c", "sleep 3600"] volumeMounts: - name: cpfs-storage mountPath: /data/workspace # コンテナー内のマウントパス subPath: workspace/alpha # ボリューム全体ではなく、ボリューム内の workspace/alpha サブディレクトリをマウントする - name: task-beta-container image: busybox:1.35 command: ["/bin/sh", "-c", "sleep 3600"] volumeMounts: - name: cpfs-storage mountPath: /data/workspace # コンテナー内のマウントパスは同じでもよい subPath: workspace/beta # ボリューム全体ではなく、ボリューム内の workspace/beta サブディレクトリをマウントする volumes: - name: cpfs-storage persistentVolumeClaim: claimName: bmcpfs # 事前に作成した PVC を参照するPod をデプロイします。
kubectl apply -f pod.yamltask-alpha コンテナーのマウントと書き込み操作を確認します。
task-alpha コンテナーに接続します。
kubectl exec -it cpfs-subpath-demo-pod -c task-alpha-container -- /bin/shマウントされたファイルシステムを表示して、CPFS ボリュームが存在することを確認します。
df -h次の出力は、共有ディレクトリ (/share) がコンテナー内の /data/workspace パスにマウントされていることを示しています。
Filesystem Size Used Available Use% Mounted on ... 192.XX.XX.0:/share 10.0T 1.0G 10.0T 0% /data/workspace ...マウントポイントの親ディレクトリ構造を確認します。
ls -l /data/次の出力は、/data ディレクトリに workspace という名前のサブディレクトリが存在することを示しています。
total 4 drwxr-xr-x 2 root root 4096 Aug 15 10:00 workspaceマウントされたディレクトリにファイルを作成して、書き込み権限を確認します。
echo "hello from alpha" > /data/workspace/alpha.log exit
task-beta コンテナーのマウントとデータ隔離を確認します。
task-betaコンテナーに接続します。kubectl exec -it cpfs-subpath-demo-pod -c task-beta-container -- /bin/shコンテナーのマウントポイント /data/workspace にファイルを作成します。
echo "hello from beta" > /data/workspace/beta.log/data/workspace/ ディレクトリ内のファイルを確認します。
ls -l /data/workspace/次の出力は、beta.log が書き込まれ、alpha.log が存在しないことを示しています。これは、2 つのコンテナー間のデータが隔離されていることを意味します。
total 4 -rw-r--r-- 1 root root 16 Aug 15 10:05 beta.log