天天看點

Pod必備知識: ReadinessProbes

所屬技術領域:

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:

    exec:
    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必備知識: ReadinessProbes

剛開始處于'預熱'階段,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