有時候容器在running的狀態,可是裏面的服務掛了,這個就難辦了,因此k8s提供了一種檢查服務是否健康的方法nginx
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 文件不存在,那麼檢查結果爲失敗
api
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鏈接代表容器健康
tomcat
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,則認爲容器健康
socket
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:健康檢查發送請求後等待響應的超時時間,單位秒。當發生超時就被認爲容器沒法提供服務無,該容器將被重啓tcp