書(shū)名: Kubernetes權(quán)威指南:從Docker到Kubernetes實(shí)踐全接觸(第4版)作者名: 龔正等編著本章字?jǐn)?shù): 1136字更新時(shí)間: 2019-09-23 11:04:38
3.8 Pod健康檢查和服務(wù)可用性檢查
Kubernetes對(duì)Pod的健康狀態(tài)可以通過(guò)兩類探針來(lái)檢查: LivenessProbe和ReadinessProbe,kubelet定期執(zhí)行這兩類探針來(lái)診斷容器的健康狀況。
(1)LivenessProbe探針:用于判斷容器是否存活(Running狀態(tài)),如果LivenessProbe探針探測(cè)到容器不健康,則kubelet將殺掉該容器,并根據(jù)容器的重啟策略做相應(yīng)的處理。如果一個(gè)容器不包含LivenessProbe探針,那么kubelet認(rèn)為該容器的LivenessProbe探針?lè)祷氐闹涤肋h(yuǎn)是Success。
(2)ReadinessProbe探針:用于判斷容器服務(wù)是否可用(Ready狀態(tài)),達(dá)到Ready狀態(tài)的Pod才可以接收請(qǐng)求。對(duì)于被Service管理的Pod,Service與Pod Endpoint的關(guān)聯(lián)關(guān)系也將基于Pod是否Ready進(jìn)行設(shè)置。如果在運(yùn)行過(guò)程中Ready狀態(tài)變?yōu)镕alse,則系統(tǒng)自動(dòng)將其從Service的后端Endpoint列表中隔離出去,后續(xù)再把恢復(fù)到Ready狀態(tài)的Pod加回后端Endpoint列表。這樣就能保證客戶端在訪問(wèn)Service時(shí)不會(huì)被轉(zhuǎn)發(fā)到服務(wù)不可用的Pod實(shí)例上。
LivenessProbe和ReadinessProbe均可配置以下三種實(shí)現(xiàn)方式。
(1)ExecAction:在容器內(nèi)部執(zhí)行一個(gè)命令,如果該命令的返回碼為0,則表明容器健康。
在下面的例子中,通過(guò)執(zhí)行“cat /tmp/health”命令來(lái)判斷一個(gè)容器運(yùn)行是否正常。在該P(yáng)od運(yùn)行后,將在創(chuàng)建/tmp/health文件10s后刪除該文件,而LivenessProbe健康檢查的初始探測(cè)時(shí)間(initialDelaySeconds)為15s,探測(cè)結(jié)果是Fail,將導(dǎo)致kubelet殺掉該容器并重啟它:
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: gcr.io/google_containers/busybox args: - /bin/sh - -c - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600 livenessProbe: exec: command: - cat - /tmp/health initialDelaySeconds: 15 timeoutSeconds: 1
(2)TCPSocketAction:通過(guò)容器的IP地址和端口號(hào)執(zhí)行TCP檢查,如果能夠建立TCP連接,則表明容器健康。
在下面的例子中,通過(guò)與容器內(nèi)的localhost:80建立TCP連接進(jìn)行健康檢查:
apiVersion: v1 kind: Pod metadata: name: pod-with-healthcheck spec: containers: - name: nginx image: nginx ports: - containerPort: 80 livenessProbe: tcpSocket: port: 80 initialDelaySeconds: 30 timeoutSeconds: 1
(3)HTTPGetAction:通過(guò)容器的IP地址、端口號(hào)及路徑調(diào)用HTTP Get方法,如果響應(yīng)的狀態(tài)碼大于等于200且小于400,則認(rèn)為容器健康。
在下面的例子中,kubelet定時(shí)發(fā)送HTTP請(qǐng)求到localhost:80/_status/healthz來(lái)進(jìn)行容器應(yīng)用的健康檢查:
apiVersion: v1 kind: Pod metadata: name: pod-with-healthcheck spec: containers: - name: nginx image: nginx ports: - containerPort: 80 livenessProbe: httpGet: path: /_status/healthz port: 80 initialDelaySeconds: 30 timeoutSeconds: 1
對(duì)于每種探測(cè)方式,都需要設(shè)置initialDelaySeconds和timeoutSeconds兩個(gè)參數(shù),它們的含義分別如下。
◎ initialDelaySeconds:?jiǎn)?dòng)容器后進(jìn)行首次健康檢查的等待時(shí)間,單位為s。
◎ timeoutSeconds:健康檢查發(fā)送請(qǐng)求后等待響應(yīng)的超時(shí)時(shí)間,單位為s。當(dāng)超時(shí)發(fā)生時(shí),kubelet會(huì)認(rèn)為容器已經(jīng)無(wú)法提供服務(wù),將會(huì)重啟該容器。
Kubernetes的ReadinessProbe機(jī)制可能無(wú)法滿足某些復(fù)雜應(yīng)用對(duì)容器內(nèi)服務(wù)可用狀態(tài)的判斷,所以Kubernetes從1.11版本開(kāi)始,引入Pod Ready++特性對(duì)Readiness探測(cè)機(jī)制進(jìn)行擴(kuò)展,在1.14版本時(shí)達(dá)到GA穩(wěn)定版,稱其為Pod Readiness Gates。
通過(guò)Pod Readiness Gates機(jī)制,用戶可以將自定義的ReadinessProbe探測(cè)方式設(shè)置在Pod上,輔助Kubernetes設(shè)置Pod何時(shí)達(dá)到服務(wù)可用狀態(tài)(Ready)。為了使自定義的ReadinessProbe生效,用戶需要提供一個(gè)外部的控制器(Controller)來(lái)設(shè)置相應(yīng)的Condition狀態(tài)。
Pod的Readiness Gates在Pod定義中的ReadinessGate字段進(jìn)行設(shè)置。下面的例子設(shè)置了一個(gè)類型為www.example.com/feature-1的新Readiness Gate:
Kind: Pod ...... spec: readinessGates: - conditionType: "www.example.com/feature-1" status: conditions: - type: Ready # Kubernetes系統(tǒng)內(nèi)置的名為Ready的Condition status: "True" lastProbeTime: null lastTransitionTime: 2018-01-01T00:00:00Z - type: "www.example.com/feature-1" # 用戶自定義Condition status: "False" lastProbeTime: null lastTransitionTime: 2019-03-01T00:00:00Z containerStatuses: - containerID: docker://abcd... ready: true ......
新增的自定義Condition的狀態(tài)(status)將由用戶自定義的外部控制器設(shè)置,默認(rèn)值為False。Kubernetes將在判斷全部readinessGates條件都為True時(shí),才設(shè)置Pod為服務(wù)可用狀態(tài)(Ready為True)。
- ADuC 7026原理與應(yīng)用
- 計(jì)算機(jī)組成原理
- 光榮與夢(mèng)想:互聯(lián)網(wǎng)口述系列叢書(shū)·許榕生篇
- 大學(xué)計(jì)算機(jī)基礎(chǔ)上機(jī)指導(dǎo)與習(xí)題集(第2版)(微課版)
- 有道云筆記:記錄,成為更好的自己
- 暢聊科技:寫(xiě)給大眾的信息技術(shù)小史(第2版)
- 改變未來(lái)的九大算法
- 計(jì)算機(jī)科學(xué)概論(第13版)
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(第2版)
- 區(qū)塊鏈2.0(第2版)
- 光榮與夢(mèng)想:互聯(lián)網(wǎng)口述系列叢書(shū)·劉韻潔篇
- Axure RP9產(chǎn)品經(jīng)理就業(yè)技能實(shí)戰(zhàn)教程
- 機(jī)器學(xué)習(xí):從公理到算法
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)立體化教程
- 從跨界到專精:T型產(chǎn)品經(jīng)理的自我修煉