使用云盘静态存储卷,即使用预先在云硬盘控制台已建好的云盘实例,通过手动创建PV,创建PVC时使用已有PV的方式,实现容器内挂载云盘存储。
该模式下需要用户自建云盘及PV资源,一定程度上增加操作和管理复杂性,一般推荐使用动态创建存储的方式。
前提条件
- 已创建容器集群
- 已在插件市场安装存储插件cstor-csi,且插件正常运行
- 已在云硬盘控制台创建云盘
使用限制
参见“云硬盘概述”——“使用限制”
通过控制台使用云盘静态存储卷
1、创建持久卷(PV)
- 登录“云容器引擎”管理控制台;
- 在集群列表页点击进入指定集群;
- 进入主菜单“存储”——“持久卷”,单击左上角“创建持久卷”;
在创建对话框,配置持久卷PV的相关参数。配置项说明如下:
配置项 说明 名称 PV的名称,以pvc-开头 持久卷类型 当前支持云盘、弹性文件和对象存储,这里选择云盘。
具体创建页中展示的存储类型由当前资源池支持情况决定。存储驱动 采用默认CSI驱动 访问模式
ReadWriteOnce:卷可以被一个节点以读写方式挂载
ReadOnlyMany:卷可以被多个节点以只读方式挂载
ReadWriteMany:卷可以被多个节点以读写方式挂载
说明:如果使用非共享盘存储,访问模式不能为ReadWriteMany。
云盘ID 选择已有云盘实例。单击会弹出选择云盘会话,会话中会展示可使用的云盘信息,可使用条件包括:
云盘所在可用区与集群节点可用区相同
磁盘模式为VBD、磁盘为非加密盘
磁盘为非系统盘 及非云主机成套资源
磁盘状态可用
如磁盘为非共享盘,磁盘需未被挂载
挂载类型 当前支持ext4、xfs 卷模式
文件系统(Filesystem):默认方式,该类型卷会被 Pod 挂载(Mount) 到某个目录。 如果卷的存储来自某块设备而该设备目前为空,Kuberneretes 会在第一次挂载卷之前在设备上创建文件系统。
块设备(Block): 这类卷以块设备的方式交给 Pod 使用,其上没有任何文件系统。 这种模式对于为 Pod 提供一种使用最快可能方式来访问卷而言很有帮助, Pod 和卷之间不存在文件系统层。
说明:如果使用共享盘存储,卷模式仅支持块设备(Block)。
挂载选项 挂载参数,用户可根据自己的情况实际定制相关参数。
比如设置挂载参数为:
discard:表示在挂载文件系统时指定 discard 参数,文件系统中删除文件后会自动触发 discard 操作,通知块设备释放掉未使用的 Block 。
标签 用于对 PV 对象进行标记和分类的元数据属性,可以赋予 PV 以自定义的属性或标识。
说明静态导入场景下,回收策略均为默认Retain,cstor-csi不会删除数据。
- 参数配置完成后,点击“确定”。创建成功后,可以在持久卷列表查看,此时PV状态为“可用”。
2、创建持久卷声明(PVC)
- 进入主菜单“存储”——“持久卷声明”,单击左上角“创建持久卷声明”;
- 在创建对话框,配置持久卷声明PVC的相关参数。配置项说明如下:
配置项 说明 名称 PVC的名称 存储声明类型 当前支持云盘、弹性文件和对象存储,这里选择云盘。
具体创建页中展示的存储类型由当前资源池支持情况决定。分配模式 当前支持“使用存储类”和“已有存储卷”
这里选择“已有存储卷”持久卷名称 选择上一步创建的PV名称
- 参数配置完成后,点击“确定”。创建成功后,可以在持久卷声明列表查看。
- 进入持久卷声明列表页,等待PVC状态为“已绑定” 。
3、创建工作负载
- 登录“云容器引擎”管理控制台;
- 在集群列表页点击进入指定集群;
- 进入主菜单“工作负载”——“有状态”,单击左上角“创建SatefulSet”;
- 在创建对话框,数据卷栏中,选择添加数据卷,卷类型选择“使用已有PVC”,操作栏选择“添加已有PVC”;
- 在实例内容器栏,为容器设置挂载点。选择添加挂载点,选择数据卷为上一步创建,根据需要配置容器路径和权限;
所有的信息都配置完成后,单击 “提交” 。
创建成功后,您就可以正常使用数据卷。
通过kubectl命令行使用云盘静态存储卷
1、创建持久卷(PV)
- 使用kubectl连接集群,创建示例yaml文件pv-example.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: disk.csi.cstor.com
name: pvc-test-disk #PV的名称,以pvc-开头
spec:
accessModes:
- ReadWriteOnce #访问模式
capacity:
storage: 10Gi #云盘容量
csi:
driver: disk.csi.cstor.com
fsType: ext4 #挂载类型
volumeAttributes:
diskUUID: {YOUR-DISK-UUID} #替换云盘ID
driverType: disk.csi.cstor.com
mode: VBD
shared: "false" #是否共享盘
type: SATA # 磁盘类型
volumeHandle: 0103-20-{resourceID} # 替换云盘resourceID
mountOptions:
- discard
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.disk.csi.cstor.com/zone
operator: In
values:
- <YOUR-NODE-ZONE-ID> #替换为您待部署应用的节点所在的可用区,例如cn-huadong1-jsnj1A-public-ctcloud
volumeMode: Filesystem #卷模式
- 执行以下命令,创建PV
kubectl apply -f pv-example.yaml
- 查看创建的PV:登录“云容器引擎”管理控制台;在集群列表页点击进入指定集群;进入主菜单“存储”——“持久卷”,在持久卷列表查看。
2、创建持久卷声明(PVC)
- 使用kubectl连接集群,创建示例yaml文件pvc-example.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: disk.csi.cstor.com
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: "/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列表页,选择“远程登录”,进入到容器内执行以下命令:
/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删除重建后,重新挂载云盘,数据仍然存在,说明云硬盘中的数据可持久化保存。