k8s-pod健康檢查_探針


對pod的健康檢查可以通過兩類探針來檢查: LivenessProbe 和 ReadinessProbe

LivenessProbe探針:用於判斷容器是否存活(running狀態),如果LivenessProbe探針探測到容器不健康,則kubelet將殺掉該容器,並根據容器的重啟策略做相應的處理。

如果一個容器不包含LivenessProbe探針,那么kubelet認為該容器的LivenessProbe探針返回的值永遠是"Success"。

ReadinessProbe: 用於判斷容器是否啟動完成(ready狀態),可以接收請求。如果ReadinessProbe探針檢測到失敗,則Pod的狀態將被修改。Endpoint Controller將從Service的

Endpoint中刪除包含該內容所在pod的Endpoint

 

kubelet定期執行LivenessProbe探針來診斷容器IDE健康狀況。LivenessProbe有三種實現方式:

1、ExecAction: 在容器內部執行一個命令,如果該命令的返回碼為0,則表明容器健康。

如: 通過執行 “cat /tmp/health”判斷容器運行是否正常。而pod創建后,在創建/tmp/health文件的10秒后刪除該文件,健康檢查的初始探測時間(initialDelaySeconds)15秒,

探測結果為fail,導致kubelet殺掉該容器並重啟。

[root@salt php-redis]# cat test.yaml 
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: 通過容器的IP地址和端口號執行TCP檢查,如果能夠建立TCP鏈接,則表明容器健康

如:通過與容器的localhost:80 建立TCP連接進行健康檢查。

[root@salt php-redis]# cat test-TCP.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-healthcheck
spec:
  containers:
  - name: naginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 1

3、HTTPGetAction: 通過容器的IP地址、端口號及路徑調用HTTP Get方法,如果響應的狀態碼大於等於200且小於400,則認為容器狀態健康。

如: kubelet定時發送HTTP請求到localhost:80/_status/healthz來進行容器應用的健康檢查。

[root@salt php-redis]# cat test-http.yaml 
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
      timeoutSconds: 1

對於每種探測方式,都需要設置initialDelaySeconds和timeoutSeconds兩個參數,他們的含義分別為:

initialDelaySeconds: 啟動容器后進行首次健康檢查的等待時間,單位為秒

timeoutSeconds: 健康檢查發送請求后等待響應的超時時間,單位為秒。當超時發生時,kubelet會認為容器已經無法提供服務,會重啟該容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM