用标签挑卷
PVC 除了按容量与访问模式匹配 PV,还能用 selector 指定标签选择器:只有带相应标签的 PV 才会进入绑定候选。常见用途是复用预先创建好的盘、把高性能与普通存储分开、或把数据固定在特定机房。它作用于静态 PV 的匹配环节;由存储类动态供应出来的卷不经过这套筛选,这一点很容易记混,也是配置后「没起作用」的常见原因。
基本信息
| 适用对象 | 各版本的 PV 与 PVC |
|---|---|
| 关键字段 | spec.selector.matchLabels 与 matchExpressions |
| 生效范围 | 静态供应场景下的绑定匹配 |
| 动态供应 | 由存储类参数控制,selector 不参与筛选 |
| 观察入口 | 未绑定时 describe PVC 会给出匹配失败的原因 |
典型使用场景
- 复用预置盘:接管已有数据的卷时精确指定目标
- 存储分级:按性能与介质标签把关键业务放到合适的盘上
- 机房固定:把卷限制在特定可用区或机房,配合节点亲和
- 隔离用途:为审计、备份等特殊用途保留专属卷
- 迁移过渡:静态卷逐步纳入声明式管理时的过渡手段
声明与打标签
声明与打标签
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gold-data
namespace: prod
spec:
storageClassName: manual # 静态卷常用固定类名或不设类
selector:
matchLabels:
tier: gold # 只与带该标签的 PV 绑定
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi给 PV 打标签并核对
给 PV 打标签并核对
kubectl label pv pv-gold-01 tier=gold
kubectl get pv -l tier=gold
kubectl get pv -o custom-columns='PV:.metadata.name,CAP:.spec.capacity.storage,MODE:.spec.accessModes,SC:.spec.storageClassName'
kubectl describe pvc gold-data -n prod | tail -20场景与要点
| 场景 | 做法 | 注意 |
|---|---|---|
| 复用预置盘 | 给 PV 打标签并在 PVC 中匹配 | 标签写错就一直未绑定 |
| 存储分级 | 按性能标签分组 | 动态供应需按存储类划分 |
| 固定机房 | 按地域标签选择 | 需与节点亲和一起考虑 |
| 动态供应 | selector 不参与筛选 | 要靠存储类参数区分 |
静态卷的标签最好由创建流程统一维护:手工打标签容易漏,而漏掉的卷在 PVC 眼里等于不存在,排查时容易怀疑存储后端。
PVC 长期未绑定时先看 describe 输出里的匹配说明,可以直接区分是容量、访问模式还是标签条件没有满足。