Kubernetes活躍性和就緒性探針的設定技巧 - colinbreck

banq發表於2020-11-02

為了進行容器是否活著的健康檢查,活動性探針將在容器無響應時重新啟動容器,而就緒性探針用於確定容器何時準備開始或停止接受流量。
許多人認為就緒探針僅在啟動時被呼叫,但是即使在容器被通知為就緒後仍繼續被呼叫。例如,如果某個容器暫時很忙,則它可能無法準備就緒,因此請求將被路由到其他容器。如果準備就緒探針評估一組Pod之間的共享依賴關係,則如果配置過於激進,則可能會使整個服務不可用。但是,沒有一種方法做到:可以在啟動時使用積極的準備狀態探針(使容器儘可能快地用於請求),而在穩態期間則是做到沒有那麼積極的準備狀態探針。
許多應用程式的啟動動態與穩態大不相同。應用程式初始化所獨有的動態特性包括:填充快取;在事件源應用程式中重新實現從日記的派生狀態;或建立與依賴關係(如資料庫)的持久連線。這使調整活動性和就緒性探針變得頗具挑戰性。
例如,如果initialDelaySeconds活動性探針的保守度不夠,則可能在啟動容器之前將其殺死。如果啟動動態隨時間變化(尤其是隨著您的系統擴充套件或工作負載具有季節性),這尤其具有挑戰性。如果一段時間未重新啟動容器,並且啟動時間增加,則可能要等到修改配置增加initialDelaySeconds時,才能重新啟動Pod
 
Kubernetes 1.16中引入的啟動探針旨在解決許多此類問題。
啟動探針旨在解決這些問題。僅在啟動期間呼叫啟動探針,用於確定容器何時準備接受請求。如果配置了啟動探針,則將禁用活動性和就緒性檢查,直到啟動探針成功為止。如果啟動探針超出配置,failureThreshold但沒有成功,則容器將被殺死並重新啟動,這取決於容器的restartPolicy行為,類似於活動探針的行為。
最佳實踐:
  • 進行保守設定timeoutSeconds,failureThreshold以便可以動態或臨時更改系統動態,而不會導致啟動探針故障而阻止容器啟動。
  • 如果啟動探針呼叫的路由直接檢查依賴項或執行昂貴的操作,請考慮將其設定timeoutSeconds為相同的大小,以避免積累資源或使依賴項過載。即使啟動探測超時,該服務可能仍在執行請求。
  • 定期重新啟動容器以行使啟動動態,並避免隨時間變化意外的行為。如果某個Pod執行了數月或數年卻沒有重新啟動,則值得關注。

啟動探針還具有一些獨特的注意事項:
  • 要使緩慢啟動的容器儘快可用,請使用超時時間非常短但故障閾值也非常長的啟動探針,以避免在啟動容器之前將其殺死。
  • 準備就緒和活躍性探針與啟動探針無關,這一事實使您對啟動探針故障非常保守,或者執行不同的檢查,也許僅在啟動時才相關的檢查,或者過於昂貴,無法透過以下方式定期執行準備或活躍度調查。

 
Kubernetes啟動探針現已廣泛用於領先雲提供商的託管Kubernetes產品。將啟動探針視為僅在啟動時才執行的活動和就緒探針的組合。使用啟動探針將活動性和就緒性檢查與應用程式初始化脫鉤,最終使服務更可靠。

相關文章