今天在整理思惟導圖的時候忽然發現有個我不知道的探針startupProbe
,因而查了下官方是這樣解釋的:能夠定義一個啓動探針,該探針將推遲全部其餘探針,直到 Pod 完成啓動爲止
。看完這句話有蒙圈因而提出了下面這個問題:ide
startupProbe 啓動探針存在的意義是否是: 若是服務A啓動須要1分鐘 ,咱們存活探針探測的時候設置的是initialDelaySeconds 10s後開始探測,而後她探測的時候發現服務不正常,而後就開始重啓Pod陷入死循環,可是若是意義在這個地方,那咱們能夠把探測時間調整大一點,failureThreshold 把這個也多設置幾回就好了啊。 爲何還要單獨的設置一個satrtupProbe呢?code
通過給大佬討論得出以下答案生命週期
在繼續往下看的時候你須要知道這個: startupProbe 和 livenessProbe 最大的區別就是startupProbe在探測成功以後就不會繼續探測了,而livenessProbe在pod的生命週期中一直在探測。kubernetes
若是沒有startupProbe探針的話咱們只設置livenessProbe探針話會存在以下問題: 一個服務若是前期啓動須要很長時間,那麼它後面死亡未被發現的時間就越長,爲何會這麼說呢?假設咱們一個服務A啓動完成須要2分鐘,那麼咱們以下開始定義livenessProbeit
livenessProbe: httpGet: path: /test prot: 80 failureThreshold: 1 initialDelay:5 periodSeconds: 5
若是咱們這樣定義的話,那pod 5s就會根據重啓策略進行一次重啓,這個時候你會發現pod一直會陷入死循環,那咱們能夠按照上面的猜測把配置改爲這樣io
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的重啓策略進行重啓。class
上面所描訴的就是kubernetes startupProbe的存在乎義?
多但願各位大佬指點:test
email: zsf18163201@163.com wechat:×××