配置与存储54 条

PVC 扩容

在 StorageClass 开启 allowVolumeExpansion 的前提下,改大 PVC 的 requests.storage;文件系统扩展可能需要重启 Pod 才完成。

Kubernetes 速查云更新于 2026-10-13

PVC 扩容是什么

PVC 扩容指在不重建存储的前提下把卷改大:改大 spec.resources.requests.storage 后,CSI 驱动或 in-tree 插件先向存储侧申请扩容,再把文件系统扩到新容量。它有两个硬前提——StorageClass 必须开启 allowVolumeExpansion,且只允许增大不允许缩小。文件系统那一层有时要等 Pod 重启或重新挂载才完成。

基本信息

前提条件StorageClass 中 allowVolumeExpansion: true
操作命令kubectl patch pvc <名称> -p 改大 requests.storage
方向限制只支持扩大,缩小会被 API Server 拒绝
生效层次先扩底层卷,再扩文件系统
完成时机部分驱动需重启使用该卷的 Pod 才完成文件系统扩展

典型使用场景

  • 数据库磁盘告急:容量接近上限又无停机窗口时,先在线扩卷再安排数据整理
  • 日志与队列堆积:临时上调容量争取处理时间,事后配合保留策略回收
  • 容量规划调整:业务增长后把模板与已有 PVC 的容量口径一起上调,避免后续副本继续踩坑
  • 扩容演练与验收:验证存储类是否真的支持在线扩容,避免故障当天才发现要停机
  • 多副本有状态服务:逐条扩容每个副本的 PVC,而非只改 StatefulSet 模板

扩容操作与观察

扩容操作与观察
kubectl get sc fast-ssd -o jsonpath='{.allowVolumeExpansion}'    # 先确认前提,返回 true 才能扩
kubectl patch pvc mysql-data -p '{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}'
kubectl get pvc mysql-data -w                                     # STATUS 与 CAPACITY 的变化
kubectl describe pvc mysql-data | sed -n '/Conditions:/,$p'       # FileSystemResizePending 等原文在此
kubectl get events --field-selector reason=VolumeResizeFailed     # 存储侧拒绝的理由

状态字段读法

观察点含义正常进展
spec.resources.requests.storage你声明的期望容量patch 后立即变成新值
status.capacity.storage存储侧实际提供的容量稍后跟上,长期不变说明底层卷没扩
ConditionsFileSystemResizePending 表示待扩文件系统重启 Pod 后消失
EventsVolumeResizeFailed 记录失败原因多为存储配额、驱动不支持或类型不符
Pod 内 df -h容器看到的文件系统大小最终以这里为准,两者都可能滞后
常见滞后现象是 status.capacity 已变大而 Pod 内 df 不变:多数文件系统类型只能在挂载时扩展,此时按驱动文档重启使用该卷的工作负载即可。StatefulSet 场景逐个副本操作,注意一次只动一个,避免影响可用性。
缩容不做支持:把 requests.storage 改小会被 API Server 拒绝。需要缩容只能新建小卷、迁移数据并切换,属于有计划的数据搬迁,而不是一条命令。

易错点

  • 忘记确认 allowVolumeExpansion 就 patch:请求可能被静默忽略或长期停在原地,而业务仍在往满盘上写数据
  • 只看 kubectl get pvc 的 CAPACITY 就宣布完成:Pod 内文件系统可能还没扩,进程仍会写满
  • 一次性给 StatefulSet 所有副本同时扩卷:存储侧并发操作可能触发限流或部分失败,应逐个进行
  • 把扩容当成解决磁盘写满的终点:不清理日志与临时文件,容量很快再次打满,扩容只是延后故障

数据来源与参考

  • Kubernetes 官方文档 · 扩容 PersistentVolumeClaim
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