随笔 - 307  文章 - 0  评论 - 5  阅读 - 4264

Pod的删除过程

Kubernetes 中 Pod 删除的详细流程

在 Kubernetes(简称 K8s)中,删除一个 Pod 是一个多阶段的过程,涉及多个组件的协同工作。以下是 Pod 删除过程中发生的主要事件:


1. 发出删除命令

  • 用户通过命令行工具或 API 接口发出删除请求,例如:
    kubectl delete pod <pod-name>
    
  • 删除命令也可以通过控制器(如 Deployment 或 StatefulSet)间接触发,控制器会根据其管理逻辑调整 Pod 的数量。

2. API Server 响应

  • Kubernetes API Server 接收到删除请求后,会:
    • 验证用户权限,确保请求合法。
    • 将指定的 Pod 标记为 Terminating 状态。
    • 在 Pod 的元数据中添加删除时间戳(deletionTimestamp),用于触发后续操作。

3. 清理资源

在 Pod 进入 Terminating 状态后,多个清理操作开始执行:

  1. 控制器的响应:

    • 如果 Pod 是由控制器(如 Deployment 或 StatefulSet)管理的,控制器会检测到 Pod 被删除,立即启动新的 Pod 以保持期望的副本数。
  2. 生命周期钩子:

    • kubelet 检测到 Pod 状态变化后,会调用定义的生命周期钩子函数,如 preStop Hook
      这一过程为容器提供了一个优雅的终止机会,可用于执行以下任务:
      • 保存数据或日志。
      • 通知其他服务当前实例即将关闭。
      • 关闭连接或释放资源。
  3. 终止容器:

    • kubelet 与容器运行时(如 Docker、containerd)协作,按照以下顺序终止容器:
      • 首先向容器发送 SIGTERM 信号,触发正常终止流程。
      • 如果容器在设定的宽限时间(默认 30 秒,可通过 terminationGracePeriodSeconds 配置)内未完成终止,kubelet 将发送 SIGKILL 信号强制终止容器。
    • 一旦容器终止,kubelet 释放 Pod 在节点上的所有资源,包括:
      • CPU 和内存分配。
      • 磁盘存储和临时数据。
      • 网络端口及连接。

4. 垃圾回收

  1. 容器数据清理:

    • kubelet 会清理已终止容器的所有本地数据,包括镜像缓存、日志文件和运行时产生的临时文件。
  2. 持久化卷(PV)处理:

    • 如果 Pod 使用了 PersistentVolume(PV),卷的内容通常不会因 Pod 删除而丢失。
    • 卷的回收策略决定了数据的最终处理方式:
      • Retain:保留数据以供后续使用。
      • Delete:删除卷及其数据。
      • Recycle:清理卷内容以供重新分配。

5. 从 etcd 中删除记录

  • 当 kubelet 完成所有清理操作后,Kubernetes API Server 会将 Pod 的状态从 etcd 中移除。
  • etcd 是 Kubernetes 的分布式存储系统,记录集群的所有状态信息。

6. 更新集群状态

  1. 控制器调整:

    • Deployment 或 StatefulSet 等控制器会检测到 Pod 的减少,并根据定义的副本数启动新的 Pod。
    • 对于非控制器管理的 Pod(如独立 Pod),则不会有自动替换。
  2. 负载均衡更新:

    • 如果 Pod 与 Service 关联,Service 的 Endpoints 列表会自动更新,移除已删除 Pod 的 IP。
    • 负载均衡器会重新配置,确保流量只分发到健康的 Pod。

总结

在 Kubernetes 中,删除一个 Pod 是一个细致的流程,目的是在释放资源的同时,尽可能保证服务的连续性。关键步骤包括:

  1. 发出删除请求并标记 Pod 为 Terminating
  2. 调用生命周期钩子和清理资源。
  3. 终止容器,释放节点资源。
  4. 控制器和负载均衡器调整,确保集群状态与期望一致。

通过以上机制,Kubernetes 实现了优雅的 Pod 删除过程和资源管理。

posted on   Leo-Yide  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示