ACS掛載CPFS智算版文件系統
本文介紹如何在容器計算服務中靜態掛載CPFS智算版文件系統,并驗證CPFS的共享存儲和持久化存儲。
背景信息
ACS的容器存儲功能基于Kubernetes容器存儲接口(CSI),融合云盤、NAS、OSS等阿里云存儲服務,并兼容Kubernetes原生的EmptyDir、ConfigMap等存儲。對于AIGC、自動駕駛等智算場景,建議選擇CPFS智算版作為持久化存儲卷。
CPFS智算版是阿里云面向AI服務推出的全新升級存儲系統。通過創新的分布式并行存儲架構設計,自研的高性能RoCE RDMA網絡協議和虛擬存儲通道技術,以及多級緩存彈性客戶端,實現高吞吐、低延遲、Serverless化的高性能存儲能力。
前提條件
已創建CPFS智算版文件系統。具體操作,請參見創建文件系統。
ACS集群中已安裝最新版本的managed-csiprovisioner組件。
說明您可以在ACS集群管理頁的左側導航欄選擇
,在存儲頁簽下查看managed-csiprovisioner組件的安裝情況。
使用限制
僅支持在高性能網絡GPU型工作負載中掛載CPFS智算版文件系統。
注意事項
CPFS為共享存儲。一個CPFS存儲卷可以掛載到多個Pod上。
靜態掛載CPFS存儲卷
步驟一:創建PV
連接集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群或在CloudShell上通過kubectl管理Kubernetes集群。
將以下YAML內容保存為pv.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: bmcpfs-gpu-hpn spec: accessModes: - ReadWriteMany capacity: storage: 10Ti claimRef: name: bmcpfs-gpu-hpn namespace: default csi: driver: povplugin.csi.alibabacloud.com volumeAttributes: filesystemId: bmcpfs-***** path: / volumeHandle: bmcpfs-***** persistentVolumeReclaimPolicy: Retain storageClassName: alibaba-cloud-cpfs-premium
相關參數說明如下:
參數
說明
accessModes
訪問模式。
capacity
聲明存儲卷容量。
claimRef
綁定的 PVC 的
namespace
和name
。csi.driver
驅動類型,必須設置為
povplugin.csi.alibabacloud.com
。csi.volumeAttributes
filesystemId
CPFS智算版文件系統ID,例如bmcpfs-*****
。path
默認為/
表示掛載CPFS文件系統的根目錄,支持設置為子目錄,如/dir
。如果子目錄不存在,會在掛載時被自動創建。
csi.volumeHandle
設置為CPFS智算版文件系統ID。
persistentVolumeReclaimPolicy
回收策略,必須設置為
Retain
。創建PV。
kubectl create -f pv.yaml
步驟二:創建PVC
將以下YAML內容保存為pvc.yaml。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bmcpfs-gpu-hpn spec: accessModes: - ReadWriteMany storageClassName: alibaba-cloud-cpfs-premium volumeName: bmcpfs-gpu-hpn resources: requests: storage: 10Ti
相關參數說明如下:
參數
說明
accessModes
訪問模式。
volumeName
設置為之前創建的PV名。
resources.requests
容量不大于PV容量即可。
創建PVC。
kubectl create -f pvc.yaml
檢查PVC完成綁定。
kubectl get pvc bmcpfs-gpu-hpn
返回示例如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE bmcpfs-gpu-hpn Bound bmcpfs-gpu-hpn 10Ti RWX alibaba-cloud-cpfs-premium <unset> 10s
步驟三:創建應用并掛載CPFS
使用以下YAML內容,創建cpfs-test.yaml文件。
以下YAML示例可以創建包含2個Pod的Deployment,2個Pod均通過
alibabacloud.com/compute-class: gpu-hpn
聲明要使用GPU型算力,并且通過名為cpfs-pvc
的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 alibabacloud.com/compute-class: gpu-hpn 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: bmcpfs-gpu-hpn
創建Deployment并掛載CPFS。
kubectl create -f cpfs-test.yaml
查看Deployment中Pod的部署情況。
kubectl get pod | grep cpfs-test
返回示例如下,已創建2個Pod。
cpfs-test-****-***a 1/1 Running 0 45s cpfs-test-****-***b 1/1 Running 0 45s
查看掛載路徑。
命令示例如下,預期會返回CPFS智算版文件系統掛載目錄下的數據。默認為空。
kubectl exec cpfs-test-****-***a -- ls /data
驗證CPFS的共享存儲和持久化存儲
按照上文示例創建的Deployment中含有2個Pod,2個Pod同時掛載了同一CPFS智算版文件系統。您可以通過以下方式進行驗證:
在一個Pod中創建文件,然后另一個Pod中查看文件,以此來驗證共享存儲。
重建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