このトピックでは、静的にプロビジョニングされた Cloud Parallel File System (CPFS) 汎用版のボリュームを Container Service for Kubernetes (ACK) クラスター内のワークロードにマウントする方法について説明します。CPFS は、AI トレーニング、自動運転、遺伝子コンピューティング、ビデオレンダリングなどのハイパフォーマンスコンピューティング (HPC) ワークロード向けに設計されています。
仕組み
ACK クラスターに CPFS 汎用版の静的ストレージボリュームをマウントする主なワークフローは次のとおりです。
-
PersistentVolume (PV) の作成:既存の CPFS 汎用版ファイルシステムのマウントアドレス、容量、アクセスモード、その他のパラメーターを宣言して、クラスターに「登録」します。
-
PersistentVolumeClaim (PVC) の作成:アプリケーションは PVC を通じて登録済みのストレージリソースを「要求」します。PVC は、指定された条件を満たす PV に自動的にバインドされます。
-
アプリケーションでのマウント:バインドされた PVC を、コンテナ内の永続ディレクトリとしてアプリケーション Pod にマウントします。
前提条件
-
CSI コンポーネントの確認とアップグレード:csi-plugin と csi-provisioner コンポーネントのバージョンが v1.22.11-abbb810e-aliyun 以降であることを確認します。
アップグレードについては、「CSI コンポーネントのアップグレード」をご参照ください。
-
ストレージコンポーネントが CPFS のマウントをサポートするように設定されていること。
-
ACK クラスターからアクセス可能な CPFS 汎用版ファイルシステム、プロトコルサービス、およびマウントアドレスが準備されていること。
まだ作成していない場合は、クラスターが存在するリージョンでCPFS 汎用版ファイルシステムを作成し、クラスターに対応する VPC と vSwitch を使用してプロトコルサービスを作成し、マウントポイントを生成します。
-
ファイルシステム:クラスターと同じリージョンにあり、バージョンが 2.3.0 以降である必要があります。CPFS 汎用版がサポートされているリージョンをご参照ください。
NAS コンソールのファイルシステムリスト ページで、目的の CPFS ファイルシステムをクリックし、基本情報 ページで CPFS のバージョン番号を確認します。
-
プロトコルサービス:CPFS は VPC をまたいだマウントをサポートしていません。使用する VPC はクラスターの VPC と同じである必要があります。
-
プロトコルサービスのマウントアドレス (マウントポイントドメイン名とエクスポートディレクトリで構成) を取得します。エクスポートディレクトリとして
/が指定されている場合、マウントアドレスはcpfs-****.<Region ID>.cpfs.aliyuncs.com:/shareです。プロトコルサービス ページで、ディレクトリのエクスポート をクリックし、マウントアドレス 列のマウントアドレスをコピーして保存します。
-
-
CPFS 汎用版の制限事項を理解していること。
ステップ 1:PersistentVolume (PV) の作成
クラスターに PV を作成して、既存の CPFS ファイルシステムを「登録」します。
-
次の内容を cpfs-pv.yaml ファイルとして保存します。
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-pv labels: # 後続の PVC バインド用にラベルを定義します alicloud-pvname: cpfs-pv spec: accessModes: # アクセスモード - ReadWriteMany capacity: storage: 20Gi # PV の総容量を定義します csi: driver: nasplugin.csi.alibabacloud.com # この値に固定します volumeAttributes: mountProtocol: cpfs-nfs # NFS プロトコルを使用してマウントします path: "/share" # マウントアドレスのマウントディレクトリ volumeAs: subpath # サブディレクトリ server: "cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com" # マウントアドレスのマウントポイントドメイン名 volumeHandle: cpfs-pv # ボリュームの一意の識別子。metadata.name と一致させる必要があります mountOptions: # NFS マウントオプション - rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport - vers=3主なパラメーターの説明:
パラメーター
説明
accessModesPV のアクセスモード。
capacity.storageボリュームのストレージ容量。
csi.driverドライバータイプ。CPFS General Purpose を使用する場合、
nasplugin.csi.alibabacloud.comに固定されます。csi.volumeAttributes.serverCPFS 汎用版のプロトコルサービスのエクスポートディレクトリのマウントアドレスにおけるマウントポイントドメイン名。
csi.volumeAttributes.pathCPFS 汎用プロトコルサービスのエクスポートディレクトリのマウントアドレス内のマウントディレクトリです (例:
/share)。/share/dirのように、サブディレクトリに設定することもできます。csi.volumeAttributes.mountProtocolcpfs-nfsは、NFS プロトコルを使用して CPFS をマウントすることを示します。csi.volumeAttributes.volumeAssubpathは、サブディレクトリタイプの PV を作成することを示します。csi.volumeHandlePV 名と一致させる必要があります。
-
次のコマンドを実行して PV を作成します。
kubectl apply -f cpfs-pv.yaml -
PV のステータスを表示します。
kubectl get pv cpfs-pv実行結果の例:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE cpfs-pv 20Gi RWX Retain Available 2s
ステップ 2:PersistentVolumeClaim (PVC) の作成
PVC を作成して、前の手順で登録したストレージリソースの使用を「要求」します。
-
次の内容を cpfs-pvc.yaml として保存します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-pvc spec: accessModes: - ReadWriteMany # アクセスモード resources: requests: storage: 20Gi # 要求するストレージ容量 selector: # matchLabels: alicloud-pvname: cpfs-pv # 前に作成した PV にバインドしますPVC パラメーター
説明
accessModesPVC が PV に要求するアクセスモード。
セレクターPV のラベルを使用してマッチングとバインドを行います。
resources.requests.storagePod に割り当てられるストレージ容量。PV の容量を超えてはなりません。
-
PVC を作成します。
kubectl apply -f cpfs-pvc.yaml -
PVC のステータスを表示して、PV に正常にバインドされていることを確認します。
kubectl get pvc cpfs-pvc出力例は次のとおりです。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-pvc Bound cpfs-pv 20Gi RWX <unset> 18m
ステップ 3:アプリケーションの作成とボリュームのマウント
アプリケーションワークロードを作成し、その設定で以前に作成した PVC の使用を宣言します。
-
次の内容を cpfs-test.yaml として保存します。
apiVersion: apps/v1 kind: StatefulSet metadata: name: cpfs-sts spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: cpfs-pvc mountPath: /data volumes: - name: cpfs-pvc persistentVolumeClaim: claimName: cpfs-pvc -
StatefulSet を作成します。
kubectl apply -f cpfs-test.yaml -
Pod のステータスを表示します。
kubectl get pods -l app=nginx実行結果の例:
NAME READY STATUS RESTARTS AGE cpfs-sts-0 1/1 Running 0 58s cpfs-sts-1 1/1 Running 0 50s -
コンテナ内のマウントポイントを確認して、CPFS が正常にマウントされたことを確認します。
kubectl exec cpfs-sts-0 -- mount | grep /data次の実行結果例は、CPFS 汎用版の静的ボリュームが正常にマウントされたことを示しています。
cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com:/share on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,port=30000,timeo=600,retrans=2,sec=sys,mountaddr=127.0.1.255,mountvers=3,mountport=30000,mountproto=tcp,local_lock=all,addr=127.0.1.255)
共有ストレージと永続ストレージの検証
アプリケーションが正常にデプロイされた後、ストレージボリュームが期待どおりに機能するかどうかを検証できます。
共有ストレージ
1 つの Pod でファイルを作成し、別の Pod でそれを表示して、データの共有ストレージを検証します。
-
Pod 情報を表示して Pod 名を取得します。
kubectl get pod -l app=nginx実行結果の例:
NAME READY STATUS RESTARTS AGE cpfs-sts-0 1/1 Running 0 10s cpfs-sts-1 1/1 Running 0 5s -
1 つの Pod にファイルを作成します。
以下では、Pod
cpfs-sts-0を例に説明します:kubectl exec cpfs-sts-0 -- touch /data/test.txt -
別の Pod にファイルが存在するかどうかを確認します。
以下では、
cpfs-sts-1という名前の Pod を例に説明します。kubectl exec cpfs-sts-1 -- ls /data実行結果の例:
test.txt以前に作成したファイルが表示され、データが複数の Pod 間で共有できることを示しています。
永続ストレージ
StatefulSet を再構築し、ファイルシステム内のデータが新しい Pod に存在するかどうかを確認して、データの永続ストレージを検証します。
-
StatefulSet を再起動して再構築をトリガーします。
kubectl rollout restart sts cpfs-sts -
Pod を表示し、新しい Pod が起動して実行中の状態になるまで待ちます。
kubectl get pod -l app=nginx実行結果の例:
>NAME READY STATUS RESTARTS AGE cpfs-sts-0 1/1 Running 0 1s cpfs-sts-1 1/1 Running 0 10s -
以前に作成したファイルが新しい Pod に存在するかどうかを確認します。
以下では、
cpfs-sts-0という名前の Pod を例に説明します。kubectl exec cpfs-sts-0 -- ls /data実行結果の例:
test.txt以前に書き込まれたファイルが表示され、データが永続的に保存されていることを示しています。
本番環境の推奨事項
-
パフォーマンスチューニング: CPFS は、高スループットおよび高 IOPS のシナリオに適しています。PV の
mountOptionsで NFS マウントオプション (rsizeやwsizeなど) を調整することで、パフォーマンスを最適化し、特定のワークロード要件を満たすことができます。 -
データ一貫性:共有ストレージとして、CPFS は複数の Pod が同じファイルに同時に書き込む際のデータ一貫性を保証しません。ファイルの破損を避けるためには、アプリケーション層で分散ロックを実装するか、追記専用書き込みモードを使用する必要があります。
-
ストレージボリューム管理:静的ストレージボリュームを使用する場合、手動での PV 管理が必要です。複数のアプリケーション用にストレージボリュームを自動的に作成および分離する必要があるシナリオでは、CNFS を使用して CPFS の動的ストレージボリュームを管理することを推奨します。詳細については、「汎用 CPFS 動的ボリュームの管理」をご参照ください。