CPFS智算版具有高輸送量和IOPS效能,支援端到端RDMA網路加速,適用於AIGC、自動駕駛等智算情境。ACK支援將CPFS智算版檔案系統以靜態儲存卷(PV)的形式掛載給工作負載使用。
CPFS智算版目前處於邀測中,僅部分地區和可用性區域支援。如需使用,請聯絡客戶經理申請。
功能介紹
基於CSI組件,ACK支援以PV/PVC的方式為工作負載掛載CPFS智算版靜態儲存卷。CSI會根據Pod最終調度的節點類型,自動選擇最優的掛載方式:
VSC掛載:僅支援靈駿節點,需分別向 CPFS產品和靈駿產品諮詢提交工單開通白名單。
VPC掛載:支援非靈駿節點,通過建立VPC掛載點實現。同一VPC下的節點均可掛載訪問。
前提條件
已瞭解CPFS智算版的CPFS智算版使用限制。
叢集滿足以下條件:
叢集版本:1.26及以上版本。如需升級叢集,請參見手動升級叢集。
節點作業系統:Alibaba Cloud Linux 3。
已安裝以下儲存群組件,且版本滿足要求。
可在叢集的組件管理頁面,確認組件版本、安裝或升級組件。
CSI組件(csi-plugin和csi-provisioner):v1.33.1及以上版本。如需升級,請參見管理CSI組件。
cnfs-nas-daemon組件:0.1.2及以上版本。
bmcpfs-csi組件:包括bmcpfs-csi-controller(控制面組件,由ACK託管)和bmcpfs-csi-node(節點側組件,以DaemonSet形式部署在叢集中)。
注意事項
使用VSC掛載時,運行 Pod 的節點必須與 CPFS 智算版檔案系統執行個體處於同一 hpn-zone。
靈駿節點在初始化的時候必須與某一個 CPFS 智算版關聯,否則無法使用 CSI 進行掛載。
靈駿節點出現故障需要下線前,必須先執行Pod排水(drain)操作。否則,將導致叢集元資訊不一致,造成Pod資源殘留且無法被正常回收。
不支援在同一個Pod中通過多個PV掛載源於同一個CPFS執行個體的不同子目錄。由於底層驅動的限制,此類配置會導致Pod掛載失敗而無法啟動。
推薦僅為該CPFS執行個體建立一個PV/PVC,然後在Pod的
volumeMounts配置中使用subPath欄位來分別掛載所需的子目錄。subPath基於輕量級的bind mount機制實現,不會帶來額外效能開銷。
步驟一:建立CPFS檔案系統
參見建立CPFS智算版檔案系統建立CPFS檔案系統,並記錄檔案系統ID。
(可選)如需在非靈駿節點實現掛載,請建立VPC掛載點(與叢集節點所在的VPC一致),並記錄掛載點網域名稱。格式為
cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com。如果Pod將調度到靈駿節點,則預設使用VSC掛載,無需此步驟。
步驟二:建立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調度至非靈駿節點,或者開啟了跨域自動切換vpc能力,此項為必填,否則掛載會失敗 vpcMountTarget: cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com # 如果Pod調度到與當前 bmcpfs 所在的不同可用性區域的節點, 則自動使用 vpcMountTarget 掛載點訪問 cpfs 儲存 mountpointAutoSwitch: "true" # 將volumeHandle替換為CPFS智算版檔案系統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智算版時,固定為
bmcpfsplugin.csi.alibabacloud.com。csi.volumeAttributes.vpcMountTargetCPFS的VPC掛載點網域名稱。置空會導致在非靈駿節點上掛載失敗。
如果Pod調度至靈駿節點,則無需設定。
csi.volumeAttributes.mountpointAutoSwitch是否允許 bmcpfs 在 vsc 掛載點(預設建立&擷取)和 vpc 掛載點(需指定)之間自動切換
與
csi.volumeAttributes.vpcMountTarget綁定使用csi.volumeHandleCPFS檔案系統的ID。
mountOptions掛載參數。
PVC參數
參數
說明
accessModesPVC請求PV的訪問模式,需與PV匹配。
resources.requests.storage分配給Pod的儲存容量。不大於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綁定成功。
步驟三:建立應用並掛載CPFS
情境一:掛載整個CPFS檔案系統
此情境將整個CPFS檔案系統掛載到容器中。
使用以下YAML內容,建立
cpfs-test.yaml檔案,聲明掛載CPFS智算版靜態儲存卷。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: bmcpfs建立Deployment。
kubectl create -f cpfs-test.yaml查看Pod部署情況。
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智算版靜態儲存卷是否掛載成功。
kubectl exec -it <pod-name> -- mount | grep /data預期輸出如下,表明CPFS智算版靜態儲存卷掛載成功。
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)
情境二:掛載整個CPFS檔案系統的子目錄
在共用儲存情境中,如需實現多租戶或多任務的資料隔離,讓多個應用Pod 共用同一個 CPFS 卷,但又各自擁有獨立目錄時,可通過 volumeMounts.subPath 來實現。
參見以下內容,建立 pod.yaml。Pod包含兩個容器,分別通過
subPath掛載同一個PVC (bmcpfs) 的不同子目錄。當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.yaml驗證 task-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,兩個容器間的資料相互隔離。
total 4 -rw-r--r-- 1 root root 16 Aug 15 10:05 beta.log