动态供给存储
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 属于正常现象,别当成故障处理。