1. 前言
CPFS(Cloud Paralleled File System)是一种并行文件系统。CPFS 的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高 IOPS、高吞吐、低时延的数据存储服务。
阿里云Kubernetes CSI支持静态存储卷挂载
和动态存储卷挂载
2种方式挂载CPFS存储卷, 在静态存储卷挂载
的方式中,通常需要手动编辑和创建一个pv/pvc进行挂载,当需要的pv/pvc数量很大的时候,手动创建就显得非常繁琐了,这时动态存储卷挂载
的功能可以满足您的需求。本文演示如何在ACK集群中使用alibaba-cloud-csi-driver挂载CPFS存储卷。
2. 部署csi-cpfs组件
如果您需要挂载cpfs存储卷,首先需要按照以下步骤在ACK集群中部署cpfs-provisioner
和 cpfs-plugin
:
2.1 部署cpfs-provisioner
:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/cpfs/cpfs-provisioner.yaml
2.2 部署cpfs-plugin
:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/cpfs/cpfs-plugin.yaml
2.3 检查运行状态
$ kubectl -nkube-system get po |grep cpfs
csi-cpfs-provisioner-0 1/1 Running
csi-cpfsplugin-g2czx 2/2 Running
csi-cpfsplugin-l6zp8 2/2 Running
csi-cpfsplugin-nwt2j 2/2 Running
csi-cpfsplugin-skjds 2/2 Running
csi-cpfsplugin-sp9mb 2/2 Running
csi-cpfsplugin-tmjm5 2/2 Running
3. 使用CPFS动态存储卷
目前阿里云Kubernetes CSI支持subpath
类型的CPFS动态存储卷挂载方式。
当你的多个Kubernetes应用或者Pod需要挂载相同的CPFS存储卷共享数据时,或不同的Pod挂载相同CPFS文件系统的不同子目录时, 可以使用subpath
类型的CPFS动态存储卷方式。csi会自动在CPFS文件系统的根目录下创建以该应用PV name为名的子目录,并挂载到应用的pod中。
3.1 创建CPFS文件系统
用户首先使用NAS控制台 创建好CPFS文件系统。
文件系统:
查看文件系统详情并获取 挂载点
信息:
3.2 创建StoragClass
编辑storageclass.yaml
文件, 详细参数说明见:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/cpfs-dynamic.md
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-cpfs
parameters:
volumeAs: subpath
server: "xxxxxx@tcp:xxxxxx@tcp:/xxxxxx"
archiveOnDelete: "false"
provisioner: cpfsplugin.csi.alibabacloud.com
reclaimPolicy: Delete
替换sever
参数的值为挂载点路径信息并运行以下命令创建StorageClass alicloud-cpfs
$ kubectl create -f storageclass.yaml
storageclass.storage.k8s.io/alicloud-cpfs created
3.3 创建PV/PVC和Pod挂载cpfs存储卷
示例应用编排文件deploy.yaml
如下所示:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cpfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: alicloud-cpfs
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-cpfs
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: cpfs-pvc
mountPath: "/data"
volumes:
- name: cpfs-pvc
persistentVolumeClaim:
claimName: cpfs-pvc
创建pvc和deployment:
$ kubectl create -f deploy.yaml
$ kubectl get po
NAME READY STATUS RESTARTS AGE
deployment-cpfs-7f6977f9f6-s8wdx 1/1 Running 0 25s
至此,我们成功在cpfs文件系统中创建子目录并挂载到应用deployment-cpfs
。
如果你需要为不同的Pod挂载同一个CPFS文件系统的不同子目录, 则只需分别创建cpfs-pvc-01
和 cpfs-pvc-02
以及其对应应用编排。
4. 使用CPFS静态存储卷
与CPFS动态存储卷
不同的是, CPFS静态存储卷
需要手动编排PV资源,并且可自定义subpath
路径,编排文件示例如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: cpfs-csi-pv
labels:
alicloud-pvname: cpfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: cpfsplugin.csi.alibabacloud.com
volumeHandle: cpfs-csi-pv
volumeAttributes:
server: "xxxxxx@tcp:xxxxxx@tcp"
fileSystem: "xxxxxx"
subPath: "/k8s"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cpfs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: cpfs-pv
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-cpfs
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: cpfs-pvc
mountPath: "/data"
volumes:
- name: cpfs-pvc
persistentVolumeClaim:
claimName: cpfs-pvc