天天看點

第八章 Health Check

8.1 預設的健康檢查

  每個容器啟動時會執行一個程序,此程序由Dockerfile的CMD或ENTRYPOINT指定。如果程序退出時傳回碼非零,則認為容器發生故障,K8s就會根據restartPolicy.

  如果容器程序傳回非零,K8s就認為容器發生故障,需要重新開機。

  可是有時候,容器發生了故障,但是容器并不退出。

8.2 Liveness探測

  Liveness探測讓使用者可以自定義判斷容器是否健康的條件。如果探測失敗,K8是就會重新開機容器。

開始30秒,/tmp/healthy檔案存在,cat 指令傳回0,liveness探測成功,

           kubectl describe pod liveness:

  35秒之後,檔案本删除,cat傳回非零,Liveness 探測失敗;

8.3 Readiness探測

  Readiness探測:告訴k8s什麼時候可以将容器加入到Service負載均衡池中,對外提供服務。

liveness 和 Readiness 比較:

(1)預設情況二者都是看容器退出時傳回值是否為0,來判斷是否失敗。

(2)二者的配置方法完全相同,不同的是探測失敗後的處理:Liveness重新開機容器;Readiness将容器設定為不可用。

   (3) 二者獨立執行,沒有依賴。Liveness探測判斷容器是否需要重新開機來自愈; Readiness探測容器是否已經準備好對外提供服務。

8.4 Health Check 在 Scale Up中的應用

  當執行scale up(擴容)的時候,新的副本添加到service的負載均衡中,與已有副本一起處理客戶請求。應用啟動通常需要一個準備階段,比如加載緩存、連接配接資料庫等,從容器啟動到真正提供服務需要一段時間。可以通過Readiness探測判斷容器是否就緒,避免将請求發到沒有準備好的backend.

  httpGet:  探測成功的判斷條件是http請求傳回碼在200 ~ 400之間。(支援HTTP 和 HTTPS)

        需要實作   http://[container_ip]:8080/healthy 接口。

8.5 Health check 在滾動更新中的應用