K8S使用就緒和存活探針配置健康檢查

健康檢查

健康檢查(Health Check)可用于服務(wù)運(yùn)行的狀態(tài)監(jiān)控棺牧,比如騰訊旗下的DNSPOD的D監(jiān)控总寻,要求配置一個(gè)訪問(wèn)路徑以判斷網(wǎng)站是否可以正常訪問(wèn)實(shí)際上就是一個(gè)健康檢查纸厉,當(dāng)發(fā)現(xiàn)健康檢查失敗時(shí)會(huì)發(fā)送一個(gè)郵件通知或者短信來(lái)告知網(wǎng)站管理員進(jìn)行維修锐帜。

K8S流量轉(zhuǎn)發(fā)

而在現(xiàn)代一些分布式系統(tǒng)中祭示,用戶訪問(wèn)不再是單臺(tái)主機(jī),而是一個(gè)由成百上千臺(tái)實(shí)例組成的集群辟拷,用戶請(qǐng)求通過(guò)負(fù)載均衡器分發(fā)到不同的實(shí)例,負(fù)載均衡幫助解決單臺(tái)服務(wù)器的訪問(wèn)壓力阐斜,同時(shí)提高了系統(tǒng)的高可用性衫冻,而健康檢查常常作為當(dāng)前實(shí)例是否“可用”的判斷標(biāo)準(zhǔn)。即:當(dāng)系統(tǒng)發(fā)現(xiàn)某臺(tái)實(shí)例健康檢查不通過(guò)谒出,負(fù)載均衡器將不會(huì)把流量導(dǎo)向該實(shí)例隅俘。

現(xiàn)在的云服務(wù)廠商比如AWS一般都為負(fù)載均衡配備了健康檢查,而Kubernetes提供了兩種探針來(lái)檢查容器的狀態(tài)笤喳,Liveliness和Readiness为居,根據(jù)官方文檔,Liveliness探針是為了查看容器是否正在運(yùn)行杀狡,翻譯為存活探針(livenessProbe)蒙畴,Readiness探針是為了查看容器是否準(zhǔn)備好接受HTTP請(qǐng)求,翻譯為就緒探針(readinessProbe)呜象。
在Kubernetes中膳凝,Pod是Kubernetes創(chuàng)建及管理的最小的可部署的計(jì)算單元八孝,一個(gè)Pod由一個(gè)或者多個(gè)容器(Docker,rocket等等)組成鸠项,這些容器共享內(nèi)存干跛,網(wǎng)絡(luò)以及運(yùn)行容器的方式。

在Kubernetes上下文中存活探針和就緒探針被稱作健康檢查祟绊。這些容器探針是一些周期性運(yùn)行的小進(jìn)程楼入,這些探針?lè)祷氐慕Y(jié)果(成功,失敗或者未知)反映了容器在Kubernetes的狀態(tài)牧抽〖涡埽基于這些結(jié)果,Kubernetes會(huì)判斷如何處理每個(gè)容器扬舒,以保證彈性阐肤,高可用性和更長(zhǎng)的正常運(yùn)行時(shí)間。

就緒探針

就緒探針旨在讓Kubernetes知道你的應(yīng)用是否準(zhǔn)備好為請(qǐng)求提供服務(wù)讲坎。Kubernetes只有在就緒探針通過(guò)才會(huì)把流量轉(zhuǎn)發(fā)到Pod孕惜。如果就緒探針檢測(cè)失敗,Kubernetes將停止向該容器發(fā)送流量晨炕,直到它通過(guò)衫画。

存活探針

Liveness探測(cè)器是讓Kubernetes知道你的應(yīng)用是否活著。如果你的應(yīng)用還活著瓮栗,那么Kubernetes就讓它繼續(xù)存在削罩。如果你的應(yīng)用程序已經(jīng)死了,Kubernetes將移除Pod并重新啟動(dòng)一個(gè)來(lái)替換它费奸。

工作過(guò)程

讓我們看看兩個(gè)場(chǎng)景弥激,來(lái)看看就緒探針和存活探針怎樣幫助我們構(gòu)建更高可用的的系統(tǒng)。

就緒探針

一個(gè)應(yīng)用往往需要一段時(shí)間來(lái)預(yù)熱和啟動(dòng)愿阐,比如一個(gè)后端項(xiàng)目的啟動(dòng)需要連接數(shù)據(jù)庫(kù)執(zhí)行數(shù)據(jù)庫(kù)遷移等等微服,一個(gè)Spring項(xiàng)目的啟動(dòng)也需要依賴Java虛擬機(jī)。即使該過(guò)程已啟動(dòng)换况,您的服務(wù)在啟動(dòng)并運(yùn)行之前也無(wú)法運(yùn)行职辨。應(yīng)用在完全就緒之前不應(yīng)接收流量,但默認(rèn)情況下戈二,Kubernetes會(huì)在容器內(nèi)的進(jìn)程啟動(dòng)后立即開始發(fā)送流量舒裤。通過(guò)就緒探針探測(cè),直到應(yīng)用程序完全啟動(dòng)觉吭,然后才允許將流量發(fā)送到新副本腾供。


就緒探針的工作過(guò)程

存活探針

