使用云硬盘静态存储卷
使用云硬盘静态存储卷
1. 操作场景
容器云CSK容器集群支持通过创建 PV/PVC,并为工作负载挂载数据卷的方式使用云硬盘。
2. 注意事项
- 创建云硬盘静态存储卷PV前,需要在基础云的云硬盘产品处,提前购买【容器共享】的云硬盘实例;
- 【容器共享】的云硬盘实例不仅可在容器集群中使用,也支持对基础云的云服务器实例挂载或卸载,但不支持同时挂载使用;
- 一个【容器共享】的云硬盘实例仅支持创建一个 PV,同时只能被一个容器集群挂载;
- 【容器共享】的云硬盘实例如需进行扩容,请在基础云的云硬盘页面操作,扩容完成后需要对工作负载重新挂载PVC;
- 【容器共享】的云硬盘实例如需进行回滚,请先删除关联PV;
- 云硬盘静态存储卷PV支持的文件系统类型:ext3、ext4、xfs;
- 云硬盘静态存储卷PV仅支持被Pod数量为1的工作负载挂载;
- 创建PVC前,需要创建PV,PV的状态需要为Available;
- Released 状态的 PV 需要手动删除 YAML 配置文件中的 claimRef 字段才能与 PVC 成功绑定。
3. 创建PV
3.1. 通过容器云控制台创建PV
登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储卷】;
单击【创建】,进入【创建存储卷】页面。根据实际需求,完成参数设置;
- 名称:设置PV的名称;
- 存储卷类型:默认为云硬盘;
- 读写权限:默认为ReadWriteOnce;
- 云硬盘:根据实际需求选择已购买的容器共享云硬盘;
- 文件系统类型:根据实际需求选择文件系统类型;
- 标签:输入键-值对(Key-Value),为PV设置标签;
- 注释:输入键-值对(Key-Value),为PV设置注释;
单击确定,完成PV创建。
3.2. 通过YAML创建PV
登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储卷】;
单击【YAML 创建】,完成参数设置;
- 模板:支持使用容器云提供的系统模板或自定义模板;
- 模板内容:选择好模板后,在“模板内容”区域可以对模板进行编辑。完成参数设置后,点击“保存模板”可将改动保存到自定义模板;
单击确定,完成PV创建。
3.3. 通过kubectl创建PV
YAML示例:
apiVersion: "v1"
kind: "PersistentVolume"
metadata:
finalizers:
- "kubernetes.io/pv-protection"
name: "pv"
spec:
accessModes:
- "ReadWriteOnce"
capacity:
storage: "50Gi"
csi:
driver: "ycbd.csi.csk.cloud-service.cn"
fsType: "ext3"
volumeAttributes:
staticVolume: "true"
volumeHandle: "VOL-11A-XXX" # SSD云盘(容器共享)ID
persistentVolumeReclaimPolicy: "Retain"
volumeMode: "Filesystem"
参考YAML示例,准备 PV YAML 文件;
安装 kubectl,并连接集群。操作详情请参见 连接集群 ;
执行以下命令,创建 PV YAML 文件:
kubectl --kubeconfig KUBECONFIG_NAME create -f PV YAML 文件名称
例如,创建一个文件名为 my-PV.yaml 的 PV YAML 文件,则执行以下命令:
kubectl --kubeconfig KUBECONFIG_NAME create -f my-PV.yaml
执行以下命令,验证创建是否成功:
kubectl --kubeconfig KUBECONFIG_NAME get PV
返回类似以下信息,即表示创建成功。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv 20Gi RWO Retain Available 1m40s
4. 创建PVC
4.1. 通过容器云控制台创建PVC
登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储卷声明】;
单击【创建】,进入【创建存储卷声明】页面。根据实际需求,完成参数设置;
- 名称:设置PVC的名称;
- 命名空间:根据实际需求选择集群下的命名空间;
- 存储卷类型:选择【云硬盘】;
- 分配模式:会根据选择的存储卷类型自动选择,【云硬盘】则对应【静态创建】;
- 读写权限:默认为ReadWriteOnce;
- 存储卷:根据实际需求选择集群下的PV,仅显示Available状态的PV;
- 云盘类型:根据实际选择的PV,显示云盘类型;
- 容量:根据实际选择的PV,显示容量大小;
- 标签:输入键-值对(Key-Value),为PVC设置标签;
- 注释:输入键-值对(Key-Value),为PVC设置注释;
单击确定,完成PVC创建。
4.2. 通过YAML创建PVC
登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【存储管理】-【存储卷声明】;
单击【YAML 创建】,完成参数设置;
- 模板:支持使用容器云提供的系统模板或自定义模板;
- 模板内容:选择好模板后,在“模板内容”区域可以对模板进行编辑。完成参数设置后,点击“保存模板”可将改动保存到自定义模板;
单击确定,完成PVC创建。
4.3. 通过kubectl创建PVC
YAML示例:
apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
finalizers:
- "kubernetes.io/pvc-protection"
name: "pvc"
namespace: "default"
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "50Gi"
volumeMode: "Filesystem"
volumeName: "pv"
参考YAML示例,准备 PVC YAML 文件;
安装 kubectl,并连接集群。操作详情请参见 连接集群 ;
执行以下命令,创建 PVC YAML 文件:
kubectl --kubeconfig KUBECONFIG_NAME create -f PVC YAML 文件名称
例如,创建一个文件名为 my-PVC.yaml 的 PVC YAML 文件,则执行以下命令:
kubectl --kubeconfig KUBECONFIG_NAME create -f my-PVC.yaml
执行以下命令,验证创建是否成功:
kubectl --kubeconfig KUBECONFIG_NAME get PVC
返回类似以下信息,即表示创建成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc Bound my-pv 20Gi RWO 3m11s
5. 对工作负载挂载PVC
查看创建的PVC的状态,若PVC状态为Bound,则表示创建成功,PVC可以向Pod分配PV存储资源。
5.1. 在创建工作负载过程中,挂载PVC
登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择 【工作负载】并选择工作负载类型;
单击【创建】,进入【创建工作负载】页面;
在【容器配置】,展开【高级配置】,勾选【存储】-【PVC】,根据实际需求完成参数配置;
- 存储卷类型:选择【云硬盘】;
- 挂载源:根据实际需求选择PVC;
- 容器内挂载路径:根据实际需求填写PVC挂载路径;
- 子路径:根据实际需求填写子路径subpath;
完成工作负载的配置后,单击创建,完成工作负载创建的同时,也会挂载PVC。
5.2. 为已有工作负载挂载PVC
登录容器云控制台;
若默认进入的集群非目标集群,可在顶部的集群切换栏,切换进入集群;
在容器云控制台左侧导航栏中,选择【工作负载】,选择已创建的工作负载进入详情;
单击【容器配置】,点击右侧【修改】,进入【编辑容器】页面,展开【高级配置】,勾选【存储】-【PVC】,根据实际需求完成参数配置;
- 存储卷类型:选择【云硬盘】;
- 挂载源:根据实际需求选择PVC;
- 容器内挂载路径:根据实际需求填写PVC挂载路径;
- 子路径:根据实际需求填写子路径subpath;
单击确定,挂载PVC。
5.3. 修改YAML文件中Pod Template挂载PVC
在Pod Template中的Volume直接关联PVC的名称,即可挂载到容器中。
YAML示例:
spec:
containers:
- image: "nginx:latest"
imagePullPolicy: "IfNotPresent"
name: "nginx"
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "1"
memory: "1Gi"
terminationMessagePath: "/dev/termination-log"
terminationMessagePolicy: "File"
volumeMounts:
- mountPath: "/pvc" # 挂载路径
name: "my-pvc"
dnsPolicy: "ClusterFirst"
imagePullSecrets:
- {}
restartPolicy: "Always"
schedulerName: "default-scheduler"
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: "my-pvc"
persistentVolumeClaim:
claimName: "my-pvc" # PVC的名称