天天看点

阿里云Kubernetes CSI实践—CPFS存储卷使用

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文件系统。

文件系统:

阿里云Kubernetes CSI实践—CPFS存储卷使用

查看文件系统详情并获取

挂载点

信息:

阿里云Kubernetes CSI实践—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           

5. 参考文档

CPFS CSI Plugin 文件存储CPFS

继续阅读