startupProbe存在的意義是什麼?

startupProbe存在的意義是什麼?

引言

今天在整理思維導圖的時候突然發現有個我不知道的探針startupProbe,於是查了下官方是這樣解釋的:可以定義一個啓動探針,該探針將推遲所有其他探針,直到 Pod 完成啓動爲止。看完這句話有蒙圈於是提出了下面這個問題:

startupProbe 啓動探針存在的意義是不是: 如果服務A啓動需要1分鐘 ,我們存活探針探測的時候設置的是initialDelaySeconds 10s後開始探測,然後她探測的時候發現服務不正常,然後就開始重啓Pod陷入死循環,但是如果意義在這個地方,那我們可以把探測時間調整大一點,failureThreshold 把這個也多設置幾次就行了啊。 爲什麼還要單獨的設置一個satrtupProbe呢?

經過給大佬討論得出如下答案

startupProbe的存在意義?

在繼續往下看的時候你需要知道這個: startupProbe 和 livenessProbe 最大的區別就是startupProbe在探測成功之後就不會繼續探測了,而livenessProbe在pod的生命週期中一直在探測。

如果沒有startupProbe探針的話我們只設置livenessProbe探針話會存在如下問題: 一個服務如果前期啓動需要很長時間,那麼它後面死亡未被發現的時間就越長,爲什麼會這麼說呢?假設我們一個服務A啓動完成需要2分鐘,那麼我們如下開始定義livenessProbe

livenessProbe:
  httpGet:
    path: /test
    prot: 80
failureThreshold: 1
initialDelay:5
periodSeconds: 5

如果我們這樣定義的話,那pod 5s就會根據重啓策略進行一次重啓,這個時候你會發現pod一直會陷入死循環,那我們可以按照上面的猜想把配置改成這樣

livenessProbe:
  httpGet:
    path: /test
    prot: 80
failureThreshold: 6
initialDelay:40
periodSeconds: 5

你肯定會說你看這樣不就行了嗎?這樣的話pod就不會陷入死循環能啓動起來了,確實這樣pod能夠啓動起來了,但是你有沒有考慮過這樣一個問題,當我們啓動完成之後,在後期的探測中,你需要6*5=30s才能發現這個pod不可用,這個時候你的服務已經停止運行了30s你才發現,這在生產中有可能是不會被原諒的。
還有就是這邊只是我們假設一個服務A需要1分鐘才能起來,但是在實際生產中你如何定義這些值呢???
針對上面這兩個問題引入startupProbe之後都解決了

livenessProbe:
  httpGet:
    path: /test
    prot: 80
failureThreshold: 1
initialDelay:5
periodSeconds: 5

livenessProbe:
  httpGet:
    path: /test
    prot: 80
failureThreshold: 60
initialDelay:5
periodSeconds: 5

我們這樣設置之後,由於啓動探針的存在,程序有605s=300s的啓動時間,一旦啓動探針探測成功之後,就會被livenessProbe接管,這樣在運行中出問題livenessProbe就能在15=5s內發現。如果啓動探測是3分鐘內還沒有探測成功,則接受Pod的重啓策略進行重啓。

上面所描訴的就是kubernetes startupProbe的存在意義?
多希望各位大佬指點:

email: [email protected]
wechat:×××
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章