kubernetes實踐之三十七:Pod健康檢查

百聯達發表於2018-05-13
一:前言
對Pod的健康狀態檢查可以透過兩類探針來檢查:LivenessProbe和ReadinessProbe
1.LivenessProbe探針: 用於判斷容器是否存活,如果LivenessProbe探針探測到容器不健康,則kubelet將殺掉該容器,並根據容器的重啟策略做相應的處理。如果一個容器不包含LivenessProbe探針,那麼kubelet認為該容器的LivenessProbe探針返回值永遠是“Success”.

2.ReadinessProbe探針: 用於判斷容器是否啟動完成,可以接收請求。如果ReadinessProbe 探針檢測到失敗,則Pod的狀態將被修改。Endpoint Controller將從Service的Endpoint中刪除包括該容器所在Pod的Endpoint.

二:LivenessProbe實現方式

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

點選(此處)摺疊或開啟

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   labels:
  5.     test: liveness
  6.   name: liveness-exec
  7. spec:
  8.   containers:
  9.   - name:liveness
  10.     image:busybox
  11.     args:
  12.     - /bin/sh
  13.     - -c
  14.     - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
  15.     livenessProbe:
  16.       exec:
  17.         command:
  18.         - cat
  19.         - /tmp/health
  20.     initialDelaySeconds: 15
  21.     timeoutSeconds: 1
透過執行“cat /tmp/health”命令來判斷一個容器執行是否正常。而該Pod執行之後,在建立/tmp/health檔案的10s之後將刪除該檔案,而LivenessProbe健康檢查的初始探測時間(initialDelaySeconds)為15s,探測結果將是Fail,將導致kubelet殺掉該容器並重啟它。

2.TCPSocketAction: 透過容器的IP地址和埠號執行TCP檢查,如果能夠建立TCP連線,則表面容器健康。

點選(此處)摺疊或開啟

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: pod-with-healthcheck
  5. spec:
  6.   containers:
  7.   - name: nginx
  8.     image: nginx
  9.     ports:
  10.     - containerPort: 80
  11.   livenessProbe:
  12.     tcpSocket:
  13.       port: 80
  14.     initialDelaySeconds: 30
  15.     timeoutSeconds: 1
3. HTTPGetAction: 透過容器的IP地址,埠號及路徑呼叫HTTP Get方法,如果響應的狀態碼大於等於200且小於400,則認為容器狀態健康。

點選(此處)摺疊或開啟

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.   name: pod-with-healthcheck
  5. spec:
  6.   containers:
  7.   - name: nginx
  8.     image: nginx
  9.     ports:
  10.     - containerPort: 80
  11.   livenessProbe:
  12.     httpGet:
  13.       port: 80
  14.       path: /_status/healthz
  15.     initialDelaySeconds: 30
  16.     timeoutSeconds: 1
kubelet定時傳送HTTP請求到localhost:80/_status/healthz來進行容器應用的健康檢查。

三:說明

1.initialDelaySeconds:啟動容器後進行首次健康檢查的等待時間,單位為s
2.timeoutSeconds: 健康檢查傳送請求後等待響應的超時時間,單位為s. 當超時發生時,kubelet會認為容器已經無法提供服務,將會重啟該容器。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154412/,如需轉載,請註明出處,否則將追究法律責任。

相關文章