所屬技術領域:
pod
|名詞定義|
Readiness 指針用來判斷這個容器是否啟動完成,即 pod 的 condition 是否 ready。如果探測的一個結果是不成功,那麼此時它會從 pod 上 Endpoint 上移除,也就是說從接入層上面會把前一個 pod 進行摘除,直到下一次判斷成功,這個 pod 才會再次挂到相應的 endpoint 之上。
|技術特點|
readinessprobe使用場景
Pod對象啟動後,容器應用通常需要一段時間才能完成其初始化過程,例如加載配置或資料,甚至有些程式需要運作某類的預熱過程,若在此階段完成之前接入用戶端的請求,勢必會因為等待太久而影響使用者體驗,這時就需要就緒探針。
如果沒有将就緒探針添加到pod中,它們幾乎會立即成為服務端點。如果應用程式需要很長時間才能開始監聽傳入連接配接,則在服務啟動但尚未準備好接收傳入連接配接時,用戶端請求将被轉發到該pod。是以,用戶端會看到"連接配接被拒絕"類型的錯誤。
機制
與存活探針機制相同,就緒探針也支援Exec、HTTP GET和TCP Socket三種探測方式,且各自的定義機制相同,将容器定義中的livenessProbe字段名替換為readinessProbe即可定義出就緒探測的配置,這裡不再贅述。
建立readiness-exec.yaml
本文以exec方式為例實踐
[root@master ~]# more liveness-exec.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness-exec
name: liveness-exec
spec:
restartPolicy: OnFailure
containers:
-
image: busybox
args:
- /bin/sh
- -c
-
touch /tmp/healthy; sleep 10; rm -rf /tmp/healthy; sleep 600
livenessProbe:
command: ["test","-e","/tmp/healthy"]
initialDelaySeconds: 5 #探測延時時長,第一次探測前等待5秒,預設為0
periodSeconds: 5 #每5秒執行一次liveness探測,預設值10秒,最小1秒
timeoutSeconds: 2 #超長時長,預設為1s,最小值也為1s
failureThreshold: 3 #處于成功狀态時,探測操作至少連續多少次的失敗才被視為檢測不通過,預設為3,最小為1
[root@master ~]# kubectl apply -f readiness-exec.yaml
pod/readiness-exec created
檢視Pod
[root@master ~]# kubectl get po readiness-exec -w
NAME READY STATUS RESTARTS AGE
readiness-exec 0/1 ContainerCreating 0 2s
readiness-exec 0/1 Running 0 3s
readiness-exec 1/1 Running 0 9s
readiness-exec 0/1 Running 0 24s
'-w'選項可以監視pod資源變動,剛開始盡管pod處于Running狀态,但知道就緒探測指令執行成功後pod資源才ready
剛開始處于'預熱'階段,pod為running狀态但不可用;當10秒後(initialDelaySeconds + periodSeconds),readinessprobe開始第一次探測,成功後pod處于ready狀态,45秒後(sleep30 + periodSeconds * failureThreshold)探測失敗,pod再次為running但not ready狀态。
與livenessprobe差別
如果容器中的程序能夠在遇到問題或不健康的情況下自行崩潰,則不一定需要存活探針; kubelet 将根據Pod的restartPolicy自動執行正确的操作。
如果您希望容器在探測失敗時被殺死并重新啟動,那麼請指定一個存活探針,并指定restartPolicy為Always或OnFailure。
如果要僅在探測成功時才開始向 Pod 發送流量,請指定就緒探針。在這種情況下,就緒探針可能與存活探針相同,但是spec中的就緒探針的存在意味着Pod将在沒有接收到任何流量的情況下啟動,并且隻有在探針探測成功後才開始接收流量。
兩種探測的配置方法完全一樣,支援的配置參數也一樣,既可單獨探測又可結合着者一起執行。
|資料來源|
名詞定義:
https://blog.51cto.com/3241766/2428879?source=dra