【k8s 系列】k8s 學(xué)習(xí)二十,就緒探針
提起探針,不知兄dei 們是否有印象,之前我們分享過(guò)存活探針,分享存活探針是如何確保異常容器自動(dòng)重啟來(lái)保持應(yīng)用程序的正常運(yùn)行,感興趣的可以查看文章 k8s 系列k8s 學(xué)習(xí)十七,存活探針副本機(jī)制2
今天我們就單獨(dú)來(lái)分享一下就緒探針
就緒探針
就緒探針也是分為 3 種類(lèi)型
- Exec 探針
在執(zhí)行進(jìn)程的地方,容器的狀態(tài)是由進(jìn)程的退出狀態(tài)碼決定的
- HTTP GET 探針
向容器中發(fā)送 GET 請(qǐng)求,通過(guò)響應(yīng)的 HTTP 狀態(tài)碼判斷容器是否準(zhǔn)備好了
- TCP soket 探針
打開(kāi)一個(gè) TCP 連接到容器的指定端口,如果可以建立連接,那么就認(rèn)為容器是已經(jīng)準(zhǔn)備好了
看了上述 3 種類(lèi)型,是不是感覺(jué)和存活探針好像也差不多
那么我們繼續(xù)看看就緒探針的細(xì)節(jié),存活探針和就緒探針的區(qū)別
啟動(dòng)容器的時(shí)候,存活探針和就緒探針,都可以給 k8s 配置一個(gè)等待時(shí)間,當(dāng)?shù)却龝r(shí)間到了之后,才可以執(zhí)行檢查的操作
存活探針 | 就緒探針 |
---|---|
存活探針檢查容器的時(shí)候,如果檢查未通過(guò),會(huì)立馬重啟 pod | 周期性的檢查容器, 若檢查不通過(guò),證明 pod 沒(méi)有準(zhǔn)備好,那么 該 pod 就會(huì)從服務(wù)中刪除掉 當(dāng)檢查 pod 再次準(zhǔn)備就緒了,那么該 pod 又會(huì)重新添加到服務(wù)中 |
- 存活探針是通過(guò)殺死異常的容器,使用新的正常的容器來(lái)替代他們,最終保證 pod 能夠正常工作
- 就緒探針是確認(rèn)只有那些準(zhǔn)備好處理請(qǐng)求的 pod 才會(huì)被加入到服務(wù)中來(lái)
畫(huà)一個(gè)圖來(lái)說(shuō)明一下效果:
對(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ù)量,演示起來(lái)方便
查看我們實(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ì)用我們最新的容器模板來(lái)創(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ù)和之前的存活探針含義一致,此處就不在贅述了
來(lái)關(guān)注一下報(bào)錯(cuò)信息:
kubelet, minikube Readiness probe failed: ls: cannot access /var/xmtready: No such file or directory
可以看到失敗的原因是就緒探針,探測(cè)失敗了,沒(méi)有辦法正確訪(fǎng)問(wèn)到 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í)際工作中如何使用比較好呢?
此處要說(shuō)明一下,上述方式是為了演示方便,才使用直接去人為添加探針的前置條件來(lái)添加或者刪除 pod 到 服務(wù)中來(lái)
前面的文章也分享到,我們應(yīng)該通過(guò)使用標(biāo)簽的方式來(lái)從服務(wù)中添加 pod 或者 刪除 pod
在工作中,我們都可以將就緒探針加入到 pod 中,但是對(duì)于何時(shí)才算就緒,應(yīng)用程序達(dá)到了什么狀態(tài)才算是就緒,才算是能夠正常處理外部客戶(hù)端打過(guò)來(lái)的請(qǐng)求,這個(gè)就需要業(yè)務(wù)實(shí)現(xiàn)者根據(jù)自身的需求來(lái)定義了
以上就是今天分享到的 就緒探針,順帶回顧了一下存活探針的,希望對(duì)你有幫助
今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正
歡迎點(diǎn)贊,關(guān)注,收藏
朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力
好了,本次就到這里
技術(shù)是開(kāi)放的,我們的心態(tài),更應(yīng)是開(kāi)放的。擁抱變化,向陽(yáng)而生,努力向前行。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-548928.html
我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~
更多的可以查看 零聲每晚八點(diǎn)直播:https://ke.qq.com/course/417774文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-548928.html
到了這里,關(guān)于k8s 就緒探針的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!