k8s 就緒探針

【k8s 系列】k8s 學習二十,就緒探針
提起探針,不知兄dei 們是否有印象,之前我們分享過存活探針,分享存活探針是如何確保異常容器自動重啟來保持應(yīng)用程序的正常運行,感興趣的可以查看文章 k8s 系列k8s 學習十七,存活探針副本機制2
今天我們就單獨來分享一下就緒探針
就緒探針
就緒探針也是分為 3 種類型
Exec 探針
在執(zhí)行進程的地方,容器的狀態(tài)是由進程的退出狀態(tài)碼決定的
HTTP GET 探針
向容器中發(fā)送 GET 請求,通過響應(yīng)的 HTTP 狀態(tài)碼判斷容器是否準備好了
TCP soket 探針
打開一個 TCP 連接到容器的指定端口,如果可以建立連接,那么就認為容器是已經(jīng)準備好了
看了上述 3 種類型,是不是感覺和存活探針好像也差不多

那么我們繼續(xù)看看就緒探針的細節(jié),存活探針和就緒探針的區(qū)別
啟動容器的時候,存活探針和就緒探針,都可以給 k8s 配置一個等待時間,當?shù)却龝r間到了之后,才可以執(zhí)行檢查的操作
存活探針就緒探針存活探針檢查容器的時候,如果檢查未通過,會立馬重啟 pod周期性的檢查容器,
若檢查不通過,證明 pod 沒有準備好,那么 該 pod 就會從服務(wù)中刪除掉
當檢查 pod 再次準備就緒了,那么該 pod 又會重新添加到服務(wù)中
存活探針是通過殺死異常的容器,使用新的正常的容器來替代他們,最終保證 pod 能夠正常工作
就緒探針是確認只有那些準備好處理請求的 pod 才會被加入到服務(wù)中來
畫一個圖來說明一下效果:

對于未就緒的 pod ,就緒探針仍然是周期性的探測,若 pod 未就緒,也不會殺掉或者重啟 pod,當 pod 被檢測到就緒后,該 pod 仍然是可以被加入到服務(wù)中的
此處的從服務(wù)中刪除和加入到服務(wù)中,具體體現(xiàn)是在 service 的 endpoints 列表中的 IP 和 PORT 信息
如何在 pod 中加入就緒探針
還記得之前我們我們演示存活探針的例子是在什么資源里面演示的嗎?我們是在 RC 和 RS 里面演示,因為 RC ?/ RS 可以動態(tài)的擴縮 pod 的數(shù)量,演示起來方便
查看我們實驗環(huán)境的 rs 資源信息

編輯 rs 資源清單,計入就緒探針
readinessProbe:
??exec:
????command:
????-?ls
????-?/var/xmtready

刪除當前的 pod
學了 RS 和 RC 后我們知道,當修改了 RS 或者 RC 資源后,對于現(xiàn)有的 pod 并不會影響,只有新生成一個 pod 的時候才會用我們最新的容器模板來創(chuàng)建 pod
因此,我們可以先刪除掉 pod
kubectl delete po --all

查看到效果,生成的每一個 pod 都是未 就緒的,我們可以查看任意 pod ,describe 查看一下詳情


關(guān)于 Readiness: ? ? ?exec [ls /var/xmtready] delay=0s timeout=1s period=10s #success=1 #failure=3
一欄,參數(shù)和之前的存活探針含義一致,此處就不在贅述了
來關(guān)注一下報錯信息:
kubelet,?minikube??Readiness?probe?failed:?ls:?cannot?access?/var/xmtready:?No?such?file?or?directory
可以看到失敗的原因是就緒探針,探測失敗了,沒有辦法正確訪問到 pod 里面的 /var/xmtready
文件或者目錄
此處也就是模擬 pod 需要正常處理請求的前置條件,必須要前置條件準備好之后, pod 才是就緒的
人為準備好就緒條件
那么對于現(xiàn)在實驗的這個情況,我們可以認為的在 pod 里面加入就緒的前置條件,那就是在 pod 中創(chuàng)建一個 /var/xmtready
文件或者目錄即可
kubectl?exec?kubia-rs-4kvg2?--?touch?/var/xmtready

此時對于 pod kubia-rs-4kvg2,已經(jīng)有了就緒的前置條件,那么該 pod 就會被認為是就緒了,就可以正常處理外部的請求了,因為我們在 kubectl get po
的時候就可以看到 READY 是 1/1
就緒探針我們在實際工作中如何使用比較好呢?
此處要說明一下,上述方式是為了演示方便,才使用直接去人為添加探針的前置條件來添加或者刪除 pod 到 服務(wù)中來
前面的文章也分享到,我們應(yīng)該通過使用標簽的方式來從服務(wù)中添加 pod 或者 刪除 pod

在工作中,我們都可以將就緒探針加入到 pod 中,但是對于何時才算就緒,應(yīng)用程序達到了什么狀態(tài)才算是就緒,才算是能夠正常處理外部客戶端打過來的請求,這個就需要業(yè)務(wù)實現(xiàn)者根據(jù)自身的需求來定義了
以上就是今天分享到的 就緒探針,順帶回顧了一下存活探針的,希望對你有幫助
今天就到這里,學習所得,若有偏差,還請斧正
歡迎點贊,關(guān)注,收藏
朋友們,你的支持和鼓勵,是我堅持分享,提高質(zhì)量的動力

好了,本次就到這里
技術(shù)是開放的,我們的心態(tài),更應(yīng)是開放的。擁抱變化,向陽而生,努力向前行。
我是阿兵云原生,歡迎點贊關(guān)注收藏,下次見~