帮你快速理解、总结文档立即下载

自动扩容

最近更新时间:2026-09-24 11:17:58
我的收藏

操作场景

当云硬盘使用率超过阈值后,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/v1
kind: StorageClass
metadata:
name: cbs-auto-expand
annotations:
# 开启自动扩容(必须)
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.cbs
parameters:
diskType: CLOUD_PREMIUM
# 允许扩容
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

为特定 PVC 配置独立扩容策略

可在 PVC 的 metadata.annotations 上配置独立策略,PVC 注解优先级高于 StorageClass。示例如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: critical-pvc
annotations:
# 开启自动扩容(必须)
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"
# 扩容增量:每次固定扩容 200Gi
cbs.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-expand
resources:
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