iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
DevOps

Dev's Ops 啟程系列 第 2

[Day 2] SRE - 你的服務死後不要讓人擔心嘛

graceful shutdown

在關閉服務前,在服務內部以做完該做的事情,使得服務得以善終。
在容器化的時代,現在的部署更新,幾乎都是透過image版本更新的方式。

本篇文章重點不在於如何實作graceful shutdown
如有想了解的大大 可以參考 熱血奶爸v0.0.1實作文章

為何我說graceful shutdown很重要,如果在k8s當發生服務邏輯有bug時,

  1. 會先去查看在更新image版本之前是否有此問題,來判斷此image版本發生此問題的機會有多高
  2. 在測試站或開發站測試舊版本是否有同樣問題,如果「有」代表不是版本差的問題,可能是其他問題或者更久遠的問題。
  3. 如果舊版本沒問題,這時候就要進行部署撤退的動作減少公司損失,這時候可能會下指令

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)-生命週期, 容器探測
/images/emoticon/emoticon39.gif


上一篇
[Day 1] Dev's Ops 啟程前言
下一篇
[Day 3] SRE - Log寫好一點,對團隊好一些
系列文
Dev's Ops 啟程30

尚未有邦友留言

立即登入留言