讓我們想象另一種情況,當(dāng)我們的應(yīng)用在成功啟動(dòng)以后因?yàn)橐恍┰颉板礄C(jī)”,或者遇到死鎖情況伴鳖,導(dǎo)致它無(wú)法響應(yīng)用戶請(qǐng)求节值。
在默認(rèn)情況下,Kubernetes會(huì)繼續(xù)向Pod發(fā)送請(qǐng)求榜聂,通過(guò)使用存活探針來(lái)檢測(cè)搞疗,當(dāng)發(fā)現(xiàn)服務(wù)不能在限定時(shí)間內(nèi)處理請(qǐng)求(請(qǐng)求錯(cuò)誤或者超時(shí)),就會(huì)重新啟動(dòng)有問(wèn)題的pod须肆。

存活探針的工作過(guò)程

探針類型

探針類型是指通過(guò)何種方式來(lái)進(jìn)行健康檢查匿乃,K8S有三種類型的探測(cè):HTTP,Command和TCP豌汇。
HTTP
HTTP探測(cè)可能是最常見的探針類型幢炸。即使應(yīng)用不是HTTP服務(wù),也可以創(chuàng)建一個(gè)輕量級(jí)HTTP服務(wù)器來(lái)響應(yīng)探測(cè)拒贱。比如讓Kubernetes通過(guò)HTTP訪問(wèn)一個(gè)URL宛徊,如果返回碼在200到300范圍內(nèi),就將應(yīng)用程序標(biāo)記為健康狀態(tài)逻澳,否則它被標(biāo)記為不健康闸天。
更多關(guān)于HTTP探測(cè)可參考這里

命令
對(duì)于命令探測(cè)赡盘,是指Kubernetes在容器內(nèi)運(yùn)行命令号枕。如果命令以退出代碼0返回缰揪,則容器將標(biāo)記為正常陨享。否則,它被標(biāo)記為不健康钝腺。
更多關(guān)于命令探測(cè)可參考這里抛姑。

TCP
最后一種類型的探測(cè)是TCP探測(cè),Kubernetes嘗試在指定端口上建立TCP連接艳狐。如果它可以建立連接定硝,容器被認(rèn)為是健康的; 如果它不能被認(rèn)為是不健康的。這常用于對(duì)gRPC或FTP服務(wù)的探測(cè)毫目。

更多關(guān)于TCP探測(cè)可參考這里蔬啡。

初始探測(cè)延遲

我們可以配置K8S健康檢查運(yùn)行的頻率,檢查成功或失敗的條件镀虐,以及響應(yīng)的超時(shí)時(shí)間箱蟆。可參考有關(guān)配置探針的文檔刮便。

存活探針探測(cè)失敗會(huì)導(dǎo)致pod重新啟動(dòng)空猜,所以配置初始探測(cè)延遲initialDelaySeconds十分重要,要確保在應(yīng)用準(zhǔn)備之后探針才啟動(dòng)。否則辈毯,應(yīng)用將無(wú)限重啟坝疼!

我建議使用p99啟動(dòng)時(shí)間作為initialDelaySeconds,或者取平均啟動(dòng)時(shí)間外加一個(gè)buffer谆沃。同時(shí)根據(jù)應(yīng)用程序的啟動(dòng)時(shí)間更新這個(gè)值钝凶。

舉例

以下面的一個(gè)K8S的配置代碼為例,

  • K8S將在Pod開始啟動(dòng)后120s(initialDelaySeconds)后利用HTTP訪問(wèn)8080端口的/actuator/health唁影,如果超過(guò)10s或者返回碼不在200~300內(nèi)腿椎,就緒檢查就失敗
  • 類似的,在Pod運(yùn)行過(guò)程中夭咬,K8S仍然會(huì)每隔5s(periodSeconds檢測(cè)8080端口的/actuator/health
apiVersion: apps/v1beta1
kind: Deployment
...
...
        readinessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 120
          timeoutSeconds: 10
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 10
          periodSeconds: 5

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啃炸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卓舵,更是在濱河造成了極大的恐慌南用,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掏湾,死亡現(xiàn)場(chǎng)離奇詭異裹虫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)融击,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門筑公,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人尊浪,你說(shuō)我怎么就攤上這事匣屡。” “怎么了拇涤?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵捣作,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹅士,道長(zhǎng)券躁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任掉盅,我火速辦了婚禮也拜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趾痘。我一直安慰自己慢哈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布扼脐。 她就那樣靜靜地躺著岸军,像睡著了一般奋刽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艰赞,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天佣谐,我揣著相機(jī)與錄音,去河邊找鬼方妖。 笑死狭魂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的党觅。 我是一名探鬼主播雌澄,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杯瞻!你這毒婦竟也來(lái)了镐牺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤魁莉,失蹤者是張志新(化名)和其女友劉穎睬涧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旗唁,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畦浓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了检疫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讶请。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屎媳,靈堂內(nèi)的尸體忽然破棺而出夺溢,到底是詐尸還是另有隱情,我是刑警寧澤剿牺,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布企垦,位于F島的核電站,受9級(jí)特大地震影響晒来,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜郑现,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一湃崩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧接箫,春花似錦攒读、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)剪返。三九已至,卻和暖如春邓梅,著一層夾襖步出監(jiān)牢的瞬間脱盲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工日缨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钱反,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓匣距,卻偏偏與公主長(zhǎng)得像面哥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毅待,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348