首页/云/云与容器速查/StorageClass 动态供给
Kubernetes68 条

StorageClass 动态供给

声明『用哪种存储怎么创建』:provisioner 负责动态生成 PV;WaitForFirstConsumer 等 Pod 调度后再建卷,避免跨可用区绑定失败,是生产默认推荐。

云与容器速查云更新于 2026-10-13

动态供给存储

StorageClass 声明「用哪种存储、怎么创建」:PVC 引用某个 class 后,由对应的 provisioner 动态创建 PV,不需要人工预先建卷。生产上更推荐 WaitForFirstConsumer 绑定模式,让卷在 Pod 调度完成之后再创建,避免多可用区集群里出现卷建在 A 区、Pod 被调度到 B 区而无法挂载的情况。

基本信息

作用PVC 引用 class 后由 provisioner 自动创建 PV,无需手工建卷
默认类用注解声明默认 StorageClass,集群内建议只保留一个默认
绑定策略Immediate 立即绑定;WaitForFirstConsumer 等调度后再创建
回收策略Delete 为默认;Retain 保留底层存储
扩容allowVolumeExpansion 开启后支持在线扩容
参数parameters 中的存储类型与性能档位由具体 CSI 驱动定义

典型使用场景

  • 为不同性能需求提供多档存储,例如高性能与容量型各一个 class
  • 有状态服务按业务重要性声明不同档位的存储
  • 多可用区集群使用延迟绑定,避免跨可用区挂载失败
  • 重要数据使用保留回收策略,防止误删 PVC 连带删除存储
  • 开启在线扩容以应对数据增长,减少停机迁移次数

StorageClass 示例

StorageClass 示例
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: diskplugin.csi.example.com     # 实际创建卷的 CSI 驱动
parameters:
  type: ssd                                 # 具体参数由驱动定义
reclaimPolicy: Delete                       # 重要数据改为 Retain
allowVolumeExpansion: true                  # 允许在线扩容
volumeBindingMode: WaitForFirstConsumer     # 等 Pod 调度后再创建卷

关键字段读法

字段含义异常表现
provisioner实际创建卷的 CSI 驱动驱动未部署时 PVC 一直处于 Pending
volumeBindingMode立即绑定或延迟绑定立即绑定在多可用区集群容易跨区挂载失败
reclaimPolicy删除或保留底层存储删除策略下删 PVC 即删底层卷
allowVolumeExpansion是否支持在线扩容为 false 时扩容请求被直接拒绝
默认类注解未指定 class 时的兜底选择存在多个默认类时绑定结果不可预期
Delete 回收策略下删除 PVC 等于删除底层云盘:重要数据应把回收策略设为 Retain 或另行备份,不要把「删了再建」当作日常运维动作,尤其是承载数据库的卷。
排查顺序:PVC 处于 Pending 时先看事件(驱动缺失、配额不足、没有满足条件的节点),再看 StorageClass 的绑定模式与参数。延迟绑定模式下 PVC 在 Pod 创建之前一直 Pending 属于正常现象,别当成故障处理。

易错点

  • Immediate 模式用于多可用区集群:卷建在 A 区而 Pod 调度到 B 区,挂载直接失败
  • 集群里存在多个默认 class:PVC 不写名字时报错,或绑定到意料外的存储
  • 用 Delete 回收策略承载重要数据:误删 PVC 连带删除底层卷,数据无法恢复
  • 依赖在线扩容却没开启该能力:扩容请求被拒,只能新建卷并迁移数据

数据来源与参考

  • Kubernetes Docs:Storage Classes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