k8s 就緒探針

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

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

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

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

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

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


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

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

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

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