本文介紹如何在容器計算服務中靜態掛載CPFS智算版檔案系統,並驗證CPFS的共用儲存和持久化儲存。
背景資訊
ACS的容器儲存功能基於Kubernetes容器儲存介面(CSI),融合雲端硬碟、NAS、OSS等阿里雲儲存服務,併兼容Kubernetes原生的EmptyDir、ConfigMap等儲存。對於AIGC、自動駕駛等智算情境,建議選擇CPFS智算版作為持久化儲存卷。
CPFS智算版是阿里雲面向AI服務推出的全新升級儲存系統。通過創新的分布式並行儲存架構設計,自研的高效能RoCE RDMA網路通訊協定和虛擬儲存通道技術,以及多級緩衝彈性用戶端,實現高吞吐、低延遲、Serverless化的高效能儲存能力。
前提條件
已建立CPFS智算版檔案系統。具體操作,請參見建立檔案系統。
(可選)已建立VPC掛載點。
說明在CPU類型的Pod中掛載CPFS智算版需要建立VPC掛載點。
在GPU類型的Pod中掛載CPFS智算版不需要建立VPC掛載點。
ACS叢集中已安裝csi-provisioner組件。
說明您可以在ACS叢集管理頁的左側導覽列單擊組件管理,然後在儲存頁簽下確認csi-provisioner組件的安裝情況。
注意事項
CPFS為共用儲存。一個CPFS儲存卷可以掛載到多個Pod上。
CPFS智算版可以掛載到任意CPU類型的ACS Pod,但僅支援在部分GPU型號的ACS Pod上掛載。具體請提交工單諮詢。
通過靈駿GPU掛載 CPFS 智算版時,請確保 CPFS 智算版的可用性區域(AZ)和叢集編號與所使用的靈駿 GPU 保持一致。
靜態掛載CPFS儲存卷
步驟一:建立PV和PVC
kubectl
將以下YAML內容儲存為cpfs-pv-pvc.yaml。
請根據要掛載的Pod的計算類型,選擇對應的YAML。
掛載到GPU Pod
重要僅支援掛載到部分GPU型號的Pod。具體請提交工單諮詢。
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test spec: accessModes: - ReadWriteMany capacity: storage: 10Ti csi: driver: povplugin.csi.alibabacloud.com volumeAttributes: filesystemId: bmcpfs-***** path: / volumeHandle: bmcpfs-***** --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test resources: requests: storage: 10TiPV參數
參數
說明
labels設定Label,以便PVC使用
selector進行匹配綁定。accessModesPV的訪問模式。
capacity.storage聲明儲存卷容量。
csi.driver驅動類型,設定為
povplugin.csi.alibabacloud.com。csi.volumeAttributesCPFS儲存卷的屬性。
filesystemId:CPFS智算版檔案系統ID。path:預設為/表示掛載CPFS檔案系統的根目錄,支援設定為子目錄,如/dir。如果子目錄不存在,會在掛載時被自動建立。
csi.volumeHandleCPFS智算版檔案系統ID。
PVC參數
參數
說明
accessModesPVC請求PV的訪問模式。
selector使用PV上的Label進行匹配綁定。
resources.requests.storage分配給Pod的儲存容量。不大於PV容量即可。
掛載到CPU Pod
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test spec: accessModes: - ReadWriteMany capacity: storage: 10Ti csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: efc server: cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com path: / volumeHandle: bmcpfs-***** --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test resources: requests: storage: 10TiPV參數
參數
說明
labels設定Label,以便PVC使用
selector進行匹配綁定。accessModes訪問模式。
capacity.storage聲明儲存卷容量。
csi.driver驅動類型,設定為
povplugin.csi.alibabacloud.com。csi.volumeAttributesCPFS儲存卷的屬性。
mountProtocol:掛載協議,設定為efc。server:CPFS檔案系統的VPC掛載點網域名稱。path:預設為/表示掛載CPFS檔案系統的根目錄,支援設定為子目錄,如/dir。
csi.volumeHandleCPFS智算版檔案系統ID。
PVC參數
參數
說明
accessModesPVC請求PV的訪問模式。
selector使用PV上的Label進行匹配綁定。
resources.requests.storage分配給Pod的儲存容量。不大於PV容量即可。
建立PV和PVC。
kubectl create -f cpfs-pv-pvc.yaml確認PVC已綁定PV。
kubectl get pvc cpfs-test返回樣本如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <unset> 10s
控制台
登入容器計算服務控制台。
在叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。
在叢集管理頁面的左側導覽列,選擇。
在儲存聲明頁面,單擊建立。
在彈出的對話方塊中,完成參數配置,然後單擊建立。
以下為建立PVC的同時建立PV的參數說明,您也可以單獨建立PV再建立PVC。
說明控制台操作時,暫不支援通過VPC掛載點的方式為CPU應用掛載CPFS智算版。
參數
說明
樣本
儲存宣告類型
選擇CPFS。
CPFS
名稱
PVC名稱,自訂輸入。格式要求請參考介面提示。
cpfs-test
分配模式
根據需要選擇已有儲存卷和建立儲存卷。
建立儲存卷
CPFS類型
選擇CPFS智算版。
CPFS智算版
訪問模式
支援ReadWriteMany和ReadWriteOnce。
ReadWriteMany
檔案系統ID
配置要掛載的CPFS智算版檔案系統ID。
bmcpfs-0115******13q5
查看建立的PVC和PVC。
在儲存聲明頁面和儲存卷頁面,可以看到新建立的PVC和PV,確認兩者已綁定。
步驟二:建立應用並掛載CPFS
kubectl
使用以下YAML內容,建立cpfs-test.yaml檔案。
GPU應用
以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過
alibabacloud.com/compute-class: gpu標籤聲明要使用GPU型算力,並且通過名為cpfs-test的PVC申請儲存資源,掛載路徑均為/data。說明關於GPU卡具體型號,請參見為ACS GPU Pod指定GPU型號和驅動版本。
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 # 指定計算類型為GPU型 alibabacloud.com/compute-class: gpu # 指定GPU型號,請按實際情況填寫,如T4 alibabacloud.com/gpu-model-series: T4 alibabacloud.com/compute-qos: default 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: cpfs-testCPU應用
以下YAML樣本可以建立包含2個Pod的Deployment,通過名為
cpfs-test的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 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: cpfs-test建立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
控制台
在叢集管理頁面的左側導覽列,選擇。
在無狀態頁面,單擊使用鏡像建立。
完成Deployment的參數配置,單擊建立。
需要注意的參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
GPU應用
配置頁
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
cpfs-test
副本數量
配置Deployment的副本數量。
2
執行個體類型
選擇Pod的計算類型。
說明關於GPU卡具體型號,請參見為ACS GPU Pod指定GPU型號和驅動版本。
GPU,T4
容器配置
鏡像名稱
輸入用於部署應用的鏡像地址。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
所需資源
設定所需的GPU、vCPU和記憶體資源。
GPU:1
CPU:2 vCPU
記憶體:2 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入CPFS檔案系統要掛載到的容器路徑。
掛載源:pvc-cpfs
容器路徑:/data
CPU應用
配置頁
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
cpfs-test
副本數量
配置Deployment的副本數量。
2
執行個體類型
選擇Pod的計算類型。
CPU,通用型
容器配置
鏡像名稱
輸入用於部署應用的鏡像地址。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
所需資源
設定所需的vCPU和記憶體資源。
CPU:0.25 vCPU
記憶體:0.5 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入CPFS檔案系統要掛載到的容器路徑。
掛載源:pvc-cpfs
容器路徑:/data
查看應用部署情況。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
驗證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