k8s 容器存活探測(cè)

對(duì)于Pod的健康狀態(tài)檢測(cè)释牺,kubernetes提供了兩類探針(Probe)來執(zhí)行對(duì)Pod的健康狀態(tài)檢測(cè):

  • liveness probe(存活探針)
    用于判斷容器是否存活更米,即Pod是否為running狀態(tài)肥缔,如果LivenessProbe探針探測(cè)到容器不健康虽缕,則kubelet將kill掉容器刷钢,并根據(jù)容器的重啟策略是否重啟,如果一個(gè)容器不包含LivenessProbe探針,則Kubelet認(rèn)為容器的LivenessProbe探針的返回值永遠(yuǎn)成功。

  • readiness probe(就緒探針)
    用于判斷容器是否啟動(dòng)完成云石,即容器的Ready是否為True,可以接收請(qǐng)求研乒,如果ReadinessProbe探測(cè)失敗汹忠,則容器的Ready將為False,控制器將此Pod的Endpoint從對(duì)應(yīng)的service的Endpoint列表中移除雹熬,從此不再將任何請(qǐng)求調(diào)度此Pod上宽菜,直到下次探測(cè)成功。

每類探針都支持三種探測(cè)方法

  • exec:通過執(zhí)行命令來檢查服務(wù)是否正常竿报,針對(duì)復(fù)雜檢測(cè)或無HTTP接口的服務(wù)铅乡,命令返回值為0則表示容器健康。
  • httpGet:通過發(fā)送http請(qǐng)求檢查服務(wù)是否正常烈菌,返回200-399狀態(tài)碼則表明容器健康阵幸。
  • tcpSocket:通過容器的IP和Port執(zhí)行TCP檢查,如果能夠建立TCP連接僧界,則表明容器健康侨嘀。

每種方式都可以定義在readiness 或者liveness 中。比如定義readiness 中http get 就是意思說如果我定義的這個(gè)path的http get 請(qǐng)求返回200-400以外的http code 就把我從所有有我的服務(wù)里面刪了吧捂襟,如果定義在liveness里面就是把我kill 了。
注意欢峰,liveness不會(huì)重啟pod葬荷,pod是否會(huì)重啟由你的restart policy 控制涨共。

探針探測(cè)的結(jié)果有以下三者之一

  • Success:Container通過了檢查。
  • Failure:Container未通過檢查宠漩。
  • Unknown:未能執(zhí)行檢查举反,因此不采取任何措施。

重啟策略

  • Always: 總是重啟
  • OnFailure: 如果失敗就重啟
  • Never: 永遠(yuǎn)不重啟

LivenessProbe探針配置

示例一: 通過exec方式做健康探測(cè)

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox  
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

在該配置文件中扒吁,對(duì)容器執(zhí)行l(wèi)ivenessProbe檢查火鼻,periodSeconds字段指定kubelet每5s執(zhí)行一次檢查,檢查的命令為cat /tmp/healthy雕崩,initialDelaySeconds字段告訴kubelet應(yīng)該在執(zhí)行第一次檢查之前等待5秒魁索,
如果命令執(zhí)行成功,則返回0盼铁,那么kubelet就認(rèn)為容器是健康的粗蔚,如果為非0,則Kubelet會(huì)Kill掉容器并根據(jù)重啟策略來決定是否需要重啟(kubernetes默認(rèn)為POD配置的重啟策略為Always)

示例二: 通過HTTP方式做健康探測(cè)

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness # 官方用戶測(cè)試的demo鏡像
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: X-Custom-Header
          value: Awesome
      initialDelaySeconds: 3 
      periodSeconds: 3

在配置文件中饶火,使用k8s.gcr.io/liveness鏡像鹏控,創(chuàng)建出一個(gè)Pod,其中periodSeconds字段指定kubelet每3秒執(zhí)行一次探測(cè)肤寝,initialDelaySeconds字段告訴kubelet延遲等待3秒当辐,探測(cè)方式為向容器中運(yùn)行的服務(wù)發(fā)送HTTP GET請(qǐng)求,請(qǐng)求8080端口下的/healthz, 任何大于或等于200且小于400的代碼表示成功鲤看。任何其他代碼表示失敗缘揪。

httpGet探測(cè)方式有如下可選的控制字段:

  • host:要連接的主機(jī)名,默認(rèn)為Pod IP刨摩,可以在http request head中設(shè)置host頭部寺晌。
  • scheme: 用于連接host的協(xié)議,默認(rèn)為HTTP澡刹。
  • path:http服務(wù)器上的訪問URI呻征。
  • httpHeaders:自定義HTTP請(qǐng)求headers,HTTP允許重復(fù)headers罢浇。
  • port: 容器上要訪問端口號(hào)或名稱

示例三:通過TCP方式做健康探測(cè)

Kubelet將嘗試在指定的端口上打開容器上的套接字陆赋,如果能建立連接,則表明容器健康嚷闭。

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

