对象定位
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 | 驱动专属参数(池、类型、副本数) | 键值不受支持时制备失败 |
| reclaimPolicy | PV 回收行为 | 误设 Delete 会随删 PVC 删数据 |
| allowVolumeExpansion | 是否允许扩容 | 未开启时无法改大申请量 |
| volumeBindingMode | 何时制备卷 | 跨区集群用 Immediate 易造成调度僵局 |
provisioner 名称必须与集群里已部署的 CSI 或云驱动一致,配置前先查对应驱动的文档与已注册的 CSIDriver 对象。
StorageClass 的参数是创建时快照语义:修改类参数不会改变已存在的 PV,只影响后续新建的卷。
制定存储类时的判断
- 先确认驱动能力:RWO 还是 RWX、是否支持在线扩容、能否跨可用区,决定了类怎么设计
- 跨区集群默认用 WaitForFirstConsumer,让卷跟随调度结果创建,避免拓扑冲突
- 重要数据把 reclaimPolicy 设为 Retain,删除 PVC 不连带删底层存储,回收动作由人确认
- 默认类只设一个:多个默认类会让未指定类的 PVC 行为不确定,创建时直接失败或随机选择