簡介
容器探針(Container Probes)是一種機制,由 kubelet 對容器執(zhí)行定期的探查,從而獲取容器的狀態(tài)。探針的類型有三種:
啟動探針(Startup Probe)
存活探針(Liveness Probe)
就緒探針(Readiness Probe)
探針功能
啟動探針
啟動探針(StartupProbe)主要用于檢測容器內(nèi)的應(yīng)用是否已經(jīng)成功啟動并完成初始化任務(wù)。它的主要作用有以下幾點:
延緩其他探針生效:在容器啟動初期,啟動探針先于存活探針(LivenessProbe)和就緒探針(ReadinessProbe)生效。當啟動探針配置存在時,kubelet 不會執(zhí)行存活和就緒探針,直到啟動探針成功為止。這對于某些啟動時間較長或者啟動過程中有復(fù)雜初始化序列的應(yīng)用程序來說非常重要,可以避免在應(yīng)用還未完全啟動時就被誤判為不健康或就緒,進而被錯誤地重啟或流量過早涌入。
防止頻繁重啟:若應(yīng)用啟動期間,存活探針或就緒探針就開始工作,而此時應(yīng)用可能還沒有完全啟動成功,這兩個探針可能會因為應(yīng)用未能及時響應(yīng)而觸發(fā)容器重啟,造成不必要的服務(wù)中斷和循環(huán)重啟。啟動探針的存在可以有效地防止此類情況的發(fā)生。
存活探針
存活探針(Liveness Probe)主要作用是檢測容器內(nèi)主進程或服務(wù)是否仍然運行正常且響應(yīng)健康檢查。具體來說:
自動恢復(fù):當存活探針檢測失敗時,kubelet 將認為該容器內(nèi)的主進程已經(jīng)不再健康或者已停止提供預(yù)期的服務(wù)。此時,kubelet 會根據(jù) Pod 的重啟策略來決定是否應(yīng)該重新啟動這個容器。通過這種方式,存活探針可以幫助實現(xiàn)故障自愈,及時恢復(fù)服務(wù)的可用性。
就緒探針
就緒探針(Readiness Probe)主要作用是檢測容器是否已經(jīng)準備好對外提供服務(wù)。具體來說:
流量路由控制:當就緒探針成功時,表示該容器內(nèi)部的應(yīng)用程序已處于可接受請求的狀態(tài),此時 kubelet 會將該容器標記為“就緒”狀態(tài),Service 將會將其 IP 地址添加到后端服務(wù)列表中,允許 Service 開始將網(wǎng)絡(luò)流量轉(zhuǎn)發(fā)至這個 Pod。
避免無效請求:如果就緒探針失敗,則意味著容器可能還在啟動過程中、正在重啟服務(wù)、或者由于某種原因暫時無法正常響應(yīng)請求。在這種情況下,kubelet 會將容器從 Service 的后端池中移除,確保不會向其發(fā)送任何用戶請求,從而避免了因應(yīng)用未準備完畢而引起的錯誤響應(yīng)和用戶體驗下降。
平滑過渡:通過就緒探針,Kubernetes 可以實現(xiàn)滾動更新或部署過程中的平滑過渡,新版本的容器在通過就緒探針驗證前,不會承擔任何實際流量,直到它們完全啟動并做好處理請求的準備。
探針方式
探針實現(xiàn)方式有三種:
HTTP GET請求:Kubernetes 通過向容器內(nèi)應(yīng)用發(fā)送一個HTTP GET請求來檢查應(yīng)用的狀態(tài)。如果收到的 HTTP 響應(yīng)碼在 200-399 范圍內(nèi),則認為該探測成功。
livenessProbe: #可指定其他兩種探針類型 httpGet: #指定探針方式 path: /healthz #http請求路徑 port: 8080 #請求端口 httpHeaders: # 可選,用于設(shè)置自定義HTTP頭部 - name: Custom-Header value: huawei
TCP Socket檢查:Kubernetes 嘗試與容器上指定的端口建立 TCP 連接。如果能夠成功建立連接,則說明探測成功。
livenessProbe: tcpSocket: port: 8080
exec執(zhí)行命令:在容器內(nèi)部執(zhí)行一個命令,并根據(jù)命令退出時返回的狀態(tài)碼判斷容器是否正常運行。通常情況下,如果命令返回 0,則表示成功。
livenessProbe: exec: command: - cat - /tmp/health
啟動探針、存活探針和就緒探針同時支持這三種方式。每種探針可以選擇不同探測方式
探針配置參數(shù)
Kubernetes中的探針都支持一些通用的參數(shù)來定義它們的行為。以下是這些探針通常使用的配置參數(shù):
initialDelaySeconds:容器啟動后要等待多少秒后才啟動啟動、存活和就緒探針。如果定義了啟動探針,則存活探針和就緒探針的延遲將在啟動探針已成功之后才開始計算。如果 periodSeconds 的值大于 initialDelaySeconds,則 initialDelaySeconds 將被忽略。默認是 0 秒,最小值是 0。
periodSeconds:執(zhí)行探測的時間間隔(單位是秒)。默認是 10 秒。最小值是 1。
timeoutSeconds:探測的超時后等待多少秒。默認值是 1 秒。最小值是 1。
successThreshold:探針在失敗后,被視為成功的最小連續(xù)成功數(shù)。默認值是 1。存活和啟動探針的這個值必須是 1。
failureThreshold:探針連續(xù)失敗了 failureThreshold 次之后, Kubernetes 認為總體上檢查已失敗:容器狀態(tài)未就緒、不健康、不活躍。對于啟動探針或存活探針而言,如果至少有 failureThreshold 個探針已失敗, Kubernetes 會將容器視為不健康并為這個特定的容器觸發(fā)重啟操作。kubelet 遵循該容器的terminationGracePeriodSeconds 設(shè)置。
terminationGracePeriodSeconds:k8s1.25以上版本新增,為 kubelet 配置從為失敗的容器觸發(fā)終止操作到強制容器運行時停止該容器之前等待的寬限時長。默認值是繼承 Pod 級別的 terminationGracePeriodSeconds 值(如果不設(shè)置則為 30 秒),最小值為 1。就緒探針不需要配置該參數(shù)
完整配置示例:
livenessProbe: #可以選擇 httpGet、tcpSocket 或 exec 中的一種 httpGet: path: /health port: 8080 httpHeaders: - name: Custom-Header value: huawei #通用參數(shù): initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 1 successThreshold: 1 failureThreshold: 3 terminationGracePeriodSeconds: 30 readinessProbe: # 就緒探針配置類似 startupProbe: # 啟動探針配置也相似
配置建議
如果應(yīng)用是慢啟動類型,建議配置啟動探針或者為存活探針配置initialDelaySeconds參數(shù),避免存活探針過早介入導(dǎo)致容器頻繁重啟。如果應(yīng)用啟動時間不固定建議使用啟動探針。
可以將啟動探針initialDelaySeconds、periodSeconds的值調(diào)低,讓啟動探針更快感知容器健康狀態(tài);由于啟動探針探測成功后就會退出不會影響容器后續(xù)運行,可以將failureThreshold的值調(diào)大,避免應(yīng)用還未啟動完成過早觸發(fā)重啟
由于存活探針探測失敗會導(dǎo)致容器重啟,因此將存活探針的failureThreshold設(shè)置比就緒探針大,這樣如果應(yīng)用有問題應(yīng)該先切斷流量
審核編輯:黃飛
-
探針
+關(guān)注
關(guān)注
4文章
211瀏覽量
20531 -
容器
+關(guān)注
關(guān)注
0文章
499瀏覽量
22120
原文標題:一文帶你了解容器探針
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論