使用云盘动态存储卷,即无需预先创建云硬盘和PV,只需创建PVC时指定存储类(StorageClass),存储插件cstor-csi就会自动创建云盘实例及对应PV资源。
该模式为推荐使用,您可以更关注工作负载本身的存储需求,无需预先手动创建和配置存储资源,降低底层基础设施的复杂性。
前提条件
已创建容器集群
已在插件市场安装存储插件cstor-csi,且插件正常运行
使用限制
参见上一篇:“云硬盘概述”—“使用限制”
通过控制台使用云盘动态存储卷
1、创建存储类(StorageClass)
登录“云容器引擎管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“存储”——“存储类”,单击左上角“创建”;
在创建对话框,配置存储类StorageClass的相关参数。配置项说明如下:
配置项 | 说明 |
---|---|
名称 | StorageClass的名称。 |
存储类型 | 当前支持云盘、弹性文件、对象存储、并行文件、海量文件和本地存储,这里选择云盘。 具体创建页中展示的存储类型由当前资源池支持情况决定。 |
存储驱动 | 对应StorageClass yaml中provisioner,值为disk.csi.cstor.com |
回收策略 | 回收策略,默认为Deleted。
|
绑定策略 | 绑定策略,默认为Immediate。
|
磁盘模式 | 当前仅支持VBD。 |
参数 |
|
挂载选项 | 挂载参数,用户可根据自己的情况实际定制相关参数。比如设置挂载参数为:discard:表示在挂载文件系统时指定 discard 参数,文件系统中删除文件后会自动触发 discard 操作,通知块设备释放掉未使用的 Block 。 |
配置项 | 说明 |
---|
参数配置完成后,点击“确定”。创建成功后,可以在存储类列表查看。
2、创建持久卷声明(PVC)
进入主菜单“存储”——“持久卷声明”,单击左上角“创建持久卷声明”;
在创建对话框,配置持久卷声明PVC的相关参数。配置项说明如下:
配置项 | 说明 |
---|---|
名称 | PVC的名称 |
存储声明类型 | 当前支持云盘、弹性文件、对象存储、并行文件、海量文件和本地存储。这里选择云盘。 具体创建页中展示的存储类型由当前资源池支持情况决定。 |
分配模式 | 当前支持“使用存储类”和“已有存储卷” 这里选择“使用存储类” |
StorageClass名称 | 选择上一步创建的StorageClass |
容量 | 最小容量10GB,最大容量为32TB |
卷模式 |
|
访问模式 |
|
高级选项 | 可用区:可以根据需要手动选择PVC对应存储的可用区。该操作即在PVC上打上标签如下:topology.kubernetes.io/zone: xxxx |
配置项 | 说明 |
---|
参数配置完成后,点击“确定”。创建成功后,可以在持久卷声明列表查看。
进入持久卷声明列表页,等待PVC状态为“已绑定” 。此时,进入主菜单“存储”——“持久卷“,可以看到对应的PV创建 。
如果PVC一直未绑定,可以查看进入对应PVC详情页查看事件,或者查看cstor-csi日志进行定位。
3、创建工作负载
登录“云容器引擎”管理控制台;
在集群列表页点击进入指定集群;
进入主菜单“工作负载”——“有状态”,单击左上角“创建SatefulSet”;
在创建对话框,数据卷栏中,选择添加数据卷,卷类型选择“使用已有PVC”,操作栏选择“添加已有PVC”;
在实例内容器栏,为容器设置挂载点。选择添加挂载点,选择数据卷为上一步创建,根据需要配置容器路径和权限;
所有的信息都配置完成后,单击 “提交” 。
创建成功后,您就可以正常使用数据卷。
通过kubectl命令行使用云盘动态存储卷
1、创建存储类(StorageClass)
使用kubectl连接集群,创建示例yaml文件sc-example.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: cstor-csi-disk-sas-sc
provisioner: disk.csi.cstor.com
parameters:
# 产品类型
type: SAS
# 所需挂载文件系统,当前支持ext4和xfs
csi.storage.k8s.io/fstype: ext4
# 是否为共享盘
shared: "false"
# 存储类型 VBD
mode: VBD
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- discard
执行以下命令,创建StorageClass
kubectl apply -f sc-example.yaml
查看创建的StorageClass:
操作步骤: 登录“云容器引擎”管理控制台;在集群列表页点击进入指定集群;进入主菜单“存储”——“存储类”,在存储类列表查看。
2、创建持久卷声明(PVC)
使用kubectl连接集群,创建示例yaml文件pvc-example.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cstor-pvc-disk
spec:
# 访问模式
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: cstor-csi-disk-sas-sc
执行以下命令,创建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
serviceName: ""
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: "/tmp"
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 tmp 查看挂载情况,预期结果包括如下:
/dev/vdb 9.7G 24.0K 9.7G 0% /tmp
2、向/tmp 目录下写一个文件,执行 echo "Hello World" > /tmp/test.log
3、查看/tmp目录下文件,执行ls /tmp,预期结果如下:
lost+found test.log
退出“远程登录”,对上一步中的Pod执行“销毁重建”,等待Pod重新运行正常;
对新建Pod,继续执行“远程登录”,进入到容器内查看数据。执行cat /tmp/test.log,预期结果如下:
Hello World
以上步骤说明,pod删除重建后,重新挂载云盘,数据仍然存在,说明云硬盘中的数据可持久化保存。