首页/云/Kubernetes 速查/StorageClass 动态制备
配置与存储54 条

StorageClass 动态制备

声明「用哪个制备器、什么参数」的模板:PVC 引用后由外部制备器自动创建 PV,免去手工建卷;参数键值随驱动不同。

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

对象定位

StorageClass 是动态制备的模板:声明用哪个 provisioner(CSI 驱动)、传什么参数、回收策略、是否允许扩容、绑定模式。适用平台是 Kubernetes。PVC 引用它之后,集群里的制备器会按需创建出 PV,省去管理员手工建卷的环节。参数键值高度依赖具体驱动,写之前必须查对应驱动的文档,不能照搬别家的配置。

基本信息

适用平台Kubernetes,集群级对象(storage.k8s.io/v1)
要素provisioner、parameters、reclaimPolicy、allowVolumeExpansion、volumeBindingMode
绑定模式Immediate 立即制备;WaitForFirstConsumer 等 Pod 调度后再制备
默认类通过注解 storageclass.kubernetes.io/is-default-class 指定

典型使用场景

  • 按性能分层:为 SSD 与普通盘各建一个类,业务按需选择
  • 多可用区部署:用 WaitForFirstConsumer 让卷跟随 Pod 所在的可用区创建
  • 环境对齐:云上与自建集群各自定义同名类,清单跨环境复用
  • 开启扩容:为需要在线扩容的服务开启 allowVolumeExpansion
  • 收敛删除行为:对重要数据把回收策略设为 Retain,避免误删底层卷

StorageClass 示例

StorageClass 示例
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: rbd.csi.ceph.com
parameters:
  pool: kube
  imageFeatures: layering
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

查询与核对

查询与核对
kubectl get storageclass                                   # 看有哪些类与默认标记
kubectl describe sc fast-ssd                               # provisioner 与参数
kubectl get sc fast-ssd -o jsonpath='{.volumeBindingMode}'  # 绑定模式
kubectl get pvc -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,SC:.spec.storageClassName'

字段速读

字段作用写错后果
provisioner指定由哪个驱动供卷驱动不存在时 PVC 一直 Pending
parameters驱动专属参数(池、类型、副本数)键值不受支持时制备失败
reclaimPolicyPV 回收行为误设 Delete 会随删 PVC 删数据
allowVolumeExpansion是否允许扩容未开启时无法改大申请量
volumeBindingMode何时制备卷跨区集群用 Immediate 易造成调度僵局
provisioner 名称必须与集群里已部署的 CSI 或云驱动一致,配置前先查对应驱动的文档与已注册的 CSIDriver 对象。
StorageClass 的参数是创建时快照语义:修改类参数不会改变已存在的 PV,只影响后续新建的卷。

制定存储类时的判断

  • 先确认驱动能力:RWO 还是 RWX、是否支持在线扩容、能否跨可用区,决定了类怎么设计
  • 跨区集群默认用 WaitForFirstConsumer,让卷跟随调度结果创建,避免拓扑冲突
  • 重要数据把 reclaimPolicy 设为 Retain,删除 PVC 不连带删底层存储,回收动作由人确认
  • 默认类只设一个:多个默认类会让未指定类的 PVC 行为不确定,创建时直接失败或随机选择

易错点

  • 把云厂商的 StorageClass 复制到自建集群:provisioner 不存在时不供卷,PVC 一直 Pending
  • allowVolumeExpansion 未开启时后续无法改大 PVC 申请量,需要新建卷并迁移数据
  • 跨可用区集群用 Immediate 绑定模式:卷先在某区创建,Pod 无法调度过去,形成「卷等 Pod、Pod 等卷」的僵局
  • 修改 StorageClass 参数以为能改变已有卷:参数只对新建卷生效,存量 PV 需单独处理

数据来源与参考

  • Kubernetes 官方文档 · Storage Classes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