4.5.5 Pod 的终止过程

Pod 对象代表了在 kubernete 集群节点上运行的进程,它可能曾用于处理生产数据或向用户提供服务等,于是,当 Pod 本身不再具有存在的价值时,如何将其优雅地终止就显得尤为重要了,而用户也需要能够在正常提交删除后可以获知其何时开始终止并最终完成。操作中,当用户提交删除请求之后,系统就会进行强制删除操作的宽限期倒计时,并将 TERM 信息发送给 Pod 对象的 每个容器中的主进程。宽限期倒计时结束后,这些进程将收到强制终止的 KILL 信号,Pod 对象随即也将由 API Server 删除。如果在等待进程终止的过程中,kubelet 或容器管理器发生了重启,那么终止操作会重新获得一个满额的删除宽限期并重新执行删除操作。

如图 4-11 所示,一个典型的 Pod 对象终止流程具体如下:

Pod 的终止过程
图 1.6.5.5 - Pod 的终止过程

1) 用户发送删除 Pod 对象的命令。

2) API 服务器中的 Pod 对象会随着时间的推移而更新,在宽限期内(默认为30秒),Pod被视为“dead”。

3) 将 Pod 标记为 “Terminating” 状态。

4) (与第3步同时运行)kubelet 在监控到 Pod 对象转为 “Terminating” 状态的同时启动 Pod 关闭程序。

5) (与第3步同时运行)端点控制器监控到 Pod 对象的关闭行为时将其从所有匹配到此端点的 Service 资源的端点列表中移除。

6) 如果当前当前 Pod 对象定义了 preStop 钩子处理器,则在其标记为 “terminating” 后即会以同步的方式启动执行;如若宽限期结束后,preStop 仍未执行结束,则第2步会被重新执行并额外获取一个时长为2秒的小宽限期。

7) Pod 对象中的容器进程收到 TERM 信号。

8) 宽限期结束后,若存在任何一个仍在运行的进程,那么 Pod 对象即会收到 SIGKILL 信号。

9) kubelet 请求 API Server 将此 Pod 资源的宽限期设置为0从而完成删除操作,它变得对用户不在可见。

默认情况下,所有删除操作的宽限期都是30秒,不过,kubectl delete 命令可以使用“--grace-period=”选项自定义其时长,若使用0值则表示直接强制删除指定的资源,不过,此时需要同时为命令使用 “--force” 选项。

results matching ""

    No results matching ""