Pod Hook
阿新 • • 發佈:2020-11-19
Kubernetes 為我們提供了兩種鉤子函式:
- PostStart:這個鉤子在容器建立後立即執行。但是,並不能保證鉤子將在容器
ENTRYPOINT
之前執行,因為沒有引數傳遞給處理程式。主要用於資源部署、環境準備等。不過需要注意的是如果鉤子花費太長時間以至於不能執行或者掛起, 容器將不能達到running
狀態。 - PreStop:這個鉤子在容器終止之前立即被呼叫。它是阻塞的,意味著它是同步的, 所以它必須在刪除容器的呼叫發出之前完成。主要用於優雅關閉應用程式、通知其他系統等。如果鉤子在執行期間掛起, Pod階段將停留在
running
狀態並且永不會達到failed
狀態。
優雅刪除資源物件:
當用戶請求刪除含有 pod 的資源物件時(如Deployment等),K8S 為了讓應用程式優雅關閉(即讓應用程式完成正在處理的請求後,再關閉軟體),K8S提供兩種資訊通知:
- 預設:K8S 通知 node 執行
docker stop
命令,docker 會先向容器中PID
為1的程序傳送系統訊號SIGTERM
,然後等待容器中的應用程式終止執行,如果等待時間達到設定的超時時間,或者預設超時時間(30s),會繼續傳送SIGKILL
的系統訊號強行 kill 掉程序。 - 使用 pod 生命週期(利用
PreStop
回撥函式),它執行在傳送終止訊號之前。
預設所有的優雅退出時間都在30秒內。kubectl delete 命令支援--grace-period=<seconds>
選項,這個選項允許使用者用他們自己指定的值覆蓋預設值。值'0'代表 強制刪除 pod. 在 kubectl 1.5 及以上的版本里,執行強制刪除時必須同時指定--force --grace-period=0