前言

本文主要介紹 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