健康檢查配置
健康檢查配置
本文視頻教程: https://www.bilibili.com/video/BV16q4y1y7B9
本文分享 K8S 健康檢查配置的最佳實(shí)踐,文末也分享配置不當(dāng)?shù)陌咐?/p>
K8S 支持三種健康檢查:
就緒檢查(readinessProbe): Pod啟動(dòng)后,如果配了就緒檢查,要等就緒檢查探測成功,Pod Ready 狀態(tài)變?yōu)?True,允許放流量進(jìn)來;在運(yùn)行期間如果突然探測失敗,Ready 狀態(tài)變?yōu)?False,摘除流量。 存活檢查(livenessProbe): Pod 在運(yùn)行時(shí),如果存活檢查探測失敗,會(huì)自動(dòng)重啟容器;值得注意的是,存活探測的結(jié)果不影響 Pod 的 Ready 狀態(tài),這也是許多同學(xué)可能誤解的地方。 啟動(dòng)檢查(startupProbe): 作用是讓存活檢查和就緒檢查的開始探測時(shí)間延后,等啟動(dòng)檢查成功后再開始探測,通常用于避免業(yè)務(wù)進(jìn)程啟動(dòng)慢導(dǎo)致存活檢查失敗而被無限重啟。三種健康檢查配置格式都是一樣的,以 readinessProbe 為例:
readinessProbe:
successThreshold: 1 # 1 次探測成功就認(rèn)為健康
failureThreshold: 2 # 連續(xù) 2 次探測失敗認(rèn)為不健康
periodSeconds: 3 # 3s 探測一次
timeoutSeconds: 2 # 2s 超時(shí)還沒返回成功就認(rèn)為不健康
httpGet: # 使用 http 接口方式探測,GET 請求 80 端口的 "/healthz" 這個(gè) http 接口,響應(yīng)狀態(tài)碼在200~399之間視為健康,否則不健康。
port: 80
path: "/healthz"
#exec: # 使用腳本探測,執(zhí)行容器內(nèi) "/check-health.sh" 這個(gè)腳本文件,退出狀態(tài)碼等于0視為健康,否則不健康。
# command: ["/check-health.sh"]
#tcp: # 使用 TCP 探測,看 9000 端口是否監(jiān)聽。
# port: 9000
探測結(jié)果一定要真實(shí)反應(yīng)業(yè)務(wù)健康狀態(tài)?
首選 HTTP 探測?
通常是推薦業(yè)務(wù)自身提供 http 探測接口,如果業(yè)務(wù)層面健康就返回 200 狀態(tài)碼;否則,就返回 500。
備選腳本探測?
如果業(yè)務(wù)還不支持 http 探測接口,或者有探測接口但不是 http 協(xié)議,也可以將探測邏輯寫到腳本文件里,然后配置腳本方式探測。
盡量避免 TCP 探測?
另外,應(yīng)盡量避免使用 TCP 探測,因?yàn)?TCP 探測實(shí)際就是 kubelet 向指定端口發(fā)送 TCP SYN 握手包,當(dāng)端口被監(jiān)聽內(nèi)核就會(huì)直接響應(yīng) ACK,探測就會(huì)成功:
當(dāng)程序死鎖或 hang 死,這些并不影響端口監(jiān)聽,所以探測結(jié)果還是健康,流量打到表面健康但實(shí)際不健康的 Pod 上,就無法處理請求,從而引發(fā)業(yè)務(wù)故障。
所有提供服務(wù)的 container 都要加上 ReadinessProbe?
如果你的容器對外提供了服務(wù),監(jiān)聽了端口,那么都應(yīng)該配上 ReadinessProbe,ReadinessProbe 不通過就視為 Pod 不健康,然后會(huì)自動(dòng)將不健康的 Pod 踢出去,避免將業(yè)務(wù)流量轉(zhuǎn)發(fā)給異常 Pod。
謹(jǐn)慎使用 LivenessProbe?
LivenessProbe 失敗會(huì)重啟 Pod,不要輕易使用,除非你了解后果并且明白為什么你需要它,參考 Liveness Probes are Dangerous 。
探測條件要更寬松?
如果使用 LivenessProbe,不要和 ReadinessProbe 設(shè)置成一樣,需要更寬松一點(diǎn),避免因抖動(dòng)導(dǎo)致 Pod 頻繁被重啟。
通常是失敗閾值 (failureThreshold) 設(shè)置得更大一點(diǎn),避免因探測太敏感導(dǎo)致 Pod 很容易被重啟。
另外如果有必要,超時(shí)時(shí)間 (timeoutSeconds) 和探測間隔 (periodSeconds) 也可以根據(jù)情況適當(dāng)延長。
保護(hù)慢啟動(dòng)容器?
有些應(yīng)用本身可能啟動(dòng)慢(比如 Java),或者用的富容器,需要起一大堆依賴,導(dǎo)致容器啟動(dòng)需要的較長,如果配置了存活檢查,可能會(huì)造成啟動(dòng)過程中達(dá)到失敗閾值被重啟,如此循環(huán),無限重啟。
對于這類啟動(dòng)慢的容器,我們需要保護(hù)下,等待應(yīng)用完全啟動(dòng)后才開始探測:
如果 K8S 版本低于 1.18,可以設(shè)置 LivenessProbe 的初始探測延時(shí) (initialDelaySeconds)。 如果 K8S 版本在 1.18 及其以上,可以配置 StartProbe,保證等應(yīng)用完全啟動(dòng)后才開始探測。避免依賴導(dǎo)致級(jí)聯(lián)故障?
LivenessProbe 探測邏輯里不要有外部依賴 (db, 其它 pod 等),避免抖動(dòng)導(dǎo)致級(jí)聯(lián)故障。
如上圖,Pod B 探測邏輯里查 DB,Pod A 探測邏輯里調(diào)用 Pod B,如果 DB 抖動(dòng),Pod B 變?yōu)椴唤】?,Pod A 調(diào)用 Pod B 也失敗,也變?yōu)椴唤】?,從而?jí)聯(lián)故障。
反面教材?
突然無限重啟且流量異常?
故障現(xiàn)象: Pod 突然不斷重啟,期間有流量進(jìn)入,這部分流量異常。
原因:
Pod 之前所在節(jié)點(diǎn)異常,重建漂移到了其它節(jié)點(diǎn)去啟動(dòng)。 Pod 重建后由于基礎(chǔ)鏡像中依賴的一個(gè)服務(wù)有問題導(dǎo)致啟動(dòng)較慢,因?yàn)橥瑫r(shí)配置了 ReadinessProbe 與 LivenessProbe,大概率是啟動(dòng)時(shí)所有健康檢查都失敗,達(dá)到 LivenessProbe 失敗次數(shù)閾值,又被重啟。 Pod 配置了 preStop 實(shí)現(xiàn)優(yōu)雅終止,被重啟前會(huì)先執(zhí)行 preStop,優(yōu)雅終止的時(shí)長較長,preStop 期間 ReadinessProbe 還會(huì)繼續(xù)探測。 探測方式使用的 TCP 探測,進(jìn)程優(yōu)雅終止過程中 TCP 探測仍然會(huì)成功(沒完全退出前端口監(jiān)聽仍然存在),但實(shí)際此時(shí)進(jìn)程已不會(huì)處理新請求了。 LivenessProbe 結(jié)果不會(huì)影響 Pod Ready 狀態(tài),是否 Ready 主要取決于 ReadinessProbe 結(jié)果,由于 preStop 期間 ReadinessProbe 是成功的,Pod 就變 Ready 了。 Pod Ready 但實(shí)際無法處理請求,業(yè)務(wù)就會(huì)異常。總結(jié):
Pod 慢啟動(dòng) + 存活探測 導(dǎo)致被無限重啟。需要延長 initialDelaySeconds 或 StartProbe 來保護(hù)慢啟動(dòng)容器。 TCP 探測方式不能完全真實(shí)反應(yīng)業(yè)務(wù)健康狀態(tài),導(dǎo)致在優(yōu)雅終止過程中,ReadinessProbe 探測成功讓流量放進(jìn)來而業(yè)務(wù)卻不會(huì)處理,導(dǎo)致流量異常。需要使用更好的探測方式,建議業(yè)務(wù)提供 HTTP 探活接口,使用 HTTP 探測業(yè)務(wù)真實(shí)健康狀態(tài)。netstat 探測超時(shí)?
故障現(xiàn)象: 探測腳本經(jīng)常 2s 超時(shí)。
原因: 使用腳本探測,超時(shí)時(shí)間為 2s,腳本里使用了 netstat 檢測端口是否存活來判斷業(yè)務(wù)進(jìn)程是否正常,當(dāng)流量較大時(shí),連接數(shù)多,netstat 運(yùn)行所需時(shí)間就較長 (因?yàn)?netstat 會(huì)遍歷 /proc 下每個(gè) pid 內(nèi)容來進(jìn)行統(tǒng)計(jì),執(zhí)行時(shí)長受連接數(shù)波動(dòng)所影響),所以在業(yè)務(wù)高峰時(shí)往往容易執(zhí)行超時(shí),從而探測失敗。
總結(jié): 這種探測方式比 TCP 探測方式更原始,強(qiáng)烈不推薦,參考最佳實(shí)踐優(yōu)化探測配置。
相關(guān)知識(shí)
配置健康檢查探測物理專線連通性
移動(dòng)健康流動(dòng)體檢車配置參數(shù)改裝大全
用微軟官方工具「電腦健康狀況檢查」來檢測你的電腦是否符合 Windows 11 最低配置
前置胎盤檢查圖片
前置胎盤的輔助檢查
前置胎盤的體格檢查
前置胎盤超聲檢查
Nginx被動(dòng)健康檢查和主動(dòng)健康檢查
k8s健康檢查 spring k8s健康檢查探針多個(gè)地址
前置胎盤多久能檢查出來
網(wǎng)址: 健康檢查配置 http://m.u1s5d6.cn/newsview556881.html
推薦資訊
- 1發(fā)朋友圈對老公徹底失望的心情 12775
- 2BMI體重指數(shù)計(jì)算公式是什么 11235
- 3補(bǔ)腎吃什么 補(bǔ)腎最佳食物推薦 11199
- 4性生活姿勢有哪些 盤點(diǎn)夫妻性 10425
- 5BMI正常值范圍一般是多少? 10137
- 6在線基礎(chǔ)代謝率(BMR)計(jì)算 9652
- 7一邊做飯一邊躁狂怎么辦 9138
- 8從出汗看健康 出汗透露你的健 9063
- 9早上怎么喝水最健康? 8613
- 10五大原因危害女性健康 如何保 7826
- 西鈺休閑食品加盟 費(fèi)用 代理?xiàng)l件 招商電
- 線上研討助力居家心育 ——臨沂西郊實(shí)驗(yàn)學(xué)
- 科學(xué)防疫,“宅”趣無窮——西溪學(xué)??茖W(xué)科
- 玉淵潭中學(xué)居家學(xué)習(xí)健康小貼士
- 有哪些休閑游戲 放松身心的好選擇
- plus會(huì)員:美的(Midea) 10K
- PLUS會(huì)員、需搶券:LittleSwa
- plus會(huì)員:海爾(Haier)全自動(dòng)8
- 再降價(jià)、PLUS會(huì)員:LittleSwa
- 無縫連接健康服務(wù)!探索日照首個(gè)居家醫(yī)養(yǎng)云