概述
Kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,
此时Pod的状态Terminating,kubelet看到pod标记为Terminating就开始了关闭Pod的工作;
关闭流程如下:
1)pod从service的endpoint列表中被移除;
2)如果该pod定义了一个停止前的钩子,其会在pod内部被调用,停止钩子一般定义了如何优雅的结束进程;
3)进程被发送TERM信号(kill -14);
4)当超过优雅退出的时间后,Pod中的所有进程都会被发送SIGKILL信号(kill -9)
详述
当删除一个 Pod 时,以下事件将会发生:
- 从集群中移除:Kubernetes 控制平面接收到删除操作后,将从集群中移除该 Pod 的相关配置和定义。这意味着该 Pod 将不再被调度到任何节点,并且不再受到 Kubernetes 的管理。
- 终止容器:Kubernetes 会向 Pod 中的容器发送 SIGTERM 信号(15号信号),请求容器进行优雅关闭。容器收到该信号后,可以执行清理操作、释放资源、保存状态等,并尽量在一定时间内正常退出。
- 等待终止超时:在发送 SIGTERM 信号后,Kubernetes 会等待一段时间(默认为 30 秒)来等待容器正常退出。如果容器在超时时间内仍然没有终止,Kubernetes 将发送 SIGKILL 信号(9号信号)强制终止容器。
- 清理资源:一旦容器终止,Kubernetes 将清理与该 Pod 相关的资源。这可能包括释放节点上的网络、存储卷、临时文件等资源,以及更新集群中的状态信息。
- 可能的重新调度:如果删除的 Pod 属于由 ReplicaSet、Deployment 或其他控制器管理的副本集,Kubernetes 将尝试根据副本集的定义重新调度一个新的 Pod 来替代被删除的 Pod,以确保所需的副本数维持在正常状态。
总之,删除一个 Pod 将触发一系列的操作,包括向容器发送终止信号、清理资源以及可能的重新调度。这确保了集群中的 Pods 和相关资源保持一致和可控。