在CCE中挂载文件系统
适用范围
- 本文介绍如何在CCE中使用新版本极速型(极速型L2)。
- CCE对“标准型、增强型和老版本极速型” 的使用方式请参考此处 。
- 有关极速型新老版本的说明,请参阅“极速型新版本发布公告”。
前提条件
- 已创建PFS极速型L2文件系统,创建方式请参考:创建文件系统
- 已创建CCE集群,创建方式请参考此处。 在添加CCE节点时,需要注意安装的操作系统版本,以下为CCE和PFS极速型L2均支持的操作系统版本。
操作系统类型 | 发行版 | 内核版本 |
---|---|---|
CentOS | 7.5 | 3.10.0-1160.42.2.el7.x86_64 |
CentOS | 7.9 | 3.10.0-1160.83.1.el7.x86_64 |
CentOS | 8 | 4.18.0-348.7.1.el8_5.x86_64 |
Ubuntu | 20.04 | 5.4.0-135-generic |
Ubuntu | 20.04 | 5.4.0-139-generic |
注:kubernetes版本需要CCE产品支持(version >= 1.18)
- 安装kubernetes 控制行工具kubectl, 关于 kubectl 安装和配置详情,请参见 Kubernetes 文档。
安装步骤
安装CSI插件
- 登录CCE控制台。
- 依次点击 “Helm->Helm模版->百度智能云模板” ,搜索并找到 “cce-pfsl2-csi-plugin” , 点击安装。
- 在弹出的“安装模板”页面填写实例名称、部署集群、命名空间、模板内容。
(a) “实例名称、部署集群、命名空间”,请参考如下说明。更多说明请参考:Helm模板。
参数 | 说明 |
---|---|
实例名称 | 请输入安装的helm chart 实例名称,例如:cce-pfsl2-csi-plugin |
部署集群 | 请选择需要部署PFS CSI插件的CCE集群 |
命名空间 | 请选择部署helm chart实例的命名空间,下拉选择已经存在的命名空间,例如:kube-system |
(b) “模版内容”需要填写如下参数,其中的pfsId/mountTargetId/region为必填,不允许为空,用户需要根据自身后端存储的信息进行填写。storageclass 参数为系统默认创建的storageclass的参数信息,可以使用默认值或者用户根据自己的需要进行填写。
参数 | 参数说明 | 值类型 | 配置说明 |
---|---|---|---|
storage.pfsId | PFS实例ID | 字符串 | 必配。请登录PFS控制台,在实例列表页获取实例ID。 |
storage.mountTargetId: | PFS挂载点 | 字符串 | 必配。登录PFS控制台后,依次点击“实例ID -> POSIX挂载”,在挂载点信息处查看“挂载点ID(挂载地址)”。 |
storage.region | PFS存储实例所在地域 | 字符串 | 必配。支持填写:bj、sz、bd、yq、gz。分别代表北京、苏州、保定、阳泉、广州。 |
storageClass.name | 系统创建默认的storageclass名称 | 字符串 | 选择配置,可以使用默认配置或自己配置名称。 |
storageClass.reclaimPolicy | 动态pvc所用空间的回收策略,Delete/Retain/Recycle 任选其一 | 字符串 | 选择配置 |
查询PFS CSI插件部署状态
可在CCE控制台的“Helm实例”处查看部署成功的Helm实例。
验证PFS CSI插件部署结果
CSI 插件部署成功后,会自动进行插件的初始化工作。请参考如下步骤检查是否初始化成功。
- 检查CSI的各个组件均已经处于Running状态。
[root@cce-bwy518yb-3otfd470 ~]# kubectl get pods -n kube-system |grep pfs
pfs-csi-78m67 3/3 Running 0 9m15s
pfs-csi-attacher-6f9dfc47f7-2w52z 1/1 Running 0 9m15s
pfs-csi-attacher-6f9dfc47f7-d26mv 1/1 Running 0 9m16s
pfs-csi-c4ntn 3/3 Running 0 9m15s
pfs-csi-operator-55749d7d9f-q59b2 1/1 Running 0 9m24s
pfs-csi-provisioner-86b9db5-2gwg5 1/1 Running 0 9m15s
pfs-csi-r8s7t 3/3 Running 0 9m15s
pfs-csi-resizer-657487c6db-78pdc 1/1 Running 0 9m15s
pfs-csi-snapshotter-5b744975f-gdkph 1/1 Running 0 9m15s
- 检查各个节点是否已经成功挂载PFS,如果label ready-for-pfsl2 的值为true,代表当前节点已经挂载成功。
[root@cce-8tn6h4rm-9tnmw64e ~]# kubectl get nodes -L ready-for-pfsl2
NAME STATUS ROLES AGE VERSION READY-FOR-PFSL2
172.16.32.28 Ready <none> 46d v1.22.5 true
172.16.32.29 Ready <none> 46d v1.22.5 true
172.16.32.30 Ready <none> 46d v1.22.5 true
- 检查集群创建的storageclass,安装成功后会在集群中自动创建一个名称为default-pfs-sc的storageclass, 用户可用该storageclass创建动态pvc。
[root@cce-8tn6h4rm-9tnmw64e ~]# kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
default-pfs-sc spectrumscale.csi.ibm.com Delete Immediate false 5h21m
- 检查创建好的静态pv,安装成功后,会在系统内自动创建一个默认静态pv, 用户可以参考默认pv创建自己的pv。
[root@cce-bwy518yb-3otfd470 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
default-pfs-pv 100Gi RWX Retain Available 10m
使用验证
动态方式创建pvc并挂载应用
- 在安装成功之后,会在集群中自动创建好一个名称为default-pfs-sc的storageclass, 用户可以创建动态pvc。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-dynamic-pvc
namespace: train
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 64Gi
storageClassName: default-pfs-sc
参数说明: storageClassName要与系统内部的storageClass名称对应。
- 创建pvc并查看创建出的pvc,创建pvc需要用户提前准备好所需namespace, 示例使用namespace 为train。
[root@cce-8tn6h4rm-9tnmw64e helm]# kubectl create -f ./pvc.yaml
[root@cce-hc087zlg-9ah6zdoa dynamicpv]# kubectl get pvc -n train
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-dynamic-pvc Bound pvc-dc4e50be-8338-4538-9430-43332601001a 64Gi RWX default-pfs-sc 178m
- 创建应用任务,并挂载动态方式创建的pvc。
apiVersion: v1
kind: Pod
metadata:
name: my-dynamic-app
namespace: train
spec:
containers:
- name: gpfs-test
image: registry.baidubce.com/public-tools/fio:3.6
command: ["/bin/sh"]
args:
- -c
- ls -lh /data && sleep 360000
volumeMounts:
- mountPath: /data
name: data-vol
volumes:
- name: data-vol
persistentVolumeClaim:
claimName: my-dynamic-pvc
kubectl create -f ./dynamic_app.yaml
静态方式创建pv并挂载应用
- 系统默认会创建一个默认的静态PV,名称为:default-pfs-pv
[root@cce-hc087zlg-9ah6zdoa static]# kubectl get pv -n kube-system
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
default-pfs-pv 100Gi RWX Retain Bound kube-system/default-pfs-pvc 13h
通过如下命令查看默认的pv文件
kubectl get pv default-pfs-pv -n kube-system -o yaml
- 参考默认的pv文件参数,用户创建自己的pv
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 100Gi
csi:
driver: spectrumscale.csi.ibm.com
volumeHandle: 0;0;3691695499814569648;061010AC:655AFEFD;;;/pfs/mt-Mvgw7u
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
静态pv参数说明,其中两个参数,spec.csi.driver和spec.csi.volumeHandle需要从default的pv中拷贝,其它参数可以根据自身需求进行配置。
参数 | 参数含义 | 配置值选项 | 参数说明 |
---|---|---|---|
metadata.name | pv名称,用户根据自身需求进行配置 | 字符串 | 必配 |
spec.accessModes | 访问模式 | ReadWriteOnce ReadOnlyMany ReadWriteMany ReadWriteOncePod |
必配 |
spec.capacity.storage | 容量 | 值类型 | 必配 |
spec.csi.driver | csi的driver类型 | 从default中拷贝 | 必配 |
spec.csi.volumeHandle | 存储的句柄 | 从default配置中拷贝 | 必配 |
persistentVolumeReclaimPolicy | 存储空间的回收策略 | Retain Delete Recycle |
必配 |
volumeMode | 卷模式 | Filesystem | 必配 |
用户创建自身所需PV资源
kubectl create -f my_pv.yaml
- 基于用户静态PV创建用户pvc.
用户创建自身所需pvc资源,pvc为namespace相关,用户需要提前准备好所需namespace。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
namespace: train
spec:
volumeName: my-pv
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: ""
kubectl create -f ./static_pvc.yaml
- 查看创建好的pvc
[root@cce-hc087zlg-9ah6zdoa staticpv]# kubectl get pvc -n train
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound my-pv 100Gi RWX 3h5m
- 静态方式挂载应用
apiVersion: v1
kind: Pod
metadata:
name: my-static-app
namespace: train
spec:
containers:
- name: gpfs-test
image: registry.baidubce.com/public-tools/fio:3.6
command: ["/bin/sh"]
args:
- -c
- ls -lh /data && sleep 360000
volumeMounts:
- mountPath: /data
name: data-vol
volumes:
- name: data-vol
persistentVolumeClaim:
claimName: my-pvc
卸载步骤
用户可以在Helm 实例列表中将部署的CSI 实例删除,如下图所示。插件卸载后并不会影响用户的应用,并且在host宿主机上的PFS挂载点不会被删除。
常见问题
1. 在控制台安装 “cce-pfsl2-csi-plugin” 成功后是否代表全部安装流程结束可以创建pvc了?
在控制台安装 “cce-pfsl2-csi-plugin” 插件后,插件实例会显示“已部署”状态,代表chart包成功安装,并不表示所有流程已经走完可以创建pvc了。需要按照安装步骤进行检查,依次确保CSI插件pod启动成功,客户端挂载点挂载成功,默认的pv和storageclass创建成功后,才代表整个自动化安装流程安装结束。
2. 是否可以基于系统默认的defalt-pfs-pv 直接创建pvc?
否。用户可以基于默认的pv提供的参数创建自己的pv,基于自己创建的pv再创建pvc。原因是当卸载csi插件时,系统默认的pv会触发删除流程,如果已经使用的话会导致删除不成功。
3. 已部署成功的“cce-pfsl2-csi-plugin” 插件,是否可以升级更新安装插件时填入的参数?
不可以。如果安装插件时的参数需要更新,需要将已经部署好的插件进行卸载,卸载成功后重新安装pfsl2 csi插件。
4. “cce-pfsl2-csi-plugin” 插件是否支持污点容忍调度?
CSI插件作为基础组建会默认容忍所有污点,因此节点污点不会影响该节点上CSI插件部署。
5. 已经创建好pvc并在workload挂载,pfsl2 csi插件是否支持独立卸载重新安装?
支持。“cce-pfsl2-csi-plugin” 插件卸载重新安装不会影响已经创建好的pvc和用户workload,插件卸载后只会影响新创建pvc。
6. 已经部署完毕的“cce-pfsl2-csi-plugin” 插件是否支持新增节点?
支持,新增用户端节点只需要加入到cce集群里即可,新节点会自动完成“cce-pfsl2-csi-plugin” 的初始化和启动,需要注意的是新加入的节点在虚机创建后不支持修改hostname。