K8S容器編排之POD健康檢測(1)

Pod健康檢測機(jī)制

對于Pod的健康狀態(tài)檢測侮繁,kubernetes提供了兩類探針(Probe)來執(zhí)行對Pod的健康狀態(tài)檢測:

  • LivenessProbe探針:

用于判斷容器是否存活翼馆,即Pod是否為running狀態(tài)抽兆,如果LivenessProbe探針探測到容器不健康,則kubelet將kill掉容器鲫剿,并根據(jù)容器的重啟策略是否重啟挂捅,如果一個容器不包含LivenessProbe探針,則Kubelet認(rèn)為容器的LivenessProbe探針的返回值永遠(yuǎn)成功洪囤。

  • ReadinessProbe探針:

用于判斷容器是否啟動完成,即容器的Ready是否為True撕氧,可以接收請求瘤缩,如果ReadinessProbe探測失敗,則容器的Ready將為False伦泥,控制器將此PodEndpoint從對應(yīng)的serviceEndpoint列表中移除剥啤,從此不再將任何請求調(diào)度此Pod上,直到下次探測成功不脯。


每類探針都支持三種探測方法:

  • exec:通過執(zhí)行命令來檢查服務(wù)是否正常府怯,針對復(fù)雜檢測或無HTTP接口的服務(wù),命令返回值為0則表示容器健康防楷。

  • httpGet:通過發(fā)送http請求檢查服務(wù)是否正常牺丙,返回200-399狀態(tài)碼則表明容器健康。

  • tcpSocket:通過容器的IP和Port執(zhí)行TCP檢查复局,如果能夠建立TCP連接冲簿,則表明容器健康。
    探針探測的結(jié)果有以下三者之一:

  • Success:Container通過了檢查肖揣。

  • Failure:Container未通過檢查民假。

  • Unknown:未能執(zhí)行檢查,因此不采取任何措施龙优。


LivenessProbe探針配置

示例一:通過exec方式做健康探測

exec-liveness.yaml  
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

在該配置文件中羊异,對容器執(zhí)行livenessProbe檢查,periodSeconds字段指定kubelet每5s執(zhí)行一次檢查彤断,檢查的命令為cat /tmp/healthy野舶,initialDelaySeconds字段告訴kubelet應(yīng)該在執(zhí)行第一次檢查之前等待5秒,
如果命令執(zhí)行成功宰衙,則返回0平道,那么kubelet就認(rèn)為容器是健康的,如果為非0供炼,則Kubelet會Kill掉容器并根據(jù)重啟策略來決定是否需要重啟一屋。

當(dāng)容器啟動時,它會執(zhí)行以下命令:

 /bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

對于容器的前30秒袋哼,有一個/tmp/healthy文件冀墨。因此,在前30秒內(nèi)涛贯,該命令cat /tmp/healthy返回成功代碼诽嘉。30秒后,cat /tmp/healthy返回失敗代碼。

創(chuàng)建Pod:

kubectl create -f https://k8s.io/examples/pods/probe/exec-liveness.yaml

30秒內(nèi)虫腋,查看Pod事件

kubectl describe pod liveness-exec

輸出表明尚未探測到失敗

FirstSeen    LastSeen    Count   From            SubobjectPath           Type        Reason      Message
--------- --------    -----   ----            -------------           --------    ------      -------
24s       24s     1   {default-scheduler }                    Normal      Scheduled   Successfully assigned liveness-exec to worker0
23s       23s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Pulling     pulling image "k8s.gcr.io/busybox"
23s       23s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Pulled      Successfully pulled image "k8s.gcr.io/busybox"
23s       23s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Created     Created container with docker id 86849c15382e; Security:[seccomp=unconfined]
23s       23s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Started     Started container with docker id 86849c15382e

35秒后骄酗,再次查看Pod事件

kubectl describe pod liveness-exec

在輸出的中顯示探測失敗,并且容器已被殺死重新創(chuàng)建悦冀。

FirstSeen LastSeen    Count   From            SubobjectPath           Type        Reason      Message
--------- --------    -----   ----            -------------           --------    ------      -------
37s       37s     1   {default-scheduler }                    Normal      Scheduled   Successfully assigned liveness-exec to worker0
36s       36s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Pulling     pulling image "k8s.gcr.io/busybox"
36s       36s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Pulled      Successfully pulled image "k8s.gcr.io/busybox"
36s       36s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Created     Created container with docker id 86849c15382e; Security:[seccomp=unconfined]
36s       36s     1   {kubelet worker0}   spec.containers{liveness}   Normal      Started     Started container with docker id 86849c15382e
2s        2s      1   {kubelet worker0}   spec.containers{liveness}   Warning     Unhealthy   Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory

再等30秒趋翻,確認(rèn)Container已重新啟動

kubectl get pod liveness-exec

下面輸出中RESTARTS的次數(shù)已增加:

AME            READY     STATUS    RESTARTS   AGE
liveness-exec   1/1       Running   1          1m

示例二:通過HTTP方式做健康探測

pods/probe/http-liveness.yaml  
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

