kubernetes健康檢查


有時候容器在running的狀態,但是里面的服務掛了,這個就難辦了,所以k8s提供了一種檢查服務是否健康的方法

Liveness Probe的種類:
● ExecAction:在container中執行指定的命令。當其執行成功時,將其退出碼設置為0;
● TCPSocketAction:執行一個TCP檢查使用container的IP地址和指定的端口作為socket。如果端口處於打開狀態視為成功;
● HTTPGetAcction:執行一個HTTP默認請求使用container的IP地址和指定的端口以及請求的路徑作為url,用戶可以通過host參數設置請求的地址,通過scheme參數設置協議類型(HTTP、HTTPS)如果其響應代碼在200~400之間,設為成功。

當前kubelet擁有兩個檢測器,他們分別對應不通的觸發器(根據觸發器的結構執行進一步的動作):
● Liveness Probe:表示container是否處於live狀態。如果 LivenessProbe失敗,LivenessProbe將會通知kubelet對應的container不健康了。隨后kubelet將kill掉 container,並根據RestarPolicy進行進一步的操作。默認情況下LivenessProbe在第一次檢測之前初始化值為 Success,如果container沒有提供LivenessProbe,則也認為是Success;

● ReadinessProbe:表示container是否以及處於可接受service請求的狀態了。如 果ReadinessProbe失敗,endpoints controller將會從service所匹配到的endpoint列表中移除關於這個container的IP地址。因此對於Service匹配到的 endpoint的維護其核心是ReadinessProbe。默認Readiness的初始值是Failure,如果一個container沒有提供 Readiness則被認為是Success。

initialDelaySeconds:用來表示初始化延遲的時間,也就是告訴監測從多久之后開始運行,單位是秒
timeoutSeconds: 用來表示監測的超時時間,如果超過這個時長后,則認為監測失敗

Liveness Probe配置的寫法和ReadinessProbe的一樣
示例:

(1)ExecAction:在容器內部執行一個命令,如果該命令的返回值為0,則表示容器健康。如下例子,啟動后 rm -fr /tmp/health 刪除該文件,后cat ,當然會返回0 文件不存在,那么檢查結果為失敗

apiVersion:v1 
kind: Pod 
metadata: 
  name: liveness-exec 
  label: 
    name: liveness 
spec: 
  containers: 
  - name: tomcat 
    image: grc.io/google_containers/tomcat 
    args: 
    - /bin/sh 
    - -c 
    - echo ok >/tmp.health;sleep 10; rm -fr /tmp/health;sleep 600 
    livenessProbe: 
      exec: 
        command: 
        - cat 
        - /tmp/health 
      initianDelaySeconds:15 
      timeoutSeconds:1  

  



(2)TCPSocketAction:通過容器ip地址和端口號執行TCP檢查,如果能夠建立tcp連接表明容器健康

kind: Pod 
metadata: 
  name: pod-with-healthcheck 
spec: 
  containers: 
  - name: nginx 
    image: nginx 
    livenessProbe: 
      tcpSocket:  
        port: 80 
      initianDelaySeconds:30 
      timeoutSeconds:1 

 



(3)HTTPGetAction:通過容器Ip地址、端口號及路徑調用http get方法,如果響應的狀態嗎大於200且小於400,則認為容器健康


apiVersion:v1 
kind: Pod 
metadata: 
  name: pod-with-healthcheck 
spec: 
  containers: 
  - name: nginx 
    image: nginx 
    livenessProbe: 
      httpGet:  
        path: /_status/healthz 
        port: 80 
      initianDelaySeconds:30 
      timeoutSeconds:1 

 

對於每種探針方式,都需要設置initialDelaySeconds和timeoutSeconds兩個參數,它們含義如下:
● initialDelaySeconds:啟動容器后首次監控檢查的等待時間,單位秒
● timeouSeconds:健康檢查發送請求后等待響應的超時時間,單位秒。當發生超時就被認為容器無法提供服務無,該容器將被重啟



免責聲明!

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



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