日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

健康檢查最佳實(shí)踐

更新時(shí)間:

本文介紹什么是健康檢查、以及健康檢查的推薦配置和參數(shù)詳解。

背景信息

K8s中的健康檢查主要分為兩種:
  • Liveness:存活檢測(cè),負(fù)責(zé)判斷容器是否需要重啟。
  • Readiness:就緒檢測(cè),負(fù)責(zé)判斷容器是否需要承接流量。
核心參數(shù):
  • 檢查方式:TCP/HTTP/CMD。
  • 延遲時(shí)間:容器啟動(dòng)后,多久開始檢測(cè)。
  • 檢查周期:決定檢查的頻率,靈敏度相關(guān)。
  • 超時(shí)時(shí)間:檢查的超時(shí)等待時(shí)間。
  • 成功閾值:探針在失敗后,被視為成功的最小連續(xù)成功數(shù)。Liveness必須設(shè)置為1。
  • 失敗閾值:判定總體失敗的連續(xù)失敗數(shù)。

推薦配置(快速設(shè)置版)

參數(shù)說明
Liveness使用TCP方式,延遲時(shí)間盡量貼近應(yīng)用啟動(dòng)時(shí)間,成功閾值為1,失敗閾值為3。
Readiness使用HTTP方式,延遲時(shí)間需大于應(yīng)用啟動(dòng)時(shí)間,成功閾值為1,失敗閾值為1。
超時(shí)時(shí)間通常采用默認(rèn)1秒即可,如果訪問的接口預(yù)期內(nèi)大于1秒,則適當(dāng)延長(zhǎng)。
檢查周期通常用于控制探測(cè)的靈敏度,理論上如果高頻率的檢查不會(huì)對(duì)業(yè)務(wù)有實(shí)質(zhì)影響,則檢查周期越短越好。但是,如果Liveness的檢查周期太短,可能會(huì)讓業(yè)務(wù)容器更容易重啟。

因此,可以根據(jù)計(jì)算公式(節(jié)點(diǎn)最大可容忍故障時(shí)間/3),來確定Liveness的檢查周期。例如,單個(gè)故障實(shí)例最大可容忍30秒內(nèi)不重啟,則檢查周期設(shè)置為10秒。因此,Readiness檢查周期可設(shè)置為1秒,Liveness檢查周期根據(jù)實(shí)際情況設(shè)置,如果沒有特殊需求,可保持默認(rèn)的30秒。

參數(shù)詳解(進(jìn)階版)

延遲時(shí)間

對(duì)于Livness的配置,需要重點(diǎn)理解參數(shù)“延遲時(shí)間”,其作用是幫助健康檢查探針在合適的時(shí)候去探測(cè)業(yè)務(wù)容器的狀態(tài)。如果Livness健康檢查在不合適的時(shí)候去探測(cè)(延遲時(shí)間過短),會(huì)導(dǎo)致不斷重啟這一嚴(yán)重后果。

例如,一個(gè)Java應(yīng)用啟動(dòng)可能需要耗時(shí)2分鐘,如果全部按照默認(rèn)配置,即延遲時(shí)間為10秒,檢查周期為30秒,失敗閾值為3,該應(yīng)用將永遠(yuǎn)不可能啟動(dòng)成功。因?yàn)樵谏鲜鲈O(shè)置中,Livness探針的三次健康檢查全部是在應(yīng)用啟動(dòng)完畢之前完成的,而應(yīng)用啟動(dòng)完畢之前進(jìn)行健康探測(cè),持續(xù)失敗就是預(yù)期中的結(jié)果。所以,該應(yīng)用必然會(huì)不斷重啟。

因此,當(dāng)初次部署應(yīng)用時(shí),如果無法確定應(yīng)用的啟動(dòng)時(shí)間,可以盡量將延遲時(shí)間調(diào)長(zhǎng)一點(diǎn)(例如5分鐘),等應(yīng)用成功啟動(dòng)后,再根據(jù)業(yè)務(wù)日志確定大致的啟動(dòng)耗時(shí)來修正延遲時(shí)間。需要注意的是,延遲時(shí)間過長(zhǎng)也存在弊端,因?yàn)榭赡軙?huì)讓整個(gè)發(fā)布時(shí)間過長(zhǎng)。

