介紹
今天我們來談談 Kubernetes 探針(probes)以及它們在部署中的重要性。在管理面向生產的容器化應用程式時,即使是小的優化也能帶來巨大的好處。
為了減少部署時間、讓應用程式更好地應對擴展事件,以及管理運行中的 Pod 健康狀況,需要對容器生命週期管理進行精細調整。這就是為什麼正確配置和實施 Kubernetes 探針對於任何關鍵部署都是至關重要的。它們幫助你的叢集做出智能決策,關於流量路由、重啟和資源分配。
正確配置的探針能顯著提高應用程式的可靠性,減少部署的停機時間,並優雅地處理意外錯誤。在這篇文章中,我們將探討 Kubernetes 中可用的三種類型的探針,以及如何將它們一起使用以配置更具韌性的系統。
快速回顧
了解每個探針的功能及一些常見的配置模式是非常重要的。每個探針在容器生命週期中都有特定的目的,當它們一起使用時,可以為維護應用程式的可用性和性能建立一個堅固的框架。
啟動探針:優化啟動時間
啟動探針在新的 Pod 因擴展事件或新部署而啟動時會被評估一次。它作為其餘容器檢查的守門員,對其進行微調將幫助你的應用程式更好地處理增加的負載或服務降級。
範例配置:
startupProbe:
httpGet:
path: /health
port: 80
failureThreshold: 30
periodSeconds: 10
關鍵要點:
- 保持 periodSeconds 低,這樣探針可以頻繁觸發,快速檢測成功的部署。
- 將 failureThreshold 增加到足夠高的值,以應對最壞情況的啟動時間。
啟動探針將通過查詢配置的路徑來檢查你的容器是否已啟動。它還會在成功之前停止觸發存活探針(Liveness)和就緒探針(Readiness)。
存活探針:檢測死掉的容器
你的存活探針回答一個非常簡單的問題:“這個 Pod 還在正常運行嗎?”如果沒有,K8s 將會重啟它。
範例配置:
livenessProbe:
httpGet:
path: /health
port: 80
periodSeconds: 10
failureThreshold: 3
關鍵要點:
- 由於 K8s 將完全重啟你的容器並啟動一個新的容器,請添加 failureThreshold 以應對間歇性異常。
- 避免使用 initialDelaySeconds,因為這太限制了——使用啟動探針來代替。
請注意,失敗的存活探針將會關閉你當前運行的 Pod 並啟動一個新的,因此避免讓它過於激進——這是下一個探針的工作。
就緒探針:處理意外錯誤
就緒探針決定是否應該開始或繼續接收流量。當你的容器失去與資料庫的連接或過度使用時,它非常有用,這時不應該接收新的請求。
範例配置:
readinessProbe:
httpGet:
path: /health
port: 80
periodSeconds: 3
failureThreshold: 1
timeoutSeconds: 1
關鍵要點:
- 由於這是第一道防線,防止流量到達不健康的目標,請讓探針更具侵略性,並減少 periodSeconds。
- 將 failureThreshold 設定為最低值,這樣你可以快速失敗。
- 超時時間也應保持在最低,以應對較慢的容器。
- 給就緒探針足夠的時間恢復,通過擁有更長運行時間的存活探針來實現。
就緒探針確保流量不會到達尚未準備好的容器,因此它是堆疊中最重要的探針之一。
綜合應用
如你所見,即使所有探針都有各自的獨特用途,改善應用程式的韌性策略的最佳方法是將它們一起使用。
你的啟動探針將幫助你在擴展場景和新部署中,讓你的容器快速啟動。它們只會觸發一次,並在成功完成之前停止執行其餘的探針。
存活探針幫助處理死掉的容器,這些容器遭遇無法恢復的錯誤,並告訴叢集為你啟動一個新的、全新的 Pod。
就緒探針則告訴 K8s 何時應該接收流量。它在處理間歇性錯誤或高資源消耗導致的響應時間變慢時非常有用。
額外配置
探針還可以進一步配置,以使用命令進行檢查,而不是 HTTP 請求,並給容器安全終止的充足時間。雖然這些在更具體的情況下很有用,但了解如何擴展你的部署配置是有益的,因此如果你的容器處理獨特的用例,我建議你進一步閱讀。
進一步閱讀:存活、就緒和啟動探針配置 存活、就緒和啟動探針的配置
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!