集群管理员可使用 StorageClass 为容器服务集群定义不同的存储类型。容器服务已默认提供块存储类型的 StorageClass,您可通过 StorageClass 配合 PersistentVolumeClaim 动态创建需要的存储资源。本文介绍通过控制台、Kubectl 两种方式创建云硬盘 CBS 类型的 StorageClass,自定义云硬盘使用所需的模板。
cbs-test
为例。说明:容器服务默认提供的 default-policy 备份策略的配置包括:执行备份的日期、执行备份的时间点和备份保留的时长。
cbs-pvc
为例。cbs-test
为例。
说明:
- PVC 和 PV 会绑定在同一个 StorageClass 下。
- 不指定 StorageClass 意味着该 PVC 对应的 StorageClass 取值为空,对应 YAML 文件中的
storageClassName
字段取值为空字符串。
说明:
- 系统首先会筛选当前集群内是否存在符合绑定规则的 PV,如果没有则根据 PVC 和所选 StorageClass 的参数动态创建 PV 与之绑定。
- 系统不允许在不指定 StorageClass 的情况下同时选择不指定 PersistVolume。
- 不指定 PersistentVolume。详情请参见 查看 PV 和 PVC 的绑定规则。
说明:该步骤以创建工作负载 StatefulSet 为例。
cbs-vol
为例。cbs-pvc
为例。/cache
为例。/data
或 /test.txt
。注意:如使用 CBS 的 PVC 挂载模式,则数据卷只能挂载到一台 Node 主机上。
您可参考本文提供的示例模板,使用 Kubectl 进行 StorageClass 创建操作。
以下 YAML 文件示例为集群内默认存在 name 为 cbs 的 StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
# annotations:
# storageclass.beta.kubernetes.io/is-default-class: "true"
# 如果有这一条,则会成为 default-class,创建 PVC 时不指定类型则自动使用此类型
name: cloud-premium
# 安装了 CBS-CSI 组件的TKE集群请填写 provisioner 为 com.tencent.cloud.csi.cbs
# 未安装 CBS-CSI 组件请填写 provisioner 为 cloud.tencent.com/qcloud-cbs (该能力在1.20及以后版本废弃)
provisioner: com.tencent.cloud.csi.cbs
parameters:
type: CLOUD_PREMIUM
renewflag: NOTIFY_AND_AUTO_RENEW
paymode: POSTPAID_BY_HOUR
aspid: asp-123
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
支持参数如下表:
参数 | 描述 |
---|---|
type | 包括 CLOUD_PREMIUM(高性能云硬盘)和 CLOUD_SSD(SSD 云硬盘)、CLOUD_HSSD(增强型 SSD 云硬盘)。 |
zone | 用于指定可用区。如果指定,则云硬盘将创建到此可用区。如果不指定,则拉取所有 Node 的可用区信息,进行随机选取。 腾讯云各地域标识符请参见 地域和可用区。 |
paymode | 云硬盘的计费模式,默认设置为 POSTPAID_BY_HOUR 模式,即按量计费,支持 Retain 保留和 Delete 删除策略,Retain 仅在高于1.8的集群版本生效。 |
volumeBindingMode | 卷绑定模式,支持 Immediate(立即绑定)和 WaitForFirstConsumer(延迟调度)。 |
reclaimPolicy | 回收策略,支持 Delete(删除)和 Retain(保留)。 |
renewflag | 云硬盘的续费模式。默认为 NOTIFY_AND_MANUAL_RENEW 模式。NOTIFY_AND_AUTO_RENEW 模式代表所创建的云硬盘支持通知过期且按月自动续费。NOTIFY_AND_MANUAL_RENEW 模式代表所创建的云硬盘支持通知过期但不自动续费。DISABLE_NOTIFY_AND_MANUAL_RENEW 模式则代表所创建的云硬盘不通知过期也不自动续费。 |
aspid | 指定快照 ID,创建云硬盘后自动绑定此快照策略,绑定失败不影响创建。 |
使用云硬盘创建多实例 StatefulSet,YAML 文件示例如下:
资源对象的 apiVersion 可能因为您集群的 Kubernetes 版本不同而不同,您可通过
kubectl api-versions
命令查看当前资源对象的 apiVersion。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates: # 自动创建pvc,进而自动创建pv
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: cloud-premium
resources:
requests:
storage: 10Gi
本页内容是否解决了您的问题?