CPFS是一种并行文件系统,具有高吞吐和高IOPS,能够满足HPC高性能计算场景的需求,如AI训练、自动驾驶、基因计算、影视渲染等业务。本文介绍如何创建CPFS通用版静态存储卷,并在工作负载中挂载。
前提条件
csi-plugin和csi-provisioner组件版本不低于v1.22.11-abbb810e-aliyun。如需升级,请参见升级csi-plugin和csi-provisioner。
使用限制
仅支持部分地域,请参见CPFS通用版开服地域。
仅支持通过NFS协议挂载,不支持通过POSIX协议挂载。
仅支持挂载到x86架构的节点上。
不支持跨VPC挂载,仅支持挂载到同一VPC的集群中。
不支持挂载到操作系统为ContainerOS的节点上。
配置存储组件
请根据csi-plugin组件的版本,选择配置方式。
csi-plugin版本为1.33及以上
安装cnfs-nas-daemon组件,并配置csi-plugin开启
AlinasMountProxy=true
FeatureGate,使得CSI后续调用cnfs-nas-daemon进行挂载。具体操作,请参见管理cnfs-nas-daemon组件。csi-plugin版本小于1.33
配置ConfigMap,开启挂载CPFS通用版时使用的NFS协议。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cpfs-nas-enable: "true" # 使用CPFS通用版挂载时,使用NFS协议。 EOF
重启csi-plugin,安装相关依赖。
此操作不影响业务正常运行。
kubectl -n kube-system rollout restart daemonset csi-plugin
预期输出:
daemonset.apps/csi-plugin restarted
步骤一:创建CPFS文件系统和协议服务
CPFS仅支持静态挂载。您需要先创建CPFS文件系统以及对应的协议服务,并获取挂载地址以便后续挂载使用。
请在集群所属地域创建CPFS文件系统。
如果使用已有CPFS文件系统,请在NAS控制台的文件系统列表页面单击目标CPFS文件系统,在基本信息页面确认CPFS版本号为2.3.0及以上。如果不满足,请创建新的CPFS文件系统。
请使用集群对应的VPC和交换机创建协议服务,并生成挂载点。
如果使用已有协议服务,请确认协议服务所使用的VPC是否与集群一致(CPFS不支持跨VPC挂载)。如果不满足,请重新创建协议服务。
获取协议服务的挂载地址。
在协议服务页面,单击导出目录,然后在挂载地址列复制并保存挂载地址。挂载地址包含挂载点域名以及挂载目录,如果指定导出的是
/
目录,则挂载地址显示为cpfs-****.<Region ID>.cpfs.aliyuncs.com:/share
。
步骤二:创建PV和PVC
基于已有的CPFS文件系统,创建对应的PV和PVC。
将以下内容保存为cpfs-pv-pvc.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-pv labels: alicloud-pvname: cpfs-pv spec: accessModes: - ReadWriteMany capacity: storage: 20Gi csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: cpfs-nfs # 使用NFS协议进行挂载。 path: "/share" # 挂载地址中的目录。 volumeAs: subpath # 子目录。 server: "cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com" # 挂载地址中的域名 volumeHandle: cpfs-pv # 必须与PV Name保持一致。 mountOptions: - rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport - vers=3 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cpfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: cpfs-pv
PV参数
参数
说明
labels
设置Label,以便PVC使用
selector
进行匹配绑定。accessModes
PV的访问模式。
capacity.storage
声明存储卷容量。
csi.driver
驱动类型,设置为
nasplugin.csi.alibabacloud.com
。csi.volumeAttributes
CPFS存储卷的属性。
mountProtocol
:设置为cpfs-nfs
,表示使用NFS协议挂载CPFS。path
:设置为CPFS通用版协议服务导出目录对应路径,例如/share
。支持设置为子目录,例如/share/dir
。volumeAs
:设置为subpath
,表示创建子目录类型的PV。server
:设置为CPFS通用版协议服务导出目录的挂载地址的域名。
csi.volumeHandle
必须与PV Name保持一致。
PVC参数
参数
说明
accessModes
PVC请求PV的访问模式。
selector
使用PV上的Label进行匹配绑定。
resources.requests.storage
分配给Pod的存储容量。不大于PV容量即可。
创建PV和PVC。
kubectl apply -f cpfs-pv-pvc.yaml
确认PVC已绑定PV。
kubectl get pvc cpfs-pvc
返回示例如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE cpfs-pvc Bound cpfs-pv 20Gi RWO <unset> 18m
步骤三:创建应用并挂载CPFS
创建StatefulSet并挂载CPFS通用版静态卷。
将以下内容保存为cpfs-test.yaml。
apiVersion: apps/v1 kind: StatefulSet metadata: name: cpfs-sts spec: selector: matchLabels: app: nginx serviceName: "nginx" replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: cpfs-pvc mountPath: /data volumes: - name: cpfs-pvc persistentVolumeClaim: claimName: cpfs-pvc
创建StatefulSet。
kubectl apply -f cpfs-test.yaml
确认CPFS通用版静态卷是否挂载成功。
kubectl exec cpfs-sts-0 -- mount | grep /data
预期输出如下,说明CPFS通用版静态卷挂载成功。
cpfs-******-******.cn-shanghai.cpfs.aliyuncs.com:/share on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,port=30000,timeo=600,retrans=2,sec=sys,mountaddr=127.0.1.255,mountvers=3,mountport=30000,mountproto=tcp,local_lock=all,addr=127.0.1.255)