当前位置: 首页 > news >正文

Pod、 PVC 、PV的刪除順序

  1. 先删除 Pod
  2. 再删除 PVC
  3. 最后删除 PV

简单口诀:Pod -> PVC -> PV
为什么是这个顺序?深入理解删除机制
要理解这个顺序,你需要明白 Kubernetes 中这些资源之间的保护和依赖关系,尤其是 StorageClass 的 reclaimPolicy(回收策略)和 PVC 的保护机制。

1. 先删 Pod (kubectl delete pod)

目的:解除 PVC 的“使用中”状态。
原理:PVC 一旦被 Pod 挂载,就会受到使用保护(Protection)。Kubernetes 会阻止删除正在被 Pod 使用的 PVC。你必须先终止使用该 PVC 的 Pod,Kubernetes 才会解除这个保护状态。
注意:如果您的 Pod 由 Deployment、StatefulSet 等控制器管理,直接删除 Pod 后控制器可能会立即重建一个新的 Pod,它又会去绑定同一个 PVC。在这种情况下,您需要先删除或缩放(scale)控制器(例如 kubectl delete deployment ),然后再进行后续操作。

2. 再删 PVC (kubectl delete pvc)

目的:触发 PV 的回收策略。
原理:PVC 是用户对存储的请求,而 PV 是实际的存储资源。PV 的生命周期取决于其回收策略 (reclaimPolicy):
Delete(默认策略,尤其适用于动态供给):删除 PVC 后,与其绑定的 PV 会被自动删除,并且后端存储(如 AWS EBS、GCP PD)上的数据也可能被一并删除。
Retain(常用于静态供给或需要保留数据的情况):删除 PVC 后,PV 不会被删除,但其状态会变为 Released。数据会被保留在底层存储上,但该 PV 无法再被新的 PVC 绑定(因为数据可能还在,需要管理员手动清理和回收)。

3. 最后删 PV (kubectl delete pv)

目的:手动清理处于 Released 状态的 PV(仅对 Retain 策略必要)。
原理:对于回收策略为 Retain 的 PV,在删除 PVC 后,PV 会变成 Released 状态。此时,如果你想彻底删除这个 PV 和它背后的存储资源,必须手动执行删除 PV 的操作。删除 PV 通常也会触发对后端存储卷的删除操作(具体取决于 PV 的配置和存储插件)。

不同场景下的操作流程

场景一:动态供给(StorageClass,默认 reclaimPolicy: Delete)

这是最常见的情况,例如使用 AWS EBS、Azure Disk 等。

  1. 删除 Pod(或其控制器,如 Deployment):
    kubectl delete deployment/my-app-deployment
  2. 删除 PVC:(删除 PVC 后,Kubernetes 会自动删除对应的 PV 和云存储卷)
    kubectl delete pvc/my-app-pvc
  3. 无需手动删除 PV,系统已自动处理。

场景二:静态供给 或 reclaimPolicy: Retain

当你需要保留数据或手动管理存储资源时。

  1. 删除 Pod(或其控制器):
    kubectl delete statefulset/my-app-statefulset
  2. 删除 PVC:
    kubectl delete pvc/my-app-pvc
    此时,PV 状态变为 Released,但数据和存储卷都还在。
  3. (可选)手动删除 PV:如果你确认数据不再需要,想彻底清理。
    kubectl delete pv/my-app-pv
    根据 PV 的配置,这可能也会删除底层存储。

错误顺序及后果

错误顺序一:先删 PV

操作:PV -> PVC -> Pod
后果:如果 PV 先被删除,而 PVC 仍然存在且处于 Bound 状态,那么 PVC 会失去其绑定的目标,变成一个“悬空”的声明。Pod 会因为 PVC 无法找到有效的 PV 而一直处于 Pending 状态。你需要手动清理这个 PVC。

错误顺序二:先删 PVC(而不删 Pod)

操作:PVC -> Pod -> PV
后果:由于 Pod 还在运行并使用着存储,Kubernetes 的 保护机制会阻止 PVC 被立即删除。PVC 的状态会变为 Terminating 但一直无法被真正删除,除非你强制删除。这会阻塞整个清理流程。

如果卡在 Terminating 状态怎么办?

如果你不小心先删除了 PVC 或 PV,资源可能会卡在 Terminating 状态。此时可以尝试:

  1. 首先,检查并删除引用它的 Pod。这是最根本的解决方法。
  2. 如果确认所有 Pod 都已删除但仍卡住,可以尝试使用 强制删除(谨慎操作!):

kubectl delete pvc --force --grace-period=0 kubectl delete pvc --force --grace-period=0
注意:强制删除可能在某些情况下导致资源无法完全清理。

总结

  1. 操作顺序 适用场景 结果
  2. Pod -> PVC 动态供给 (reclaimPolicy: Delete) PV 和底层存储被自动删除
  3. Pod -> PVC -> PV 静态供给或 reclaimPolicy: Retain 数据保留,PV 进入 Released 状态,需手动删除 PV 以清理
  4. PV -> ... 任何情况(错误) PVC 悬空,Pod 无法启动
  5. PVC -> Pod 任何情况(错误) PVC 卡在 Terminating,删除被阻止

最佳实践:始终遵循 先停应用(Pod),再删声明(PVC),最后处理卷(PV) 的原则。

http://www.jsqmd.com/news/4885/

相关文章:

  • python基本脚本要素
  • Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium - 指南
  • 完整教程:AI 术语通俗词典:Diffusion Models(扩散模型)
  • pip安装依赖包报错内容为User defined options,Native files 如何解决
  • edu 107 E(概率期望, dp)
  • 2025 年空气离合器生产厂家推荐榜:电网冲击缓解技术与可靠性测评,单片空气离合器,多片空气离合器,空气离合器摩擦片,空气离合器密封件公司推荐
  • Spring MVC的双向数据绑定
  • 抽象化编程(Abstraction in Programming)
  • 详细介绍:198种组合算法+优化BiLSTM神经网络+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
  • STM32定时器(寄存器与HAL库实现) - 实践
  • 微前端中iframe集成方式与应用微前端框架方式对比
  • 配置RedisTemplate序列化机制
  • 优化器(Optimizer)
  • 2025 年气动离合器品牌推荐排行榜发布,聚焦博得 PLC 控制技术与降本优势,常开式气动离合器,多片式气动离合器,气动离合器电磁阀,气动离合器气缸,单片式气动离合器工厂推荐
  • Kubernetes Ingress与OpenShift Router的比较分析
  • Kubernetes日志管理:使用Loki进行日志采集
  • PySimpleGUI 4.60.5完整控件列表
  • 深入解析:Go基础:模块化管理为什么能够提升研发效能?
  • 2025黄鹤杯线上wp
  • 一条频率信道是什么?
  • Dropout
  • 经典排序算法深度解析 - 实践
  • 深入解析:阿里云推出全球首个全模态AI模型Qwen3-Omni,实现文本、图像、音视频端到端处理
  • 第十篇:模块一总结与答疑:如何养成良好的编码习惯和调试思维 - 实践
  • Java网络编程(七):NIO实战构建高性能Socket服务器 - 实践
  • 完整教程:【大模型理论篇】用于时间序列预测的纯解码器基础模型TimesFM-2.5
  • Unigine整合Myra UI Library全纪录(3):整合与优化
  • MOS管 SI2302 KX2302 集成上下拉电阻,优化线路电路,降低物料成本
  • Tita 项目经营一体化建筑业企业解决方案
  • CD78.【C++ Dev】以AVL任务的bug讲讲调试技巧