首页/云/Kubernetes 速查/PV 生命周期状态流转
配置与存储54 条

PV 生命周期状态流转

Available → Bound → Released → Failed:理解状态含义,才能判断卷还在不在、数据能否复用、下一步该处理哪个对象。

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

PV 生命周期是什么

PV 是集群级的存储对象,PVC 是命名空间里的申请,两者一对一绑定。PV 的状态描述它在绑定与回收链条上的位置:Available 表示空闲待绑,Bound 表示已有 PVC,Released 表示 PVC 已删除但卷还没回收,Failed 表示自动回收失败。真正决定删除 PVC 之后卷会怎样的是回收策略,Delete 会连底层存储一起删,Retain 会留下数据等你手工处理。

基本信息

PV 作用域集群级对象,不隶属命名空间
PVC 作用域命名空间级,与 PV 一对一绑定
回收策略Delete 删除底层存储,Retain 保留数据,Recycle 已废弃
发布阶段Available、Bound、Released、Failed 四个阶段
绑定条件容量、访问模式、存储类与卷模式都要匹配

状态与处置

状态含义下一步动作
Available空闲可绑定创建 PVC 或按卷名静态指定
Bound已绑定某个 PVC用 pvc.spec.volumeName 反查归属
ReleasedPVC 已删除,卷未回收备份数据后手工回收或重新引入
Failed自动回收失败看事件与底层存储侧状态
Pending(PVC)尚未完成绑定等待供应或修正匹配条件

查看与手工回收

查看与手工回收
kubectl get pv,pvc -A                       # 总览绑定关系与状态
kubectl describe pv pvc-8f3d | sed -n '/Status:/,+3p'    # 看阶段与回收策略
kubectl get pv pvc-8f3d -o jsonpath='{.spec.claimRef.name}{"\n"}'   # Released 卷指向的旧 PVC
kubectl patch pv pvc-8f3d -p '{"spec":{"claimRef":null}}'          # 清引用使其回到 Available
kubectl get pv -o custom-columns='NAME:.metadata.name,CLAIM:.spec.claimRef.name,POLICY:.spec.persistentVolumeReclaimPolicy'

典型使用场景

  • 清理命名空间后的收尾:PVC 随命名空间删除,PV 的去留由回收策略决定,需要逐个确认
  • 数据保留:生产数据卷用 Retain,避免误删 PVC 时连带删掉后端存储
  • 卷复用:Released 卷要重新被使用,必须先让状态回到可绑定的样子
  • 容量与访问模式排查:PVC 长期 Pending 时对比 PV 与 PVC 的匹配条件
  • 审计存储资产:按回收策略与状态统计空闲卷,找出长期占资源未使用的卷
官方建议的 Retain 卷恢复流程是「先备份,再删除 PV 对象(保留后端存储),然后按静态卷方式新建指向同一存储的 PV」。直接清空 claimRef 能更快让卷回到 Available,但旧数据仍在卷上,新的 PVC 挂载后会直接看到这些数据。
删 PVC 前核对 PV 的回收策略:Delete 策略下删 PVC 会连带删除底层存储,数据无法通过 Kubernetes 恢复。回收策略写错是存储类事故里最常见的一类。

易错点

  • 删 PVC 前不看回收策略:Delete 会把底层卷一起销毁,事后只能靠备份恢复
  • 把 Released 卷直接复用:旧数据仍在卷上,新业务挂载后可能读到上一任的数据
  • Failed 状态下反复重建 PVC:根因多在底层存储或云接口,改 Kubernetes 对象不解决问题
  • 以为容量够就能绑定:访问模式、存储类名与卷模式任一不匹配都会绑不上
  • 手工删除 PV 对象当清理:Retain 卷的后端存储不会随之释放,账单上仍有资源在跑

数据来源与参考

  • Kubernetes 官方文档 · Persistent Volumes(阶段与回收)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