前言
本文主要介紹 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
浙公網安備 33010602011771號