Pod 可能需要時間來加載配置或數據,或者可能需要執行預熱過程以防止第一個用戶請求時間太長影響了用戶體驗。在這種情況下,不希望該 pod 立即開始接收請求,尤其是在運行的實例可以正確快速地處理請求的情況下。不要將請求轉發到正在啟動的 pod 中,直到完全準備就緒。
就緒探針
就緒探測器會定期調用,并確定特定的 pod 是否接收客戶端請求。當容器的準備就緒探測返回成功時,表示容器己準備好接收請求。
就緒探針有三種類型:
- Exec 探針,執行進程的地方。容器的狀態由進程的退出狀態代碼確定。
- HTTP GET 探針,向容器發送 HTTP GET 請求,通過響應的 HTTP 狀態代碼判斷容器是否準備好。
- TCP socket 探針,它打開 TCP 連接到容器的指定端口。如果連接己建立,則認為容器己準備就緒。
啟動容器時,可以為 Kubernetes 配置等待時間,經過等待時間后才可以執行第一次準備就緒檢查之后,它會周期性地調用探針,并根據就緒探針的結果采取行動。如果某個 pod 報告它尚未準備就緒,則會從該服務中刪除該 pod 。如果再次準備就緒,則重新添加 pod。
與存活探針不同,如果容器未通過準備檢查,則不會被終止或重新啟動。存活探針通過殺死異常的容器并用新的正常容器替代它們來保持 pod 正常工作,而就緒探針確保只有準備好處理請求的 pod 才可以接收它們的請求。
就緒探針的重要性
如果沒有過給 pod 添加就緒探針,那么它們幾乎會立即成為服務端點。如果應用程序需要很長時間才能開始監聽傳入連接,則在服務啟動但尚未準備好接收傳入連接時,客戶端請求將被轉發到該 pod。因此,客戶端會看到 “連接被拒絕” 類型的錯誤。