翻譯自官方文檔
- 用戶發送delete pod命令,grace period 參數即寬限期(假設爲30秒)
- API Server 更新 pod 的寬限期字段
- 執行
pod get
命令顯示pod狀態變爲Terminating - 與3同時,kubelet看到pod被標識了deleteTimestamp也就是標識爲Terminating,它開始執行關閉pod流程:
- 如果pod中的一個容器定義了 preStop hook,就在容器中調用它。如果過了寬限期preStop還在運行,步驟2一次性延長一個短的寬限期(2秒)。如果要延長preStop,你要修改terminationGracePeriodSeconds
- 向容器發送TERM信號。不是pod內的所有容器同時收到TERM信號並且如果它們關閉的順序很重要,則每個容器都可能需要preStop hook
- 與3同時,pod 從 service的endpoints列表中移除,不再被視爲副本控制器正在運行的Pod集合的一部分。緩慢關閉的Pod無法繼續爲流量提供服務,因爲負載均衡器(如服務代理)會將其從輪換中刪除。
- 寬限期過期時,pod中所有運行的進程被SIGKILL殺死
- kubelet設置API Server的寬限期爲0(立即刪除)來結束pod的刪除流程。pod從API消失,客戶端不可見。