使用云盘静态存储卷时,需预先在云硬盘控制台创建云盘实例,并通过手动创建 PV、在 PVC 中指定已有 PV 的方式实现容器内挂载。
该模式要求您创建云盘及 PV 资源,增加了操作和管理复杂度,通常建议优先采用动态存储卷方式。
前提条件
已创建容器集群。
已在插件市场安装存储插件cstor-csi,且插件正常运行。(建议使用>=4.0的CSI版本)
使用XSSD云盘,需要CSI版本大于等于4.0.4。
使用限制
参见“云硬盘概述”——“使用限制”
通过控制台使用云盘静态存储卷
1、创建持久卷(PV)
登录“云容器引擎管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“存储”——“存储类”,单击左上角“创建”;
在创建对话框,配置持久卷PV的相关参数。配置项说明如下:
| 配置项 | 说明 |
|---|---|
| 标签 | 用于对 PV 对象进行标记和分类的元数据属性,可以赋予 PV 以自定义的属性或标识。 |
| 持久卷类型 | 当前支持云盘、弹性文件、对象存储、并行文件和海量文件,这里选择云盘。 具体创建页中展示的存储类型由当前资源池支持情况决定。 |
| 存储驱动 | 采用默认CSI驱动。 |
| 访问模式 |
说明:如果使用非共享盘存储,访问模式不能为ReadWriteMany或者ReadOnlyMany。仅PVC为块设备模式(Block)时,才可以使用共享盘,访问模式才可以为ReadWriteMany或者ReadOnlyMany。 |
| 挂载类型 | 当前支持ext4、xfs。 |
| 挂载选项 | 挂载参数,用户可根据自己的情况实际定制相关参数。 比如设置挂载参数为: discard:表示在挂载文件系统时指定 discard 参数,文件系统中删除文件后会自动触发 discard 操作,通知块设备释放掉未使用的 Block 。 |
| 卷模式 |
说明:如果使用共享盘存储,卷模式仅支持块设备(Block)。 |
| 名称 | PV的名称,以pvc-开头。 |
| 已有存储类 | 选择存储类功能在静态存储卷场景下较少使用。 仅当已存在带有存储类声明的持久卷申明(PVC)时,才需在此处配置匹配的存储类以实现绑定。 |
| 云盘ID | 选择已有云盘实例。单击会弹出选择云盘会话,会话中会展示可使用的云盘信息,可使用条件包括:
注意 同一个云硬盘不能导入到两个持久卷中使用,这样会造成一些K8S的使用问题。用户需要辨别哪些云硬盘已经被pv使用,需要避免出现两个持久卷指向同一个云硬盘的情况。 |
说明:静态导入场景下,回收策略均为默认Retain,cstor-csi不会删除数据。
说明
静态导入场景下,回收策略均为默认Retain,cstor-csi不会删除数据。
参数配置完成后,点击“确定”。创建成功后,可以在持久卷列表查看,此时PV状态为“可用”。
2、创建持久卷声明(PVC)
进入主菜单“存储”——“持久卷声明”,单击左上角“创建持久卷声明”;
在创建对话框,配置持久卷声明PVC的相关参数。配置项说明如下:
| 配置项 | 说明 |
|---|---|
| 名称 | PVC的名称。 |
| 存储声明类型 | 当前支持云盘、弹性文件、对象存储、并行文件和海量文件,这里选择云盘。 具体创建页中展示的存储类型由当前资源池支持情况决定。 |
| 是否指定存储类 | 在静态创建的场景下,除非持久卷指定了存储类,否则不需要指定存储类。 |
| 是否指定存储卷 | 在静态创建的场景下,需要指定上一步的存储卷。 |
| 持久卷名称 | 选择上一步创建的PV名称。 |
参数配置完成后,点击“确定”。创建成功后,可以在持久卷声明列表查看。
进入持久卷声明列表页,等待PVC状态为“已绑定” 。
3、创建工作负载
登录“云容器引擎”管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“工作负载”——“有状态”,单击左上角“创建SatefulSet”;
在创建对话框,数据存储栏中,选择添加存储卷,卷类型选择“已有存储卷申明(PVC)”,操作栏选择“选择已有存储申明”;根据自己需要设置挂载路径、子路径和权限,
参数说明:
挂载路径:存储挂载到容器后,容器内部显示的路径地址。不建议使用类似于/usr或者/tmp类似的已有的容器目录路径,可能会造成目录相互遮蔽。
子路径:需要挂载的存储源地址的子目录
权限:读写/只读
示例:将PVC“disk”对应存储的subpath指向的子目录(subpath为空表示使用根目录),挂载到容器里的/test路径上。
所有的信息都配置完成后,单击“提交”,创建成功后,您就可以正常使用数据卷。
通过kubectl命令行使用云盘静态存储卷
注意
- 以下配置仅支持CSI版本4.0及其以上,您可以先在插件市场对CSI插件升级,再按照以下配置编写yaml。
- 以下参数为建议配置,您可在存储产品的支持范围内,根据自身实际情况进行调整。
- 部分参数由于不常用,示例中以#开头,未放开该参数,如有需求,请您根据实际需求使用。
- 部分#开头的中文内容为内容解释,并非参数。
1、创建持久卷(PV)
使用kubectl连接集群,创建示例yaml文件pv-example.yaml:
apiVersion: "v1"
kind: "PersistentVolume"
metadata:
name: "pvc-disktest" # pv的名字,以“pvc-”开头,无需记录后缀
spec:
accessModes:
- "ReadWriteOnce"
capacity:
storage: "10Gi" # 填写存储大小,与实际存储大小保持一致。单位有Mi、Gi、Ti、Pi
csi:
driver: "disk.csi.cstor.com"
fsType: "ext4" # 填写云硬盘需要的文件系统,目前支持xfs和ext4
volumeAttributes:
driverType: "disk.csi.cstor.com"
mode: "VBD"
shared: "false"
type: "SAS"
volumeHandle: "0203-24-5c1fae45-d5f9-4088-abaf-4a59de3ffcce" # #格式为0206-{DISKID-LENTH}-{DISKID},具体参照《参数说明》
mountOptions:
- "discard"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: "topology.disk.csi.cstor.com/zone"
operator: "In"
values:
- "cn-huadong1-jsnj2A-public-ctcloud" # 填写存储openapi使用的azName,必须与云硬盘所在的可用区一致。
persistentVolumeReclaimPolicy: "Delete"
volumeMode: "Filesystem"参数说明:
volumeHandle:格式为0208-{PV-NAME-SUFFIX-LENTH}-{PV-NAME-SUFFIX}
DISKID表示P云硬盘的diskID,可以在云硬盘控制台获取。
DISKID-LENTH为16进制,表示diskID的长度。
例如DISKID是"5c1fae45-d5f9-4088-abaf-4a59de3ffcce",则DISKID-LENTH为24
执行以下命令,创建PV
kubectl apply -f pv-example.yaml查看创建的PV:登录“云容器引擎”管理控制台;在集群列表页点击进入指定集群;进入主菜单“存储”——“持久卷”,在持久卷列表查看。
2、创建持久卷声明(PVC)
使用kubectl连接集群,创建示例yaml文件pvc-example.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cstor-pvc-disk
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
volumeMode: Filesystem
volumeName: {YOUR-PV-NAME} #替换PV名称执行以下命令,创建PVC
kubectl apply -f pvc-example.yaml查看创建的PVC:
登录“云容器引擎”管理控制台;在集群列表页点击进入指定集群;进入主菜单“存储”——“持久卷声明”,在列表查看。
3、创建工作负载
使用kubectl连接集群,创建示例yaml文件sts-example.yaml:
apiVersion: "apps/v1"kind: "StatefulSet"metadata:
name: "test-sts"spec:
podManagementPolicy: "OrderedReady"
replicas: 1
revisionHistoryLimit: 10
template:
spec:
containers:
- image: "nginx:1.25-alpine"
imagePullPolicy: "IfNotPresent"
name: "container1"
resources:
limits:
cpu: "100m"
memory: "256Mi"
requests:
cpu: "100m"
memory: "256Mi"
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts:
- mountPath: "/ccetmp"
name: "volume1"
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
schedulerName: "default-scheduler"
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: "volume1"
persistentVolumeClaim:
claimName: "cstor-pvc-disk"
updateStrategy:
rollingUpdate:
partition: 0
type: "RollingUpdate"执行以下命令,创建StatefulSet
kubectl apply -f sts-example.yaml查看创建的有状态负载:
登录“云容器引擎”管理控制台;在集群列表页点击进入指定集群;进入主菜单“工作负载”——“有状态”,在列表查看。
验证数据持久化
登录“云容器引擎”管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“工作负载”——“有状态”,进入负载详情;
在Pod列表页,选择“远程登录”,进入到容器内执行以下命令:
1、执行 df -h |grep ccetmp 查看挂载情况,预期结果包括如下:
/dev/vdb 9.7G 24.0K 9.7G 0% /ccsetmp2、向/ccetmp 目录下写一个文件,执行echo "Hello World" > /ccetmp/test.log
3、查看/ccetmp目录下文件,执行ls /ccetmp,预期结果如下:
test.log退出“远程登录”,对上一步中的Pod执行“销毁重建”,等待Pod重新运行正常;
对新建Pod,继续执行“远程登录”,进入到容器内查看数据。执行cat /ccetmp/test.log,预期结果如下:
Hello World以上步骤说明,pod删除重建后,重新挂载云盘,数据仍然存在,说明云硬盘中的数据可持久化保存。