Kubernetes存活探針(Liveness Probe)和就緒探針(Readiness Probe)的最佳實踐
【編者的話】Kubernetes提供了兩種探針來檢查容器的狀態,Liveness 和 Readiness,根據ofollow,noindex" target="_blank">官方文件 ,Liveness探針是為了檢視容器是否正在執行,翻譯為存活探針,Readiness探針是為了檢視容器是否準備好接受HTTP請求,翻譯為就緒探針。這篇文章主要闡述了作者在使用這兩種探針時總結的一些最佳實踐。
在Kubernets中,pods是Kubernetes建立及管理的最小的可部署的計算單元,一個pod由一個或者多個容器(Docker,rocket等等)組成,這些容器共享記憶體,網路以及執行容器的方式。
在Kubernetes上下文中存活探針和就緒探針 被稱作健康檢查 。這些容器探針是一些週期性執行的小程序,這些探針返回的結果如(成功,失敗或者未知)反映了了容器在Kubernetes的狀態。基於這些結果,Kubernetes會判斷如何處理每個容器,以其彈性,高可用性和更長的正常執行時間。
健康檢查是每個分散式系統所必需的!
Kubernetes的健康檢查:
Kubernetes提供了兩種型別的健康檢查:就緒探針 和存活探針 ,它們有各自的用途。在這篇文章中我們將會選擇:
/.well-known/live— 用於探測HTTP是否存活
/.well-known/ready— 用於探測HTTP是否就緒
簡而言之,HTTP探測意味著Kubernetes在特定時間間隔執行HTTP請求/.well-known/live 和/.well-known/ready 。響應的狀態碼用於決定需要對pod執行的操作。如果狀態程式碼在區間[200,300) 中,則一切正常。除此以外:
- 如果存活探測器的狀態程式碼是4xx 或5xx ,則代表pod已被重啟。
- 如果就緒探測器的狀態程式碼是4xx 或5xx ,那麼pod會被標記為不健康,並且Kubernetes為了提高可靠性和正常執行時間將不會再將HTTP請求轉發給它。
如果您的容器獨立於任何支援服務,則容器可以具有在同一處理程式上進行存活和就緒檢查,並且後面的實踐不適用於這種情況。
我們與來自Metro Systems Romania-Site Reliability Team的團隊成員一起確定了健康檢查的最佳實踐列表,並建議應用程式開發人員遵循這些實踐。這些最佳實踐如下:
-
存活和就緒的結果處理程式需要是互相獨立的程式
如前所述,對於在Kubernetes上下文中部署的每個產品,應該實現2個分別處理HTTP請求“存活”和“就緒”的處理程式。這些探測器的處理程式需要獨立實現自己的功能。 -
不要把“存活/就緒”探針的邏輯與你的程式解耦
這適用於作業處理應用程式。對於Kubernetes,瞭解應用程式是否正在執行非常重要。如果存活/就緒邏輯被解耦了在新程序中執行,則結果不準確。 -
不要在“存活”處理程式裡實現任何邏輯。如果主執行緒正在執行,它需要返回狀態200,如果不是,則返回5xx
這個探針讓Kubernetes知道應用程式是正在執行還是停止執行。通過檢查/.well-known/live的狀態程式碼來做出決定,如果應用程式被判斷為停止執行,則Kubernetes會重新啟動pod。從可靠性的角度來看,如果應用程式的主執行緒已啟動並正在執行,則Live(存活)探測的結果為true,否則為false。
在這個上下文中,“邏輯”意味著對互相連線的服務實施某種檢查
-
在“就緒”探針的處理程式中實現邏輯,以便提供有關應用程式準備情況的詳情
就緒探針讓Kubernetes知道pod是否已準備好接收HTTP請求。作為開發人員,在此處實現一些邏輯來檢查應用程式的所有後端依賴的可用性非常重要。當實現就緒處理程式時,需要清楚的知道您的應用程式依賴於哪些功能。換句話說,在就緒處理程式裡,需要執行所有步驟以保證應用程式已準備好接收和處理https請求的,這非常重要。例如,如果應用程式需要建立與資料庫的連線以準備處理HTTP請求,那麼在“ready(就緒)”程式中就必須檢查是否已建立與資料庫的連線並可以使用。 -
不要嘗試在就緒處理程式上重新建立應用程式的就緒狀態。這個探針只是為了檢查應用程式是否準備就緒,而不是讓應用程式就緒。
我並不建議實現任何讓程式重新就緒的邏輯。這些邏輯可能會為系統中的某些元件帶來危險。
結論:
存活和就緒探針是部署在Kubernetes中的應用程式的核心和靈魂。它們是與虛擬機器管理程式通訊的標準方式,通過這種方式可以瞭解虛擬機器的狀態和問題。存活和就緒探針是開發人員和應用程式必備的強大武器,它確保應用程式的可靠性和彈性。
特別感謝Ionut Ilie。部分內容是他的研究成果以及智慧結晶。
原文連結:Kubernetes Readiness & Liveliness Probes — Best Practices
==============================================================================
譯者介紹
Grace,程式設計師,研究生畢業於SUNY at Stony Brook,目前供職於Linktime Cloud Company,對大資料技術以及資料視覺化技術感興趣。