在關閉服務前,在服務內部以做完該做的事情,使得服務得以善終。
在容器化的時代,現在的部署更新,幾乎都是透過image版本更新的方式。
本篇文章重點不在於如何實作graceful shutdown
如有想了解的大大 可以參考 熱血奶爸v0.0.1的實作文章
為何我說graceful shutdown很重要,如果在k8s當發生服務邏輯有bug時,
helm指令
helm rollback -n ${NAMESPACE} ${RELEASE-NAME} ${REVISION}
或是kubectl指令
kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>
這時候目前還在運行的Pod會收到關機訊號,當服務有時做graceful shutdown時,可以盡可能地把該做的事情做完然後關機,新的服務可以無痛銜接起來,這時執行部署撤退動作的人員就只需專注於Pod是否完全rollback完成,然後進行各式各樣的例行通知作業,不用再讓執行人員擔心資料或服務是否還有問題,以大幅減輕執行人員的壓力。
另外還有graceful startup 在服務啟動前做完該做的檢查後,才會正式對外說:「我準備好了,可以開始服務大家了!」,這也是很重要的,重點就在於對於服務生命週期的管理與設計,而實作方式大家可以參考Evelyn_Chen去年的文章-day 10 Pod(3)-生命週期, 容器探測。