文件存储CPFS是阿里云推出的全托管、可扩展并行文件系统,满足高性能计算场景的需求。CPFS支持成百上千的机器同时访问,拥有数十GB的吞吐量、数百万的IOPS能力,同时还能保证亚毫秒级的延时。本文介绍如何在ACS中挂载CPFS存储卷,并验证CPFS的共享存储和持久化存储。
背景信息
CPFS包含智算版和通用版两种版本。更多信息,请参见CPFS产品概述。
CPFS智算版目前处于邀测中。更多信息,请参见CPFS智算版。
前提条件
ACS集群中已安装managed-csiprovisioner组件。
您可以在ACS集群管理页的左侧导航栏选择
,在存储页签下查看managed-csiprovisioner组件的安装情况。使用限制
不同计算类型的ACS Pod与不同规格的CPFS的支持情况如下表所示。
CPU
GPU
GPU-HPN
CPFS通用版
支持
支持
支持
CPFS智算版
支持(VPC挂载点)
暂不支持
支持
仅部分地域和可用区支持创建CPFS智算版文件系统,具体请参见CPFS智算版。
注意事项
CPFS为共享存储。一个CPFS存储卷可以挂载到多个Pod上。
CPFS智算版采用按量计费,具体请参见CPFS智算版。
创建CPFS文件系统
CPFS通用版
CPFS智算版
CPFS智算版目前处于邀测中,您需要提交工单申请添加CPFS智算版服务使用白名单后,才能创建CPFS智算版文件系统。更多信息,请参见创建CPFS智算版文件系统。
(可选)如果您需要在CPU计算类型Pod中挂载CPFS智算版,需要对应ACS集群的VPC和交换机创建VPC挂载点,记录下挂载点域名,例如
cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com
。更多信息,请参见管理VPC挂载点。说明对于GPU-HPN计算类型Pod,不需要创建VPC挂载点。
挂载CPFS存储卷
步骤一:创建PV
连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群或在CloudShell上通过kubectl管理Kubernetes集群。
将以下YAML内容保存为pv.yaml。
CPFS通用版
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: cpfs-nfs server: cpfs-***-***.cn-wulanchabu.cpfs.aliyuncs.com path: /share volumeHandle: cpfs-*****
相关参数说明如下:
参数
说明
labels
设置
alicloud-pvname: cpfs-test
label用于PVC使用selector
进行匹配绑定。accessModes
访问模式。
capacity
声明存储卷容量。
csi.driver
驱动类型,设置为
nasplugin.csi.alibabacloud.com
。csi.volumeAttributes
mountProtocol
设置为cpfs-nfs
。server
设置为CPFS通用版协议服务导出目录的挂载点域名,例如cpfs-***-***.cn-wulanchabu.cpfs.aliyuncs.com
。path
设置为CPFS通用版协议服务导出目录对应路径,例如/share
。支持设置为子目录,例如/share/dir
。
csi.volumeHandle
设置为CPFS通用版文件系统ID。
CPFS智算版
仅支持GPU-HPN计算类型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-*****
相关参数说明如下:
参数
说明
labels
设置
alicloud-pvname: cpfs-test
label用于PVC使用selector
进行匹配绑定。accessModes
访问模式。
capacity
声明存储卷容量。
csi.driver
驱动类型,设置为
povplugin.csi.alibabacloud.com
。csi.volumeAttributes
filesystemId
CPFS智算版文件系统ID,例如bmcpfs-*****
。path
默认为/
表示挂载CPFS文件系统的根目录,支持设置为子目录,如/dir
。如果子目录不存在,会在挂载时被自动创建。
csi.volumeHandle
设置为CPFS智算版文件系统ID。
CPFS智算版(VPC挂载点)
仅支持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-*****
相关参数说明如下:
参数
说明
labels
设置
alicloud-pvname: cpfs-test
label用于PVC使用selector
进行匹配绑定。accessModes
访问模式。
capacity
声明存储卷容量。
csi.driver
驱动类型,设置为
povplugin.csi.alibabacloud.com
。csi.volumeAttributes
mountProtocol
设置为efc
。server
CPFS智算版VPC挂载点域名,例如cpfs-***-vpc-***.cn-wulanchabu.cpfs.aliyuncs.com
。path
默认为/
表示挂载CPFS文件系统的根目录,支持设置为子目录,如/dir
。
csi.volumeHandle
设置为CPFS智算版文件系统ID。
创建PV。
kubectl create -f pv.yaml
步骤二:创建PVC
将以下YAML内容保存为pvc.yaml。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-test spec: accessModes: - ReadWriteMany selector: matchLabels: alicloud-pvname: cpfs-test resources: requests: storage: 10Ti
相关参数说明如下:
参数
说明
accessModes
访问模式。
selector
使用PV上的label进行匹配绑定。
resources.requests
容量不大于PV容量即可。
创建PVC。
kubectl create -f pvc.yaml
检查PVC完成绑定。
kubectl get pvc cpfs-test
返回示例如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-test Bound cpfs-test 10Ti RWX <unset> <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: 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
验证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