目錄
一、探針是什么
二、探針類型?
Ⅰ、livenessProbe
容器重啟策略?
Ⅱ、readinessProbe
Ⅲ、startupProbe
執(zhí)行順序:
字段詳情
三、探測機制
Ⅰ、HTTP GET探針
Ⅱ、TCP套接字探針
Ⅲ、Exec探針
一、探針是什么
探針:是由 kubelet 對容器執(zhí)行的定期診斷
要執(zhí)行診斷,則需kubelet 調用由容器實現(xiàn)的 Handler。探針有三種類型的處理程序:
ExecAction:在容器內執(zhí)行指定命令。如果命令退出時返回碼為 0 則認為診斷成功。
TCPSocketAction:對指定端口上的容器的 IP 地址進行 TCP 檢查。如果端口打開,則診斷被認為是成功的。
HTTPGetAction:對指定的端口和路徑上的容器的 IP 地址執(zhí)行 HTTP Get 請求。如果響應的狀態(tài)碼大于等于200 且小于 400,則診斷被認為是成功的。
和微服務的心跳檢測類似,每隔一段時間,檢測這個容器是否還正常工作,檢測狀態(tài)分為三種,每次檢測,都會得到其中一種
成功:容器通過了診斷。
失敗:容器未通過診斷。
未知:診斷失敗,因此不會采取任何行動。
k8s會根據(jù)檢測到的不同狀態(tài),對容器進行不同的處理
二、探針類型?
探針主要有以下三種類型:
livenessProbe?
readinessProbe
startupProbe
Ⅰ、livenessProbe
livenessProbe:存活性探針
指檢測容器是否正在運行。
如果存活探測失敗,則 kubelet 會殺死容器(需要注意:殺死的是container不是pod),并且容器將受到其重啟策略(Always,OnFailure,Never)的影響。
如果容器不提供存活探針,則默認狀態(tài)為 Success。
容器重啟策略?
PodSpec 中有一個 restartPolicy 字段,其值可以設置為
Always? ? ? ? ? (默認為 Always)
OnFailure
Never
Always:表示一旦不管以何種方式終止運行,kubelet都將重啟
OnFailure:表示只有Pod以非0退出碼退出才重啟
Nerver:表示不再重啟該Pod
restartPolicy 適用于 Pod 中的所有容器。
restartPolicy 僅指通過同一節(jié)點上的 kubelet 重新啟動容器。
失敗的容器由 kubelet 以五分鐘為上限的指數(shù)退避延遲(10秒,20秒,40秒…)重新啟動,并在成功執(zhí)行十分鐘后重置。
如 Pod 官方文檔中所說,一旦pod綁定到一個節(jié)點,Pod 將永遠不會重新綁定到另一個節(jié)點。
?
Ⅱ、readinessProbe
readinessProbe:就緒性探針
指示容器是否準備好服務請求【對外接受請求訪問】。
如果就緒探測失敗,端點控制器將從與 Pod 匹配的所有 Service 的端點中刪除該 Pod 的 IP 地址IP:Port。
初始延遲之前的就緒狀態(tài)默認為 Failure。
如果容器不提供就緒探針,則默認狀態(tài)為 Success。 ?
用于判斷容器內的程序是否存活,如果不滿足健康條件,那么會自動從Service的 EndPoint 列表中去除該pod的 IP:Port
Ⅲ、startupProbe
startupProbe:啟動探針,k8s1.16新增加的一種類型
指檢測容器中的應用是否已經啟動。
如果提供了啟動探測(startup probe),則禁用所有其他探測,直到它成功為止。
如果啟動探測失敗,kubelet 將殺死容器,容器服從其重啟策略進行重啟。
如果容器沒有提供啟動探測,則默認狀態(tài)為成功Success。
主要解決在慢啟動程序或復雜程序中readinessProbe、livenessProbe探針無法較好的判斷程序是否啟動、是否存活。
引入startupProbe探針是為readinessProbe、livenessProbe探針服務。
執(zhí)行順序:
如果三個探針同時存在,則先執(zhí)行startupProbe探針,其他兩個探針將會被暫時禁用,直到startupProbe一次探測成功,其他2個探針才啟動;如果startupProbe探測失敗,kubelet 將殺死容器,并根據(jù)restartPolicy重啟策略來判斷容器是否要進行重啟操作。
就緒探針與存活探針之間的重要區(qū)別:如果容器未通過準備檢查,則不會被終止或重新啟動。
存活探針:通過殺死異常的容器,并用新的正常容器替代他們來保持Pod正常工作
就緒探針:確保只有準備好處理請求的Pod才可以接收探針請求
探針示例
探針資源 yml 中的常用的配置,如下。可根據(jù)具體的需求去設置
spec:
?? ?containers:
?? ??? ?# 就緒探針
?? ??? ?readinessProbe:
?? ??? ??? ?# 檢測方式
?? ??? ??? ?httpGet:?
?? ??? ??? ?# 超時時間
?? ??? ??? ?timeoutSeconds:?
?? ??? ??? ?# 延遲時間
?? ??? ??? ?initialDelaySeconds:
?? ??? ??? ?# 失敗次數(shù)限制
?? ??? ??? ?failureThreshold:
?? ??? ??? ?# 每多少秒檢測一次
?? ??? ??? ?periodSeconds:
?? ??? ?# 存活探針
?? ??? ?livenessProbe:
? ? ? ? ? ? # 檢測方式
?? ??? ??? ?httpGet:?
?? ??? ??? ?# 超時時間
?? ??? ??? ?timeoutSeconds:?
?? ??? ??? ?# 延遲時間
?? ??? ??? ?initialDelaySeconds:
?? ??? ??? ?# 失敗次數(shù)限制
?? ??? ??? ?failureThreshold:
?? ??? ??? ?# 每多少秒檢測一次
?? ??? ??? ?periodSeconds:
字段詳情
這些字段可以精確的控制存活和就緒檢測
initialDelaySeconds:容器啟動后要等待多少秒后存活和就緒探測器才被初始化
默認是 0 秒,最小值是 0
?periodSeconds:執(zhí)行探測的時間間隔(單位是秒)
默認是 10 秒。最小值是 1。
timeoutSeconds:探測的超時時間
默認值是 1 秒。最小值是 1。?
successThreshold:探測器在失敗后,被視為成功的最小連續(xù)成功數(shù)。
默認值是 1。存活探測的這個值必須是 1。最小值是 1。?
failureThreshold:當探測失敗時,Kubernetes 的重試次數(shù)。存活探測情況下的放棄就意味著重新啟動容器。就緒探測情況下的放棄 Pod 會被打上未就緒的標簽。
默認值是 3。最小值是 1。?
?在 httpGet 上配置額外的字段:?
host:連接使用的主機名,默認是 Pod 的 IP。也可以在 HTTP 頭中設置 “Host” 來代替。
?scheme :用于設置連接主機的方式(HTTP 還是 HTTPS)。
默認是 HTTP。
path:訪問 HTTP 服務的路徑。?
httpHeaders:請求中自定義的 HTTP 頭。HTTP 頭字段允許重復。?
port:訪問容器的端口號或者端口名。如果數(shù)字必須在 1 ~ 65535 之間。?
三、探測機制
探測機制有三種:
HTTP GET探針
TCP套接字探針
Exec探針
就緒探針/存活探針,都有這三種探測機制。
Ⅰ、HTTP GET探針
該探針,是針對容器的IP地址(或者是指定的端口和地址)執(zhí)行HTTP GET請求,狀態(tài)碼:
如果返回狀態(tài)碼是2xx或者3xx,則探測成功。
如果服務器返回錯誤的狀態(tài)碼或者根本沒有反應,那么認定探測失敗,容器會被重新啟動。
Ⅱ、TCP套接字探針
TCP套接字探針:嘗試與容器指定的端口建立連接,
如果連接成功,則探測成功,
如果連接失敗,則認定為探測失敗,容器將被重新啟動
Ⅲ、Exec探針
Exec探針:在容器內執(zhí)行任意命令,并檢查命令的退出狀態(tài)碼,文章來源:http://www.zghlxwxcb.cn/news/detail-486748.html
如果返回的狀態(tài)碼為0,則探測成功,
如果返回狀態(tài)碼不為0,則探測失敗,容器將被重新啟動。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-486748.html
到了這里,關于【云原生K8S】Kubernetes之探針的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!