本文介紹如何在容器計算服務(ACS)中掛載CPFS智算版檔案系統,支援多個Pod同時掛載實現資料共用。
前提條件
已建立CPFS智算版檔案系統。具體操作,請參見建立檔案系統。
ACS叢集中已安裝csi-provisioner組件。
說明您可以在ACS叢集管理頁的左側導覽列單擊組件管理,然後在儲存頁簽下確認csi-provisioner組件的安裝情況。
步驟一:確定掛載方式
根據您的計算資源類型,確定網路方式並完成前置準備:
您的資源 | 對應網路 | 前置準備 |
GPU Pod(支援RDMA:GU8TF、GU8TEF、L20X、P16EN等) | RDMA | 確保CPFS智算版的可用性區域(AZ)和叢集編號與所使用的靈駿GPU保持一致 |
GPU Pod(不支援RDMA:L20、G49E、T4、A10、G59等) | VPC | |
CPU Pod | VPC |
如不確定您的GPU類型,請參見ACS支援的GPU卡型。
步驟二:建立PV和PVC
CPFS智算版採用靜態掛載方式,需手動建立PV和PVC:
PV(PersistentVolume):持久卷,定義CPFS的串連資訊(檔案系統ID、網路類型、掛載路徑等)
PVC(PersistentVolumeClaim):持久卷聲明,Pod通過引用PVC使用儲存,實現儲存與應用的解耦
根據您的操作習慣選擇命令列或控制台方式。
kubectl命令列
根據步驟一確定的網路類型,選擇對應配置。
RDMA網路
適用於靈駿GPU(GU8TF、GU8TEF、L20X、P16EN等)。
建立
cpfs-pv-pvc.yaml檔案,定義PV和PVC:apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test spec: accessModes: - ReadWriteMany capacity: storage: 10Ti csi: driver: bmcpfsplugin.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: 10Ti參數說明:
PV參數
參數
說明
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容量即可。
執行建立命令:
kubectl create -f cpfs-pv-pvc.yaml確認PVC已綁定PV。
kubectl get pvc cpfs-test返回樣本如下(STATUS顯示Bound表示成功):
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <unset> 10s
VPC網路
適用於CPU Pod,以及普通GPU(T4、A10等)。
建立
cpfs-pv-pvc.yaml檔案,定義PV和PVC:apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-test labels: alicloud-pvname: cpfs-test # [PV標籤] PVC通過此綁定 spec: accessModes: - ReadWriteMany capacity: storage: 10Ti csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: efc server: cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com # 替換為VPC掛載點網域名稱 path: / volumeHandle: bmcpfs-***** # 替換為您的CPFS智算版檔案系統ID --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test # [PVC名稱] Deployment通過此引用 spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test # [PVC選取器] 需與PV標籤一致 resources: requests: storage: 10Ti參數說明:
PV參數
參數
說明
labels設定Label,以便PVC使用
selector進行匹配綁定。accessModes訪問模式。
capacity.storage聲明儲存卷容量。
csi.driver驅動類型,設定為
nasplugin.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容量即可。
執行建立命令:
kubectl create -f cpfs-pv-pvc.yaml確認PVC已綁定PV。
kubectl get pvc cpfs-test返回樣本如下(STATUS顯示Bound表示成功):
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <unset> 10s
控制台
控制台方式僅支援RDMA網路掛載GPU應用,VPC網路請使用kubectl方式。
登入容器計算服務控制台。
在叢集列表頁面,單擊目的地組群名稱,進入該叢集的管理頁面。
在左側導覽列選擇,單擊建立,完成以下配置:
參數
說明
樣本
儲存宣告類型
選擇CPFS。
CPFS
名稱
PVC名稱,自訂輸入。格式要求請參考介面提示。
cpfs-pvc
分配模式
根據需要選擇已有儲存卷和建立儲存卷。
建立儲存卷
CPFS類型
選擇CPFS智算版。
CPFS智算版
訪問模式
支援ReadWriteMany和ReadWriteOnce。
ReadWriteMany
檔案系統ID
配置要掛載的CPFS智算版檔案系統ID。
bmcpfs-0115******13q5
查看建立的PV和PVC。
在儲存聲明頁面和儲存卷頁面,可以看到新建立的PV和PVC,確認兩者已綁定。
步驟三:建立應用並掛載CPFS
建立Deployment應用,通過引用PVC將儲存掛載到容器指定目錄。根據您的操作習慣選擇命令列或控制台方式。
kubectl方式
根據您的應用類型選擇對應的配置。
GPU應用
適用於靈駿GPU(GU8TF等)和普通GPU(T4、A10等)。
建立
cpfs-test.yaml檔案,定義Deployment並引用PVC:以下YAML樣本可以建立包含2個Pod的Deployment,2個Pod均通過
alibabacloud.com/compute-class: gpu標籤聲明要使用GPU型算力,並且通過名為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 # 指定計算類型為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-test # [Deployment] 需與PVC名稱一致建立應用:
kubectl create -f cpfs-test.yaml確認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
CPU應用
建立cpfs-test.yaml檔案。
以下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] 需與PVC名稱一致建立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)。
步驟四:驗證掛載結果
按照上文樣本建立的Deployment中含有2個Pod,2個Pod同時掛載了同一CPFS檔案系統。您可以通過以下方式進行驗證:
重建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