浙江建筑信息監(jiān)管平臺(tái)seo建站公司
文章目錄
- 一、探針介紹
- 二、探針類型
- 三、探針定義方式
- 四、探針實(shí)例
- 五、啟動(dòng)探針測試
- 六、存活探針測試
- 七、就緒探針測試
一、探針介紹
-
概念
在 Kubernetes 中 Pod 是最小的計(jì)算單元,而一個(gè) Pod 又由多個(gè)容器組成,相當(dāng)于每個(gè)容器就是一個(gè)應(yīng)用,應(yīng)用在運(yùn)行期間,可能因?yàn)橄嚓P(guān)原因?qū)е聭?yīng)用異常等。所以,我們需要對k8s進(jìn)行健康檢查,而我們可以通過探針配置運(yùn)行狀況檢查,來確定每個(gè) Pod 的狀態(tài)。
二、探針類型
-
存活探針(Liveness Probe)
存活探針用于檢測容器內(nèi)應(yīng)用程序的健康狀態(tài)。如果存活探針失敗(即應(yīng)用程序不健康),k8s將會(huì)自動(dòng)重啟容器,以嘗試恢復(fù)應(yīng)用程序的健康狀態(tài)。如果重啟容器仍然無法解決問題,Kubernetes 可能會(huì)根據(jù)配置的重啟策略進(jìn)一步采取行動(dòng)。重啟策略包括:
- Always(默認(rèn)):始終重啟容器,無限次數(shù)地嘗試恢復(fù)應(yīng)用程序的健康狀態(tài)。
- OnFailure:僅在容器失敗(退出狀態(tài)碼非零)時(shí)重啟容器,嘗試恢復(fù)應(yīng)用程序的健康狀態(tài)。
- Never:永不重啟容器,不會(huì)嘗試恢復(fù)應(yīng)用程序的健康狀態(tài)。
-
就緒探針(Readiness Probe)
對于就緒探針(Readiness Probe):就緒探針用于檢測容器是否已經(jīng)準(zhǔn)備好接收流量。如果就緒探針失敗,Kubernetes 將從服務(wù)負(fù)載均衡的池中剔除該容器。這意味著新的流量將不會(huì)被路由到該容器,直到就緒探針成功為止。這可以確保只有健康的容器能夠接收流量,避免將流量發(fā)送到尚未準(zhǔn)備好的容器上。一旦就緒探針成功,Kubernetes 將再次將容器納入服務(wù)負(fù)載均衡,并開始將新的流量路由到該容器。
-
啟動(dòng)探針(Startup Probe)
啟動(dòng)探針用于檢測容器內(nèi)應(yīng)用程序是否已經(jīng)啟動(dòng)成功。與存活探針和就緒探針不同,啟動(dòng)探針僅在容器啟動(dòng)時(shí)執(zhí)行,并且只需檢測一次。啟動(dòng)探針的結(jié)果不會(huì)影響容器的重啟或負(fù)載均衡。它主要用于檢測應(yīng)用程序是否成功啟動(dòng),并在啟動(dòng)過程中提供一定的等待時(shí)間。如果啟動(dòng)探針失敗,Kubernetes 不會(huì)采取任何特殊行動(dòng)。這是因?yàn)閱?dòng)探針失敗只意味著應(yīng)用程序尚未成功啟動(dòng),并且不會(huì)觸發(fā)容器的重啟或負(fù)載均衡操作。
三、探針定義方式
- 執(zhí)行命令(Exec):通過在容器內(nèi)執(zhí)行特定的命令來檢查應(yīng)用程序的狀態(tài)。如果命令的返回狀態(tài)碼是 0,探針被認(rèn)為是成功的;否則,探針被認(rèn)為是失敗的。
- 發(fā)送 HTTP 請求(HTTP GET):通過發(fā)送 HTTP GET 請求到容器內(nèi)的指定端點(diǎn)來檢查應(yīng)用程序的狀態(tài)。如果返回的 HTTP 狀態(tài)碼在 2xx 或 3xx 范圍內(nèi),探針被認(rèn)為是成功的;否則,探針被認(rèn)為是失敗的。
- TCP 套接字(TCP Socket):通過嘗試建立到容器內(nèi)指定端口的 TCP 連接來檢查應(yīng)用程序的狀態(tài)。如果連接成功建立,探針被認(rèn)為是成功的;否則,探針被認(rèn)為是失敗的。
四、探針實(shí)例
- 查看我們coredns的探針配置:kubectl edit deploy coredns -n kube-system
五、啟動(dòng)探針測試
-
快速部署nginx的pod:kubectl create deployment nginx --image=nginx
-
測試nginx啟動(dòng)探針-http(層級參考第四點(diǎn)coredns的層級):kubectl edit deploy nginx
startupProbe:httpGet:path: /api/pathport: 80failureThreshold: 3periodSeconds: 10successThreshold: 1timeoutSeconds: 5
startupProbe: #應(yīng)用啟動(dòng)探針httpGet: #使用http方式進(jìn)行請求探測path: /api/path #請求路徑port: 80 #請求端口failureThreshold: 3 #失敗次數(shù)達(dá)到多少次算失敗periodSeconds: 10 #間隔時(shí)間successThreshold: 1 #成功次數(shù)達(dá)到多少次算成功timeoutSeconds: 5 #請求的超時(shí)時(shí)間
查看:kubectl get pod
查看詳情:kubectl describe pod nginx-569854844d-6dzxd
解:因?yàn)槲覀冞@邊設(shè)置了啟動(dòng)探針,去訪問/api/path。由于nginx沒有這個(gè)路徑,所以訪問失敗了,所以pod一直沒有ready??梢詫⒙窂礁臑?index.html。
-
測試nginx啟動(dòng)探針-tcp:kubectl edit deploy nginx
startupProbe:tcpSocket:port: 80failureThreshold: 3periodSeconds: 10successThreshold: 1timeoutSeconds: 5
-
測試nginx啟動(dòng)探針-shell:kubectl edit deploy nginx
startupProbe:exec: command: - sh- -c- "echo 'success' > /inited;"failureThreshold: 3periodSeconds: 10successThreshold: 1timeoutSeconds: 5
查看: kubectl exec -it nginx-576dc58bc8-scbv7 cat /inited
六、存活探針測試
-
測試nginx應(yīng)用存活探針-http:kubectl edit deploy nginx
livenessProbe:httpGet:path: /started.htmlport: 80failureThreshold: 3periodSeconds: 10successThreshold: 1timeoutSeconds: 5
查看:kubectl describe pod nginx-65cdf95974-m8l2p
因?yàn)椴淮嬖?started.html文件,所以檢測不到存活,將地址改為/index.html即可
七、就緒探針測試
-
測試nginx就緒探針-http:kubectl edit deploy nginx
readinessProbe:httpGet:path: /started.htmlport: 80failureThreshold: 3periodSeconds: 10successThreshold: 1timeoutSeconds: 5
查看:kubectl describe pod nginx-5bd5c78bbd-tbzvb
因?yàn)椴淮嬖?started.html文件,所以無法就緒,將地址改為/index.html即可