您可以在阿里云容器服务Kubernetes版(ACK)中使用文件存储CPFS(Cloud Paralleled File System)。本文介绍如何在ACK中安装Flexvolume插件,并通过CPFS数据卷的方式为应用(Pod)提供CPFS服务。
前提条件
- 您已创建一个专有版Kubernetes集群,请参见创建Kubernetes托管版集群。
- 开放公网SSH访问,请参见SSH访问Kubernetes集群。
重要 ACK CPFS存储卷服务目前只支持CPFS 1.0版,不支持2.0版本。
背景信息
CPFS是一种并行文件系统。CPFS的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高IOPS、高吞吐、低时延的数据存储服务。CPFS是共享存储服务类型,适合于容器服务场景对资源共享、高性能的要求,在大数据、AI、基因计算等高性能场景中使用容器服务和CPFS是一个推荐的解决方案。有关CPFS详情,请参见什么是文件存储CPFS。
步骤一、部署插件
ACK中使用CPFS依赖以下两个驱动类组件:
- CPFS容器驱动:即为Flexvolume-cpfs插件,对Centos各个版本都兼容,部署Flexvolume-cpfs即可完成安装。
- CPFS客户端驱动:为CPFS挂载时的客户端(类似于nfs-client),驱动与操作系统内核是强依赖。容器场景中安装CPFS客户端驱动有以下方式:
- 手动安装驱动。请参见挂载文件系统。
- Flexvolume-cpfs部署时自动安装驱动,但只支持部分内核版本。 您可以通过在节点上执行命令
uname -a
查看内核版本。目前容器场景下您可以在以下内核版本中安装CPFS客户端驱动。3.10.0-957.5.1 3.10.0-957.21.3 3.10.0-1062.9.1
说明- 目前Flexvolume只支持安装CPFS Client驱动,不支持cpfs-client驱动升级,即发现节点安装了CPFS客户端,不再继续安装驱动。
- 升级Flexvolume版本,只会升级Flexvolume驱动(容器驱动),而不会升级cpfs-client版本。
- 在已经部署了cpfs-client、lustre驱动的节点上安装cpfs flexvolume不会再安装新版本的cpfs-client。
- cpfs-client驱动升级需要手动进行。具体操作,请参见挂载文件系统。
- 在集群节点中部署YAML模板。
- 在客户端计算机中获取集群KubeConfig并通过kubectl工具连接集群。
- 创建名为flexvolume-cpfs.yaml的文件,将以下内容拷贝至文件中。
apiVersion: apps/v1 kind: DaemonSet metadata: name: flexvolume-cpfs namespace: kube-system labels: k8s-volume: flexvolume-cpfs spec: selector: matchLabels: name: flexvolume-cpfs template: metadata: labels: name: flexvolume-cpfs spec: hostPID: true hostNetwork: true tolerations: - operator: "Exists" priorityClassName: system-node-critical affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet containers: - name: flexvolume-cpfs image: registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.14.8.96-0d85fd1-aliyun imagePullPolicy: Always securityContext: privileged: true env: - name: ACS_CPFS value: "true" - name: FIX_ISSUES value: "false" livenessProbe: exec: command: - sh - -c - ls /acs/flexvolume failureThreshold: 8 initialDelaySeconds: 15 periodSeconds: 60 successThreshold: 1 timeoutSeconds: 15 volumeMounts: - name: usrdir mountPath: /host/usr/ - name: etcdir mountPath: /host/etc/ - name: logdir mountPath: /var/log/alicloud/ - mountPath: /var/lib/kubelet mountPropagation: Bidirectional name: kubeletdir volumes: - name: usrdir hostPath: path: /usr/ - name: etcdir hostPath: path: /etc/ - name: logdir hostPath: path: /var/log/alicloud/ - hostPath: path: /var/lib/kubelet type: Directory name: kubeletdir updateStrategy: rollingUpdate: maxUnavailable: 10% type: RollingUpdate
- 执行以下命令部署上述YAML文件至集群节点中。
kubectl create -f flexvolume-cpfs.yaml
- 检查部署情况。
- 执行以下命令查看存储插件的部署情况。
kubectl get pod -nkube-system | grep flex
预期输出:
flexvolume-97psk 1/1 Running 0 27m flexvolume-cpfs-dgxfq 1/1 Running 0 98s flexvolume-cpfs-qpbcb 1/1 Running 0 98s flexvolume-cpfs-vlrf9 1/1 Running 0 98s flexvolume-cpfs-wklls 1/1 Running 0 98s flexvolume-cpfs-xtl9b 1/1 Running 0 98s flexvolume-j8zjr 1/1 Running 0 27m flexvolume-pcg4l 1/1 Running 0 27m flexvolume-tjxxn 1/1 Running 0 27m flexvolume-x7ljw 1/1 Running 0 27m
说明 以flexvolume-cpfs开头的Pod表示部署的CPFS存储卷插件。不含CPFS字样的flexvolume Pod表示集群默认部署的NAS、云盘、OSS存储卷插件。两个插件可以同时部署。 - 执行以下命令查看cpfs-client驱动是否安装完成。
rpm -qa | grep cpfs
预期输出:
kmod-cpfs-client-2.10.8-202.el7.x86_64 cpfs-client-2.10.8-202.el7.x86_64
- 执行以下命令查看mount.lustre是否安装完成。
which mount.lustre
预期输出:
/usr/sbin/mount.lustre
- 执行以下命令查看存储插件的部署情况。
步骤二、使用CPFS数据卷
在ACK中使用CPFS数据卷,需要您先到CPFS控制台创建一个CPFS卷和挂载点。参见创建文件系统。
重要 创建CPFS挂载点时,选择的VPC网络需要和ACK集群在同一个VPC内。
在以下示例中,获取的挂载点为 《cpfs-*-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs--ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp》;文件系统ID为 《0237ef41》。
- 创建PV。
- 创建名为pv-cpfs.yaml的文件,拷贝以下内容至文件中。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-cpfs labels: alicloud-pvname: pv-cpfs spec: capacity: storage: 5Gi accessModes: - ReadWriteMany flexVolume: driver: "alicloud/cpfs" options: server: "cpfs-****-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs-***-ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp" fileSystem: "0237ef41" subPath: "/k8s" options: "ro"
参数 描述 server 配置为CPFS的挂载点。 fileSystem 配置为CPFS文件系统ID。 subPath 配置为期望挂载的CPFS子目录,相对于文件系统根目录。 options 可选,挂载配置选项。 - 执行以下命令创建PV。
kubectl create -f pv-cpfs.yaml
- 创建名为pv-cpfs.yaml的文件,拷贝以下内容至文件中。
- 创建PVC。
- 创建pvc-cpfs文件,并拷贝以下内容至文件中。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-cpfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-cpfs
- 执行命令
kubectl create -f pvc-cpfs
创建PVC。
- 创建pvc-cpfs文件,并拷贝以下内容至文件中。
- 创建应用。
- 创建nas-cpfs文件,并拷贝以下内容至文件中。
apiVersion: apps/v1 kind: Deployment metadata: name: nas-cpfs labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - name: pvc-cpfs mountPath: "/data" volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: pvc-cpfs
- 执行命令
kubectl create -f nas-cpfs
创建应用。
- 创建nas-cpfs文件,并拷贝以下内容至文件中。
执行结果
执行以下命令检查Pod挂载情况。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE
nas-cpfs-79964997f5-kzrtp 1/1 Running 0 45s
执行以下命令进入Pod查看挂载目录。
kubectl exec -ti nas-cpfs-79964997f5-kzrtp sh
mount | grep k8s
预期输出:
192.168.1.12@tcp:192.168.1.10@tcp:/0237ef41/k8s on /data type lustre (ro,lazystatfs)
执行以下命令进入Pod所在节点,查看挂载目录。
mount | grep cpfs
预期输出:
192.168.1.12@tcp:192.168.1.10@tcp:/0237ef41/k8s on /var/lib/kubelet/pods/c4684de2-26ce-11ea-abbd-00163e12e203/volumes/alicloud~cpfs/pv-cpfs type lustre (ro,lazystatfs)
文档内容是否对您有帮助?