首頁 資訊 Kubernetes:健康檢查

Kubernetes:健康檢查

來源:泰然健康網 時間:2024年12月29日 15:40

Blog:博客園 個人

應用在運行過程中難免會出現錯誤,如程序異常、軟件異常、硬件故障、網絡故障等。因此,系統(tǒng)通過一些手段來判斷應用是否運行正常,這些手段稱之為健康檢查(診斷)。

前置知識

回顧一下Pod的生命周期:

檢查機制(Check mechanisms)

有以下幾種方法來檢查容器:

exec:在容器內執(zhí)行指定命令。如果命令退出時返回碼為 0 則認為診斷成功。 gRPC:使用gRPC執(zhí)行遠程過程調用。目標應該實施gRPC運行狀況檢查。如果響應的狀態(tài)為SERVING,則認為診斷成功。gRPC檢查是一項Alpha功能,僅當您啟用GRPCContainerProbe時才可用。 httpGet:對容器的 IP 地址上指定端口和路徑執(zhí)行 HTTP Get 請求。如果響應的狀態(tài)碼大于等于 200 且小于 400,則診斷被認為是成功的。 tcpSocket:對容器的 IP 地址上的指定端口執(zhí)行 TCP 檢查。如果端口打開,則診斷被認為是成功的。

每次探測都將獲得以下三種結果之一:

Success(成功):容器通過了診斷。 Failure(失?。喝萜魑赐ㄟ^診斷。 Unknown(未知):診斷失敗,因此不會采取任何行動。

針對運行中的容器,kubelet 可以選擇是否執(zhí)行以下三種探針,以及如何針對探測結果作出反應:

livenessProbe:指示容器是否正在運行。如果存活態(tài)探測失敗,則 kubelet 會殺死容器, 并且容器將根據其重啟策略決定未來。如果容器不提供存活探針, 則默認狀態(tài)為 Success。 readinessProbe:指示容器是否準備好為請求提供服務。如果就緒態(tài)探測失敗, 端點控制器將從與 Pod 匹配的所有服務的端點列表中刪除該 Pod 的 IP 地址。 初始延遲之前的就緒態(tài)的狀態(tài)值默認為 Failure。 如果容器不提供就緒態(tài)探針,則默認狀態(tài)為 Success。 startupProbe: 指示容器中的應用是否已經啟動。如果提供了啟動探針,則所有其他探針都會被 禁用,直到此探針成功為止。如果啟動探測失敗,kubelet 將殺死容器,而容器依其重啟策略進行重啟。 如果容器沒有提供啟動探測,則默認狀態(tài)為 Success。

exec方式檢測存活示例

創(chuàng)建一個 Pod,其中運行一個基于 busybox 鏡像的容器:

apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: registry.aliyuncs.com/google_containers/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í)行如下的命令:

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

這個容器生命的前 30 秒, /tmp/healthy 文件是存在的。 所以在這最開始的 30 秒內,執(zhí)行命令 cat /tmp/healthy 會返回成功代碼。 30 秒之后,執(zhí)行命令 cat /tmp/healthy 就會返回失敗代碼。

事件如下:

Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 41s default-scheduler Successfully assigned default/liveness-exec to node-1 Normal Pulling 40s kubelet Pulling image "registry.aliyuncs.com/google_containers/busybox" Normal Pulled 39s kubelet Successfully pulled image "registry.aliyuncs.com/google_containers/busybox" in 727.748993ms Normal Created 39s kubelet Created container liveness Normal Started 39s kubelet Started container liveness Warning Unhealthy 1s (x2 over 6s) kubelet Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory

檢查看這個容器被重啟了:

[root@master test] NAME READY STATUS RESTARTS AGE liveness-exec 1/1 Running 1 82s

httpGet方式檢測存活示例

創(chuàng)建一個 Pod ,其中運行一個基于 liveness 鏡像的容器:

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

通過看 Pod 事件來檢測存活探測器已經失敗了并且容器被重新啟動了。

kubectl describe pod liveness-http

事件如下:

Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 100s default-scheduler Successfully assigned default/liveness-http to node-1 Normal Pulled 84s kubelet Successfully pulled image "mirrorgooglecontainers/liveness" in 15.537483195s Normal Pulled 52s kubelet Successfully pulled image "mirrorgooglecontainers/liveness" in 15.375906607s Normal Pulled 19s kubelet Successfully pulled image "mirrorgooglecontainers/liveness" in 15.388654652s Normal Created 18s (x3 over 83s) kubelet Created container liveness Normal Started 18s (x3 over 83s) kubelet Started container liveness Warning Unhealthy 1s (x9 over 73s) kubelet Liveness probe failed: HTTP probe failed with statuscode: 500 Normal Killing 1s (x3 over 67s) kubelet Container liveness failed liveness probe, will be restarted Normal Pulling 1s (x4 over 99s) kubelet Pulling image "mirrorgooglecontainers/liveness"

tcpSocket方式檢測存活示例

創(chuàng)建一個 Pod ,其中運行一個基于 goproxy 鏡像的容器:

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

kubelet 會在容器啟動 5 秒后發(fā)送第一個就緒探測。 這會嘗試連接 goproxy 容器的 8080 端口。 如果探測成功,這個 Pod 會被標記為就緒狀態(tài),kubelet 將繼續(xù)每隔 10 秒運行一次檢測。

除了就緒探測,這個配置包括了一個存活探測。 kubelet 會在容器啟動 15 秒后進行第一次存活探測。 與就緒探測類似,會嘗試連接 goproxy 容器的 8080 端口。 如果存活探測失敗,這個容器會被重新啟動。

前置知識檢查機制(Check mechanisms)exec方式檢測存活示例httpGet方式檢測存活示例tcpSocket方式檢測存活示例

__EOF__

本文作者: 時間之旅 本文鏈接: https://www.cnblogs.com/Rohn/p/15903872.html 關于博主: 評論和私信會在第一時間回復?;蛘咧苯铀叫盼摇?版權聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協議。轉載請注明出處! 聲援博主: 如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。

相關知識

[云原生] Kubernetes(k8s)健康檢查詳解與實戰(zhàn)演示(就緒性探針 和 存活性探針)
k8s健康檢查 spring k8s健康檢查探針多個地址
spring boot 應用在 k8s 中的健康檢查(一)
如何為托管到SAE的應用配置健康檢查
Docker安全性:最佳實踐和常見安全考慮
ASP.NET Core 中的健康狀態(tài)檢查
孕前檢查,健康檢查……
檢查身體健康!檢查身體健康
健康檢查
職業(yè)健康檢查包括()。A.上崗前的健康檢查B.在崗期間的健康檢查C.應急檢查D.離崗時的健康檢查E.職

網址: Kubernetes:健康檢查 http://m.gysdgmq.cn/newsview905319.html

推薦資訊