前言
本文主要介绍 pod 的删除过程,之前一直没仔细研究过,这次把整个过程记录下来
pod 的删除过程
- 用 kubectl 删除 pod
- API server 更改 pod 状态为 Terminating
- kubelet 监听到这个状态更改,开始停止这个 pod 的过程
- 如果有 preStop hook 的话,先运行这个 hook,如果 hook 在 terminationGracePeriodSeconds 之后还没运行完,kubelet 会给 pod 额外 2 秒的时间。
- kubelet 让容器运行时发送 TERM 信号到每个容器中的进程 1。
- 当 pod 状态变为 Terminating 之后,pod 会从 Endpoints 下掉,
- terminationGracePeriodSeconds 过了之后,pod 里面的进程会收到 SIGKILL,kubelet 也会清理 pause 容器,如果有的话
- kubelet 把 terminationGracePeriodSeconds 改成了 0,强制从 API server 删除 pod
- API server 删除 pod
PreStop hook
正常情况下 PreStop hook 运行完了,才会发送 TERM 信号。
链接
Pod Lifecycle
Container Lifecycle Hooks
Attach Handlers to Container Lifecycle Events