首页 > 解决方案 > 终止 Pod 时,kubelet 是否并行停止容器?

问题描述

据我所知,docker stop即使一次应用多个容器,也会一个接一个地停止容器。那么kubelet行为是这样的吗?

标签: dockerkubernetes

解决方案


Pod生命周期页面上完美描述了 Pod 终止

  1. 用户发送命令删除 Pod,默认宽限期(30 秒)

  2. API 服务器中的 Pod 会根据 Pod 被视为“死亡”的时间以及宽限期进行更新。

  3. Pod 在客户端命令中列出时显示为“Terminating”

  4. (与 3 同时)当 Kubelet 看到一个 Pod 被标记为终止,因为 2 中的时间已经设置,它开始 Pod 关闭过程。

    1. 如果 Pod 的容器之一定义了 preStop 挂钩,则会在容器内部调用它。如果在宽限期到期后 preStop 挂钩仍在运行,则使用一个小的(2 秒)延长宽限期调用第 2 步。

    2. 容器被发送 TERM 信号。请注意,并非 Pod 中的所有容器都会同时收到 TERM 信号,并且如果它们关闭的顺序很重要,则每个容器都可能需要一个 preStop 钩子。

  5. (与 3 同时) Pod 从服务的端点列表中删除,并且不再被视为复制控制器正在运行的 Pod 集的一部分。缓慢关闭的 Pod 无法继续为流量提供服务,因为负载均衡器(如服务代理)将它们从其轮换中移除。

  6. 当宽限期到期时,任何仍在 Pod 中运行的进程都会被 SIGKILL 杀死。
  7. Kubelet 将通过设置宽限期 0(立即删除)完成 API 服务器上 Pod 的删除。Pod 从 API 中消失,不再从客户端可见。

推荐阅读