回收策略是什么
persistentVolumeReclaimPolicy 决定 PV 与 PVC 的绑定关系解除后,底层存储怎么处理。Delete 会连同底层卷一起删除,适合随手可重建的数据;Retain 只把 PV 状态变为 Released,底层数据与卷都保留下来,等管理员核对后再决定恢复或清理。动态供应时该字段默认继承 StorageClass,也可以单独修改某个 PV 的 spec 来调整。
两种策略对比
| 策略 | 行为 | 典型场景 |
|---|---|---|
| Delete | PVC 删除后自动删除 PV 与底层卷 | 云盘、缓存、可重新生成的中间数据 |
| Retain | 保留 PV 与数据,状态变 Released | 数据库、需要人工核对后再清理的数据 |
| Recycle | 已废弃,不再推荐 | 旧集群遗留配置,迁移时应改掉 |
典型使用场景
- 数据库持久卷:用 Retain 保证误删 PVC 后数据仍在,争取恢复窗口
- 临时构建缓存:用 Delete 让资源随 PVC 自动回收,避免长期占用与计费
- 存储类统一治理:在 StorageClass 上设定默认策略,避免逐个 PV 手工调整
- 事故复盘:确认误删后数据是否还在,取决于当时生效的回收策略
- 存量盘点:找出长期处于 Released 的卷,评估是恢复还是清理
查看与修改
查看与修改
kubectl get pv # 先看 STATUS 与 RECLAIMPOLICY 两列
kubectl get pv pvc-8f3d -o jsonpath='{.spec.persistentVolumeReclaimPolicy}'
kubectl patch pv pvc-8f3d -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' # 改单个 PV
kubectl get sc fast-ssd -o jsonpath='{.reclaimPolicy}' # 动态供应时的默认来源
kubectl get pv | awk '$5=="Released"' # 盘点处于 Released 的卷PV 列表读法
| 列 | 含义 | 关注点 |
|---|---|---|
| STATUS | Available / Bound / Released / Failed | Released 表示已解绑但未回收 |
| RECLAIMPOLICY | Delete 或 Retain | 与数据重要性是否匹配 |
| CLAIM | 绑定的命名空间与 PVC 名 | Released 时仍显示旧 claim 引用 |
| STORAGECLASS | 来源存储类 | 决定该卷的一些默认行为 |
Retain 的 PV 变成 Released 后仍带着旧的 claimRef 指向已删除的 PVC,因此不能被新 PVC 自动绑定。要复用通常需要备份数据后重建卷,或用新 PVC 按卷名显式绑定,且必须确认旧数据是否需要保留。
生产数据库卷使用 Delete 策略时,删除 PVC 就等于删除数据本身。操作前先确认 spec.persistentVolumeReclaimPolicy 的实际值,并核对是否有可用备份,这类操作没有撤销路径。