CPFS(Cloud Paralleled File System)是一种并行文件系统。CPFS的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高IOPS、高吞吐、低时延的数据存储服务。本文介绍如何在ACK集群中挂载及使用CPFS2.0静态存储卷。
前提条件
csi-plugin和csi-provisioner组件版本不低于v1.22.11-abbb810e-aliyun。关于升级CSI-Plugin和CSI-Provisioner组件的操作,请参见升级csi-plugin和csi-provisioner。
已创建CPFS文件系统,且CPFS版本号不低于2.3.0,最大容量不低于3600 GiB。具体操作,请参见创建文件系统和扩容文件系统。
已通过kubectl工具连接Kubernetes集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
步骤一:创建协议服务并获取挂载地址
您需要先创建CPFS文件系统对应的协议服务,并获取协议服务的挂载地址方便后续在ACK集群中挂载使用。
登录NAS控制台,选择 。
在文件系统列表页面,单击目标文件系统名称。
在文件系统详情页面,确认CPFS的版本号大于等于2.3.0,最大容量大于等于3600 GiB,然后单击协议服务。
在协议服务页面,单击创建协议服务,配置如下参数,然后单击确定。
参数
说明
协议服务配置
选择协议服务规格,默认为通用型。
说明文件系统容量大于3600 GiB才能创建通用型协议服务。
通用型协议服务的带宽与CPFS文件系统的带宽一致,不提供数据缓存,不产生费用。
协议类型
NFSv3协议。
VPC网络
协议集群使用的VPC网络,与CPFS文件系统使用的VPC网络相同,不可修改。
交换机
选择协议集群使用的vSwitch网络,默认为CPFS文件系统使用的vSwitch,可配置为该VPC内的其他vSwitch。
说明单个协议服务最多消耗vSwitch上32个IP地址,请确保该vSwitch IP资源充足。
协议导出
指定CPFS文件系统中通过协议服务导出的Fileset或者目录。推荐使用Fileset导出,具备更强的功能,例如文件数量管理、数据流动。
说明指定导出的Fileset或目录必须已存在。若Fileset不存在,请先创建Fileset。具体操作,请参见创建Fileset。
使用目录导出时,目录格式如下:
长度为1~1024个字符。
使用UTF-8编码。
必须以正斜线(/)开头和结尾,导出根目录为
/
。
导出VPC网络
选择与ECS实例相同的VPC。该VPC内的ECS可通过协议服务访问CPFS文件系统。
导出交换机
选择与ECS实例相同的交换机,协议集群通过该vSwitch将协议服务导出到指定的导出VPC。
说明单个协议服务最多消耗vSwitch上32个IP地址,请确保该vSwitch IP资源充足。
权限组
仅支持VPC默认权限组。
在协议服务页面,单击目标协议服务右侧操作列下的导出目录,然后在弹出的对话框中复制对应的挂载地址并保存,挂载地址包含挂载点域名以及挂载目录,如果指定导出的是
/
目录,则挂载地址显示为cpfs-****.regionID.cpfs.aliyuncs.com:/share
。
步骤二:在ACK集群中使用CPFS2.0静态卷
执行以下命令,配置ConfigMap信息,开启挂载CPFS2.0时使用的NFS协议。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cpfs-nas-enable: "true" #使用CPFS2.0挂载时,使用NFS协议。 EOF
执行以下命令,重启csi-plugin,安装相关依赖。
此操作不影响业务正常运行。
kubectl -n kube-system rollout restart daemonset csi-plugin
预期输出:
daemonset.apps/csi-plugin restarted
执行以下命令,创建PV和PVC。
cat << EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: cpfs-pv labels: alicloud-pvname: cpfs-pv spec: accessModes: - ReadWriteOnce capacity: storage: 20Gi csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: mountProtocol: cpfs-nfs # 使用NFS协议进行挂载。 path: "/share" # 挂载地址中的目录。 volumeAs: subpath server: "cpfs-****.regionID.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: - ReadWriteOnce resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: cpfs-pv EOF
执行以下命令,创建StatefulSet工作负载并使用CPFS2.0静态卷。
cat << EOF | kubectl apply -f - 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: nginx volumeMounts: - name: cpfs-pvc mountPath: /data volumes: - name: cpfs-pvc persistentVolumeClaim: claimName: cpfs-pvc EOF
执行以下命令,验证CPFS2.0静态卷是否挂载成功。
kubectl exec cpfs-sts-0 -- mount | grep /data
预期输出:
cpfs-****.regionID.cpfs.aliyuncs.com:/share/nas-885ae9e7-9b0e-4f8f-a9ee-6a1bcf1ddb57 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)
有预期输出结果,说明CPFS2.0静态卷挂载成功。