1. 程式人生 > 其它 >k8s的健康性檢查-Health Check

k8s的健康性檢查-Health Check

1、k8s健康性檢查的預設方式
k8s預設的健康檢查機制:基於Dockerfile檔案中的CMD或者ENTRYPOINT,如果程序退出時返回碼為非零,則認為容器發生故障,k8s就會根據restartPolicy重啟容器。

1)docker的restartPolicy有一下4種:
always:(無論以什麼碼退出,docker daemon都會嘗試重啟退出的容器,手動停止後,策略不再生效);

OnFailure:因出錯停止的容器(非零退出)。可以max-retries指定最大嘗試重啟的限制次數;

unless-stopped:與always類似,區別在於手動停止容器後,就算重啟docker deemon,容器策略也不再生效。

no:不自動重啟(預設模式)

2)k8s中的格式
...
spec:
restartPolicy: OnFailure #重啟策略
containers:
...


3)缺陷
這種機制的缺點就是在於:有時候容器發生故障,但程序並未退出,如容器的內部web服務顯示500,或者系統超載,但此時的httpd的程序並沒有異常退出,所以就容器依然正常執行。簡而言之就是無法判斷容器內的服務釋放正常。

2、Health Check-> liveness探測
1)liveness的目的
使用者可以自定義判斷容器是否健康為條件,如果探測失敗,k8s就會重啟容器,從而告訴k8s什麼時候重啟容器實現自愈。

2)livenessProbe的關鍵字
...
spec:
containers:
...
livenessProbe: #Health Check的機制
httpGet: #探測方式:http的方式
path:/example/index.html #預設的索引目錄
port: 8080 #服務的埠
scheme: http #用到的協議
initialDelaySeconds: 5 #容器啟動10秒後開始執行liveness探測;若某個容器啟動需要30秒,則這個值就要設定大於30秒
periodSeconds: 10 #每次執行liveness探測的時間間隔
failureThreshold: 3 #liveness探測失敗的次數;如果連續三次失敗,就會殺掉程序重啟容器
successThreshold: 1 #liveness探測成功的次數;如果成功1次,就表示容器正常
timeoutSeconds: 5 #執行livesness的超時時間,如果執行後5秒沒有結果,則重啟執行liveness


3、Health Check-> readness探測
1)readness的目的
Readness探測是告訴什麼時候可以將容器加入到svc負載均衡池中,對外提供服務
Readness探測的配置語法和liveness完全一樣

4、總結
1、若不特意配置liveness和readness,k8s則會採用預設的方式。即通過判斷容器啟動程序的返回值是否為零來判斷探測是否成功。
2、Livess和readness配置完全一樣,語法和引數也一樣,不同之處在於探測失敗後的行為:livess探測是重啟容器;而readness探測則是將容器設定為不可用,不接受service轉發的請求
3、 Liveness和readness是獨立執行的,二者之間沒有依賴,可單獨使用可同時使用:
Liveness探測判斷的是容器是否需要重啟實現自愈;
  Readness探測判斷的是容器是否已準備好對外提供服務。


5、Liveness和readness的探測手段方法
http Get:返回200-400算成功,別的算失敗;

tcp socket:你指定的tcp埠開啟,比如能telnet 上;
cmd exec:在容器中執行一個命令 推出返回0 算成功。

————————————————
版權宣告:本文為CSDN博主「最美dee時光」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_44729138/article/details/105863966