dg_different_latency_settings_of_liveness_check

TCP與HTTP方式的選擇

Liveness另一個(gè)容易踩坑的點(diǎn)是檢查方式,用戶需要為Readiness與Liveness配置不同的檢查方式。但是,許多用戶為了省事,將Readiness與Liveness設(shè)置成相同的檢查,其實(shí)這是非常危險(xiǎn)的行為。因?yàn)長(zhǎng)iveness與Readiness是兩種完全不同的探針,有著完全不同的作用。有時(shí)候業(yè)務(wù)由于流量擁塞導(dǎo)致不可用,只需摘除當(dāng)前實(shí)例的流量,無需重啟容器。當(dāng)前請(qǐng)求被正常處理完成后,就可以重新負(fù)載流量并接收請(qǐng)求。但是,如果此時(shí)重啟容器,可能會(huì)產(chǎn)生以下影響:
  • 當(dāng)前已有請(qǐng)求無法被順利處理。
  • 由于當(dāng)前實(shí)例重啟,可能會(huì)導(dǎo)致更長(zhǎng)的時(shí)間無法負(fù)載流量,甚至出現(xiàn)雪崩。

例如,對(duì)于Java應(yīng)用,Spring Boot框架提供了內(nèi)置的健康檢查。該健康檢查會(huì)檢測(cè)多個(gè)組件的情況,例如與Redis、Nacos等組件連接與心跳是否正常,并判斷是否需要重啟應(yīng)用。由于網(wǎng)絡(luò)抖動(dòng)以及相關(guān)組件服務(wù)的可用性無法完全確定,這類異常無法成為當(dāng)前應(yīng)用是否需要重啟的判斷依據(jù)。

因此,為了減少因下游鏈路的抖動(dòng)造成預(yù)期外的實(shí)例重啟,必須區(qū)分Liveness與Readiness。如果不方便單獨(dú)實(shí)現(xiàn)一個(gè)接口來檢查應(yīng)用自身的情況,可以通過Liveness采用TCP、Readiness采用HTTP的方式探測(cè)。重啟這一操作需要謹(jǐn)慎對(duì)待,因此檢測(cè)容錯(cuò)率更高的TCP方式更適合Liveness。HTTP方式的檢測(cè)更容易反映業(yè)務(wù)的真實(shí)處理情況,更適合Readiness這一處理流量的檢測(cè)。

說明 例如一個(gè)端口可以通過TCP建立連接,但是不一定能夠通過HTTP請(qǐng)求返回預(yù)期返回碼(200)。

失敗閾值與成功閾值

對(duì)于Livenss而言,其實(shí)只有一個(gè)動(dòng)作,即失敗重啟。因此,成功閾值固定為1,且不可修改(由于成功沒有顯式動(dòng)作,所以成功閾值大于1也沒有意義)。而失敗閾值默認(rèn)為3,即連續(xù)失敗三次,會(huì)認(rèn)為真正失敗,并開始重啟容器。

對(duì)于Readiness而言,其實(shí)有兩種動(dòng)作,成功則接入流量,失敗則切出流量。因此,為保證可用性,成功閾值與失敗閾值都推薦設(shè)置為1,即當(dāng)出現(xiàn)檢測(cè)失敗時(shí)立即切出流量,從而盡可能短時(shí)間內(nèi)避免流量有損,而當(dāng)檢測(cè)成功(即應(yīng)用已經(jīng)做好接收流量的準(zhǔn)備)后立即切入流量。但是,快速切流可能導(dǎo)致剩余實(shí)例平均網(wǎng)絡(luò)負(fù)載進(jìn)一步增加,因此建議配合指標(biāo)彈性一起使用。
說明 此處流量特指使用SLB接入流量的SAE應(yīng)用,而微服務(wù)內(nèi)部調(diào)用的流量控制屬于另一套體系。
dg_threshold_of_health_checks