このトピックでは、Container Service for Kubernetes (ACK) クラスターのワークロードに、静的にプロビジョニングされた Cloud Parallel File System (CPFS) 汎用型ボリュームをマウントする方法について説明します。CPFS は、AI トレーニング、自動運転、遺伝子コンピューティング、ビデオレンダリングなどのハイパフォーマンスコンピューティング (HPC) ワークロード向けに設計されています。
前提条件
開始する前に、以下を確認してください。
`csi-plugin` と `csi-provisioner` がバージョン
v1.22.11-abbb810e-aliyun以降であること。アップグレードするには、「CSI コンポーネントのアップグレード」をご参照ください。
制限事項
| 制限事項 | 詳細 |
|---|---|
| リージョンの可用性 | CPFS 汎用型は特定のリージョンでのみ利用可能です。詳細については、「利用可能なリージョン」をご参照ください。 |
| マウントプロトコル | NFS のみサポートされています。POSIX プロトコルはサポートされていません。 |
| ノードアーキテクチャ | x86 のみ対応しています。ContainerOS ノードはサポートされていません。 |
| ネットワーク | ボリュームは、同一 VPC 内のクラスターにのみマウントできます。VPC をまたいだマウントはサポートされていません。 |
| プロビジョニング | 静的プロビジョニングのみサポートされています。動的プロビジョニングはサポートされていません。 |
ストレージコンポーネントの構成
構成方法は、ご利用の csi-plugin のバージョンによって異なります。
csi-plugin 1.33 以降
cnfs-nas-daemon コンポーネントをインストールし、csi-plugin で AlinasMountProxy=true FeatureGate を有効にします。これにより、CSI コンポーネントはマウントを cnfs-nas-daemon にデリゲートできます。詳細については、「cnfs-nas-daemon コンポーネントの管理」をご参照ください。
csi-plugin 1.33 より前
CPFS 汎用型向けに NFS マウントを有効にするには、ConfigMap を適用します。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cpfs-nas-enable: "true" EOF必要な依存関係をインストールするために csi-plugin を再起動します。これは実行中のサービスには影響しません。
kubectl -n kube-system rollout restart daemonset csi-plugin期待される出力:
daemonset.apps/csi-plugin restarted
ステップ 1: CPFS ファイルシステムとプロトコルサービスの作成
永続ボリューム (PV) を作成する前に、CPFS ファイルシステム、プロトコルサービス、およびそのプロトコルサービスからのマウントアドレスが必要です。
クラスターと同じリージョンにファイルシステムを作成します。
既存のファイルシステムがある場合は、NAS コンソールを開き、[ファイルシステムリスト] に移動し、ファイルシステムをクリックして、[基本情報] ページでそのバージョンを確認します。バージョンは 2.3.0 以降である必要があります。バージョンがそれより前の場合は、新しいファイルシステムを作成します。
クラスターと同じ VPC と vSwitch を使用します。
既存のプロトコルサービスがある場合は、クラスターと同じ VPC にあることを確認します。そうでない場合は、新しいサービスを作成します。
プロトコルサービスのマウントアドレスを取得します。 「[プロトコルサービス]」ページで、「[エクスポートディレクトリ]」をクリックします。 「[マウントアドレス]」列からアドレスをコピーします。 このアドレスは、マウントポイントのドメイン名とエクスポートされたディレクトリパスを組み合わせたもので、例:
cpfs-****.<region-id>.cpfs.aliyuncs.com:/shareです。
ステップ 2: PV と PVC の作成
永続ボリューム (PV) は、プロビジョニングした CPFS ストレージを表します。永続ボリューム要求 (PVC) はその PV にバインドされ、Pod がそれを使用できるようにします。
PV と PVC を作成します。
次のコンテンツを
cpfs-pv-pvc.yamlとして保存します。apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-pv labels: alicloud-pvname: cpfs-pv # PVC セレクターがこの PV にバインドするために使用するラベル spec: accessModes: - ReadWriteMany # 複数のノードが同時に読み書きすることを許可します capacity: storage: 20Gi csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: cpfs-nfs # NFS プロトコル経由でマウント path: "/share" # エクスポートされたディレクトリパス。サブディレクトリにすることもできます。例: /share/dir volumeAs: subpath # サブディレクトリタイプの PV を作成します server: "cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com" # マウントアドレスからのドメイン名 volumeHandle: cpfs-pv # 上記の PV 名と一致する必要があります mountOptions: - rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport - vers=3 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi # PV 容量を超えてはなりません selector: matchLabels: alicloud-pvname: cpfs-pv # このラベルを持つ PV にバインドしますPV パラメーター
パラメーター 説明 必須 デフォルト labelsPVC セレクターがこの PV に一致させてバインドするために使用するラベル。
はい
—
accessModesPV のアクセスモード。
はい
—
capacity.storageボリュームのストレージ容量。
はい
—
csi.driverCSI ドライバータイプ。
nasplugin.csi.alibabacloud.comに設定します。はい
—
csi.volumeAttributes.mountProtocolマウントプロトコル。NFS 経由でマウントするために
cpfs-nfsに設定します。はい
—
csi.volumeAttributes.pathCPFS プロトコルサービスのエクスポートされたディレクトリ。例:
/share。サブディレクトリにすることもできます。例:/share/dir。はい
—
csi.volumeAttributes.volumeAsPV タイプ。サブディレクトリタイプの PV の場合は
subpathに設定します。はい
—
csi.volumeAttributes.serverCPFS プロトコルサービスのマウントアドレスからのドメイン名。
はい
—
csi.volumeHandleボリュームの一意の識別子。PV 名と一致する必要があります。
はい
—
PVC パラメーター
パラメーター 説明 必須 デフォルト accessModesPVC が PV に要求するアクセスモード。
はい
—
selector.matchLabels特定の PV にバインドするために使用されるラベルセレクター。
はい
—
resources.requests.storagePod によって要求されるストレージ容量。PV 容量を超えてはなりません。
はい
—
マニフェストを適用します。
kubectl apply -f cpfs-pv-pvc.yaml
PVC が PV にバインドされていることを確認します。
kubectl get pvc cpfs-pvc出力は
STATUS: Boundを表示するはずです。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-pvc Bound cpfs-pv 20Gi RWO <unset> 18m
ステップ 3: アプリケーションのデプロイとマウントの確認
CPFS ボリュームを使用する StatefulSet を作成します。
次のコンテンツを
cpfs-test.yamlとして保存します。apiVersion: apps/v1 kind: StatefulSet metadata: name: cpfs-sts spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 1 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マニフェストを適用します。
kubectl apply -f cpfs-test.yaml
CPFS ボリュームがマウントされていることを確認します。
kubectl exec cpfs-sts-0 -- mount | grep /data正常なマウントでは、
/dataにvers=3を含む NFS エントリが表示されます: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)