Pod中容器健康檢查和恢復(fù)機(jī)制

健康檢查

Kubernetes文檔例子:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: test-liveness-exec
spec:
  containers:
  - name: liveness
    image: 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

這里定義的容器liveness會(huì)創(chuàng)建/healthy文件,然后30秒后刪除。與此同時(shí),健康檢查每隔5秒檢查文件是否存在,如果成功,則返回0,kubelet認(rèn)為是容器是健康運(yùn)行的。
運(yùn)行這個(gè)Pod

kubectl create -f test-liveness.yaml

在30s后查看event事件,使用命令:

kubectl describe pod test-liveness-exec
event事件

可以看到因?yàn)闄z查到文件不存在,所以報(bào)告了異常,此時(shí)查看Pod狀態(tài)

pod-status.png

Pod是running狀態(tài),然后再次查看event事件

event.png

可以看到容器很快被殺掉,然后重新啟動(dòng)一個(gè)新的容器,這里就會(huì)涉及容器的恢復(fù)機(jī)制,文章后面再說。
除了使用上面命令的方式之外,還可以使用http或者tcp的方式檢測
下面是http的方式:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: X-Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

容器暴露了8080端口,kubelet會(huì)定時(shí)每隔3秒訪問/healthz路徑,如果返回大于200少于400的狀態(tài)碼都認(rèn)為是成功的。
下面是tcp方式:

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 檢查非常相似。 此示例同時(shí)使用了 readiness 和 liveness probe。 容器啟動(dòng)后5秒鐘,kubelet將發(fā)送第一個(gè) readiness probe。 這將嘗試連接到端口8080上的 goproxy 容器。如果探測成功,則該 Pod 將被標(biāo)記為就緒。Kubelet 將每隔10秒鐘執(zhí)行一次該檢查。

如您所見,TCP 檢查的配置與 HTTP 檢查非常相似。 此示例同時(shí)使用了 readiness 和 liveness probe。 容器啟動(dòng)后5秒鐘,kubelet 將發(fā)送第一個(gè) readiness probe。 這將嘗試連接到端口8080上的 goproxy 容器。如果探測成功,則該 pod 將被標(biāo)記為就緒。Kubelet 將每隔10秒鐘執(zhí)行一次該檢查。

除了 readiness probe之外,該配置還包括 liveness probe。 容器啟動(dòng)15秒后,kubelet 將運(yùn)行第一個(gè) liveness probe。 就像readiness probe一樣,這將嘗試連接到 goproxy 容器上的8080端口。如果 liveness probe 失敗,容器將重新啟動(dòng)。

恢復(fù)機(jī)制

Pod的恢復(fù)機(jī)制,相關(guān)字段是(pod.spec.restartPolicy),默認(rèn)是always,可選策略有以下三種:

  • Always:在任何情況下,只要容器不在運(yùn)行狀態(tài),就自動(dòng)重啟
  • OnFailure:只有容器在異常時(shí)才自動(dòng)重啟
  • Never:從不自動(dòng)重啟
    具體使用哪種策略,根據(jù)具體情況,對(duì)于一些一次性的任務(wù)使用的是Never,如果需要關(guān)心異常退出后的上下文環(huán)境,比如日志、文件等,就需要設(shè)置成Never,不然的話,容器重啟后這些內(nèi)容就丟失。
    相關(guān)設(shè)計(jì)原則:
  • 只要 Pod 的 restartPolicy 指定的策略允許重啟異常容器(比如:Always),那么這個(gè)容器就會(huì)保持Running狀態(tài),并且進(jìn)行重啟。
  • 對(duì)于包含多個(gè)容器的Pod,只有它里面所有的容器都進(jìn)入異常狀態(tài)后,Pod才會(huì)進(jìn)入Failed狀態(tài)。
readinessProbe

有時(shí),應(yīng)用程序暫時(shí)無法對(duì)外部流量提供服務(wù)。 例如,應(yīng)用程序可能需要在啟動(dòng)期間加載大量數(shù)據(jù)或配置文件。 在這種情況下,您不想殺死應(yīng)用程序,也不想發(fā)送請(qǐng)求。 Kubernetes提供了readiness probe來檢測和減輕這些情況。 Pod中的容器可以報(bào)告自己還沒有準(zhǔn)備,不能處理Kubernetes服務(wù)發(fā)送過來的流量。
Readiness probe的配置跟liveness probe很像。唯一的不同是使用 readinessProbe 而不是livenessProbe。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,714評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,776評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,210評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,654評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

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