操作场景
当云硬盘使用率超过阈值后,TKE 支持自动扩容 PV、对应的云硬盘及文件系统,无需重启 Pod 即可完成扩容,避免因磁盘空间不足导致业务中断。
自动扩容由独立的 cbs-auto-expander 组件(kube-system 命名空间下 DaemonSet)实现。该组件定期(默认5分钟)巡检本节点已挂载且开启自动扩容的云硬盘,当使用率超过阈值时,自动修改 PVC 的存储容量请求,触发 CBS-CSI 既有扩容链路,完成云硬盘与文件系统的自动扩容。
前提条件
已创建 1.20 或以上版本的 TKE 集群。
已将 CBS-CSI 升级至 v1.1.19 及以上版本并开启自动扩容功能(默认关闭)。
(可选)为避免扩容失败导致数据丢失,可以在扩容前 使用快照备份数据。
1.20 以下集群不支持在线扩容,需升级至 1.20 及以上版本。
创建允许自动扩容的 StorageClass
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: cbs-auto-expandannotations:# 开启自动扩容(必须)cbs.csi.tencentcloud.com/auto-expand-enabled: "true"# 触发阈值:使用率超过 80% 时触发扩容cbs.csi.tencentcloud.com/auto-expand-threshold: "80"# 扩容策略:percent(按百分比)或 absolute(按固定 Gi)cbs.csi.tencentcloud.com/auto-expand-scale-type: "percent"# 扩容增量:percent 模式下为当前容量的 50%cbs.csi.tencentcloud.com/auto-expand-scale: "50"# 扩容上限(Gi)cbs.csi.tencentcloud.com/auto-expand-limit: "2000"# 冷却时间(秒),同一 PVC 两次扩容的最小间隔cbs.csi.tencentcloud.com/auto-expand-cooldown: "300"provisioner: com.tencent.cloud.csi.cbsparameters:diskType: CLOUD_PREMIUM# 允许扩容allowVolumeExpansion: truereclaimPolicy: DeletevolumeBindingMode: WaitForFirstConsumer
为特定 PVC 配置独立扩容策略
可在 PVC 的 metadata.annotations 上配置独立策略,PVC 注解优先级高于 StorageClass。示例如下:
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: critical-pvcannotations:# 开启自动扩容(必须)cbs.csi.tencentcloud.com/auto-expand-enabled: "true"# 触发阈值:使用率超过 70% 时触发扩容cbs.csi.tencentcloud.com/auto-expand-threshold: "70"# 扩容策略:absolute(按固定 Gi)cbs.csi.tencentcloud.com/auto-expand-scale-type: "absolute"# 扩容增量:每次固定扩容 200Gicbs.csi.tencentcloud.com/auto-expand-scale: "200"# 扩容上限(Gi)cbs.csi.tencentcloud.com/auto-expand-limit: "4000"# 冷却时间(秒),同一 PVC 两次扩容的最小间隔cbs.csi.tencentcloud.com/auto-expand-cooldown: "600"spec:storageClassName: cbs-auto-expandresources:requests:storage: 100Gi
注意:
当 PVC 上设置 cbs.csi.tencentcloud.com/auto-expand-enabled: "true" 时,所有策略参数都从 PVC 读取,不会回退到 StorageClass。建议要么全部在 PVC 上显式配置,要么全部依赖 StorageClass。
当 StorageClass 已全局开启自动扩容时,如需禁用某个 PVC,可在该 PVC 上添加注解 cbs.csi.tencentcloud.com/auto-expand-enabled: "false"。
常见问题
1. 使用率已超过阈值,但未触发扩容?
请逐项排查:
kubectl get pvc <pvc-name> 确认 PVC 处于 Bound 状态。
kubectl get pv <pv-name> 确认 PV 的 CSI Driver 为 com.tencent.cloud.csi.cbs。
kubectl get pvc <pvc-name> -o yaml 确认 PVC 或其 StorageClass 上存在 cbs.csi.tencentcloud.com/auto-expand-enabled: "true" 注解。
确认 PVC 未处于冷却期(检查 last-expand-time 注解,默认冷却 5 分钟)。
确认 PVC 的 PersistentVolumeClaimResizing condition 不为 True。
kubectl -n kube-system logs -l app=cbs-auto-expander 查看组件日志是否有报错。
确认组件部署时的 --kubelet-root-dir 参数与集群实际 kubelet 根目录一致。
2. 自动扩容后文件系统没有变大?
kubectl get pvc <pvc-name> 确认 PVC 容量已更新。
kubectl describe pvc <pvc-name> 查看 FileSystemResizePending condition 状态。
kubectl -n kube-system logs -l component=csi-resizer 查看 external-resizer 日志。
3. 如何临时禁用某个 PVC 的自动扩容?
执行以下命令为 PVC 添加禁用注解(不会删除已有扩容记录):
kubectl annotate pvc <pvc-name> cbs.csi.tencentcloud.com/auto-expand-enabled=false