在配置文件中,使用k8s.gcr.io/liveness鏡像雏门,創(chuàng)建出一個Pod嘿歌,其中periodSeconds字段指定kubelet每3秒執(zhí)行一次探測,initialDelaySeconds字段告訴kubelet延遲等待3秒茁影,探測方式為向容器中運行的服務(wù)發(fā)送HTTP GET請求宙帝,請求8080端口下的/healthz, 任何大于或等于200且小于400的代碼表示成功。任何其他代碼表示失敗募闲。

創(chuàng)建此Pod

kubectl create -f https://k8s.io/examples/pods/probe/http-liveness.yaml

10秒后步脓,查看Pod事件以驗證liveness探測失敗并且Container已重新啟動:

kubectl describe pod liveness-http

httpGet探測方式有如下可選的控制字段

host:要連接的主機(jī)名,默認(rèn)為Pod IP浩螺,可以在http request head中設(shè)置host頭部靴患。
scheme: 用于連接host的協(xié)議,默認(rèn)為HTTP要出。
path:http服務(wù)器上的訪問URI鸳君。
httpHeaders:自定義HTTP請求headersHTTP允許重復(fù)headers患蹂。
port: 容器上要訪問端口號或名稱或颊。

示例三:通過TCP方式做健康探測

Kubelet將嘗試在指定的端口上打開容器上的套接字,如果能建立連接传于,則表明容器健康囱挑。

pods/probe/tcp-liveness-readiness.yaml  
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檢查方式非常相似,示例中兩種探針都使用了沼溜,在容器啟動5秒后平挑,kubelet將發(fā)送第一個readinessProbe探針,這將連接到容器的8080端口系草,如果探測成功通熄,則該Pod將被標(biāo)識為ready,10秒后找都,kubelet將進(jìn)行第二次連接唇辨。
除此之后,此配置還包含了livenessProbe探針檐嚣,在容器啟動15秒后助泽,kubelet將發(fā)送第一個livenessProbe探針,仍然嘗試連接容器的8080端口嚎京,如果連接失敗則重啟容器嗡贺。
創(chuàng)建:

kubectl create -f https://k8s.io/examples/pods/probe/tcp-liveness-readiness.yaml

15秒后,查看Pod事件以驗證活動探測:

kubectl describe pod goproxy

當(dāng)容器有多個端口時鞍帝,通常會給每個端口命名诫睬,所以在使用探針探測時,也可以直接寫自定義的端口名稱

ports:
- name: liveness-port
  containerPort: 8080
  hostPort: 8080
livenessProbe:
  httpGet:
    path: /healthz
    port: liveness-port
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帕涌,一起剝皮案震驚了整個濱河市摄凡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚓曼,老刑警劉巖亲澡,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纫版,居然都是意外死亡床绪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門其弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癞己,“玉大人,你說我怎么就攤上這事梭伐”匝牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵糊识,是天一觀的道長绩社。 經(jīng)常有香客問我,道長技掏,這世上最難降的妖魔是什么铃将? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮哑梳,結(jié)果婚禮上劲阎,老公的妹妹穿的比我還像新娘。我一直安慰自己鸠真,他們只是感情好悯仙,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吠卷,像睡著了一般锡垄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祭隔,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天货岭,我揣著相機(jī)與錄音路操,去河邊找鬼。 笑死千贯,一個胖子當(dāng)著我的面吹牛屯仗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搔谴,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼魁袜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敦第?” 一聲冷哼從身側(cè)響起峰弹,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芜果,沒想到半個月后鞠呈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡右钾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年粟按,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霹粥。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡灭将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出后控,到底是詐尸還是另有隱情庙曙,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布浩淘,位于F島的核電站捌朴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏张抄。R本人自食惡果不足惜砂蔽,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望署惯。 院中可真熱鬧左驾,春花似錦、人聲如沸极谊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轻猖。三九已至帆吻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咙边,已是汗流浹背猜煮。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工次员, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人王带。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓翠肘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辫秧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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

  • ??最近需要寫一個腳本被丧,一次部署所有POD盟戏,測試中發(fā)現(xiàn),有部分POD啟動后由于連接依賴服務(wù)失敗甥桂,而導(dǎo)致自身不能正常...
    云爬蟲技術(shù)研究筆記閱讀 19,856評論 0 0
  • 1. 概述kubelet運行機(jī)制分析 在Kubernetes集群中柿究,每個Node節(jié)點(又稱Minion)上都會啟動...
    梅_梅閱讀 2,817評論 1 5
  • kubelet運行機(jī)制分析 在Kubernetes集群中,每個Node節(jié)點(又稱Minion)上都會啟動一個Kub...
    c84f3109853b閱讀 6,050評論 1 5
  • 文章圖片上傳不正常黄选,如需文檔蝇摸,可聯(lián)系微信:1017429387 目錄 1 安裝... 4 1.1 配置探針... ...
    Mrhappy_a7eb閱讀 6,313評論 0 5
  • 33 時間都去哪兒了? 你办陷,有沒有問過自己貌夕,我的時間都去哪里了?那么怎么才能讓我們的時間過得更有意義民镜,更有效率呢啡专?...
    瓊樓玉樹閱讀 210評論 0 0