TCP檢查方式和HTTP檢查方式非常相似攒岛,示例中兩種探針都使用了,在容器啟動(dòng)5秒后胞锰,kubelet將發(fā)送第一個(gè)readinessProbe探針灾锯,這將連接到容器的8080端口,如果探測(cè)成功嗅榕,則該P(yáng)od將被標(biāo)識(shí)為ready顺饮,10秒后吵聪,kubelet將進(jìn)行第二次連接.除此之后,此配置還包含了livenessProbe探針兼雄,在容器啟動(dòng)15秒后吟逝,kubelet將發(fā)送第一個(gè)livenessProbe探針,仍然嘗試連接容器的8080端口赦肋,如果連接失敗則重啟容器块攒。

ReadinessProbe探針配置

ReadinessProbe探針的使用場(chǎng)景l(fā)ivenessProbe稍有不同,有的時(shí)候應(yīng)用程序可能暫時(shí)無法接受請(qǐng)求佃乘,比如Pod已經(jīng)Running了囱井,但是容器內(nèi)應(yīng)用程序尚未啟動(dòng)成功,在這種情況下恕稠,如果沒有ReadinessProbe琅绅,則Kubernetes認(rèn)為它可以處理請(qǐng)求了,然而此時(shí)鹅巍,我們知道程序還沒啟動(dòng)成功是不能接收用戶請(qǐng)求的千扶,所以不希望kubernetes把請(qǐng)求調(diào)度給它,則使用ReadinessProbe探針骆捧。
ReadinessProbe和livenessProbe可以使用相同探測(cè)方式澎羞,只是對(duì)Pod的處置方式不同,ReadinessProbe是將Pod IP:Port從對(duì)應(yīng)的EndPoint列表中刪除敛苇,而livenessProbe則Kill容器并根據(jù)Pod的重啟策略來決定作出對(duì)應(yīng)的措施妆绞。

ReadinessProbe探針探測(cè)容器是否已準(zhǔn)備就緒,如果未準(zhǔn)備就緒則kubernetes不會(huì)將流量轉(zhuǎn)發(fā)給此Pod枫攀。

ReadinessProbe探針與livenessProbe一樣也支持exec括饶、httpGet、TCP的探測(cè)方式来涨,配置方式相同图焰,只不過是將livenessProbe字段修改為ReadinessProbe。

readinessProbe:
 exec:
   command:
   - cat
   - /tmp/healthy
 initialDelaySeconds: 5
 periodSeconds: 5

配置探針(Probe)相關(guān)屬性

探針(Probe)有許多可選字段蹦掐,可以用來更加精確的控制Liveness和Readiness兩種探針的行為(Probe):

  • initialDelaySeconds:Pod啟動(dòng)后延遲多久才進(jìn)行檢查技羔,單位:秒。
  • periodSeconds:檢查的間隔時(shí)間卧抗,默認(rèn)為10藤滥,單位:秒。
  • timeoutSeconds:探測(cè)的超時(shí)時(shí)間社裆,默認(rèn)為1拙绊,單位:秒。
  • successThreshold:探測(cè)失敗后認(rèn)為成功的最小連接成功次數(shù),默認(rèn)為1时呀,在Liveness探針中必須為1张漂,最小值為1晶默。
  • failureThreshold:探測(cè)失敗的重試次數(shù)谨娜,重試一定次數(shù)后將認(rèn)為失敗,在readiness探針中磺陡,Pod會(huì)被標(biāo)記為未就緒趴梢,默認(rèn)為3,最小值為1币他。

參考

https://blog.sctux.com/2018/12/18/kubernetes-liveness/
https://blog.51cto.com/newfly/2137136

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坞靶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝴悉,更是在濱河造成了極大的恐慌彰阴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍冠,死亡現(xiàn)場(chǎng)離奇詭異尿这,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庆杜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門射众,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晃财,你說我怎么就攤上這事叨橱。” “怎么了断盛?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵罗洗,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我钢猛,道長(zhǎng)伙菜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任厢洞,我火速辦了婚禮仇让,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躺翻。我一直安慰自己丧叽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布公你。 她就那樣靜靜地躺著踊淳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迂尝,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天脱茉,我揣著相機(jī)與錄音,去河邊找鬼垄开。 笑死琴许,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溉躲。 我是一名探鬼主播榜田,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼锻梳!你這毒婦竟也來了箭券?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤疑枯,失蹤者是張志新(化名)和其女友劉穎辩块,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荆永,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡废亭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屁魏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔以。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氓拼,靈堂內(nèi)的尸體忽然破棺而出你画,到底是詐尸還是另有隱情,我是刑警寧澤桃漾,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布坏匪,位于F島的核電站,受9級(jí)特大地震影響撬统,放射性物質(zhì)發(fā)生泄漏适滓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一恋追、第九天 我趴在偏房一處隱蔽的房頂上張望凭迹。 院中可真熱鬧,春花似錦苦囱、人聲如沸嗅绸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鱼鸠。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚀狰,已是汗流浹背愉昆。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麻蹋,地道東北人跛溉。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哥蔚,于是被迫代替她去往敵國(guó)和親倒谷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容