1. 程式人生 > 實用技巧 >Pod Hook

Pod Hook

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