歡迎訪問個人GitHub
關於《SpringBoot-2.3容器化技術》系列
《SpringBoot-2.3容器化技術》系列,旨在和你們一塊兒學習實踐2.3版本帶來的最新容器化技術,讓我們的Java應用更加適應容器化環境,在雲計算時代依舊緊跟主流,保持競爭力;
全系列文章分爲主題和輔助兩部分,主題部分以下:git
- 《體驗SpringBoot(2.3)應用製做Docker鏡像(官方方案)》;
- 《詳解SpringBoot(2.3)應用製做Docker鏡像(官方方案)》;
- 《掌握SpringBoot-2.3的容器探針:基礎篇》;
- 《掌握SpringBoot-2.3的容器探針:深刻篇》;
- 《掌握SpringBoot-2.3的容器探針:實戰篇》;
- 《SpringBoot-2.3鏡像方案爲何要作多個layer》;
- 《設置非root帳號不用sudo直接執行docker命令》;
- 《開發階段,將SpringBoot應用快速部署到K8S》;
SpringBoot容器探針系列文章簡介
爲了讓應用更適應容器化環境,SpringBoot2.3版本推出了新的探針技術,《掌握SpringBoot-2.3的容器探針》系列旨在與您一塊兒學習和實踐這些新技術,分爲三個階段:程序員
- 基礎篇:即本文,對容器探針的相關知識點進行梳理和學習;
- 深刻篇:繼續深刻學習探針相關的知識點;
- 實戰篇:將springboot應用部署在kubernetes環境,並使用最新的探針技術;
探針特性的官方信息
- 以下圖紅框所示,2.3版本的容器探針特性早在預覽版(v2.3.0.M4)就已經發布:

- 現在v2.3.0.RELEASE已發佈,能夠放心的學習和使用該特性了,首先把基礎知識點列出來,確保準備工做OK;
知識點整理
下面是掌握探針技術所需的基礎知識,也是本文的主要內容:github
- kubernetes的存活探針<font color="blue">livenessProbe</font>;
- kubernetes的就緒探針<font color="blue">readinessProbe</font>;
- SpringBoot的<font color="blue">actuator</font>;
接下來逐個學習,有了這些知識積累,咱們才能更好的閱讀官方資料,開發適合本身業務場景的探針;spring
kubernetes的存活探針livenessProbe
- kubernetes的探針涉及的內容是不少的,這裏只提和SpringBoot相關的部分;
- kubelet 使用存活探針<font color="blue">livenessProbe</font>來知道何時要重啓容器;
- 下圖是kubernetes官網的存活探針示例,幾個關鍵參數已經作了詳細說明:

- 可見若是咱們的SpringBoot應用發佈到kubernetes環境,只要應用還健康,livenessProbe對應的地址就要能響應200-400的返回碼;
kubernetes的就緒探針readinessProbe
- 有時候,應用程序會暫時性的不能提供通訊服務。例如,應用程序在啓動時可能須要加載很大的數據或配置文件,或是啓動後要依賴等待外部服務。在這種狀況下,既不想殺死應用程序,也不想給它發送請求。Kubernetes 提供了就緒探測器來發現並緩解這些狀況。容器所在 Pod 上報還未就緒的信息,而且不接受經過 Kubernetes Service 的流量。
- 就緒探測器的配置和存活探測器的配置類似,惟一區別就是要使用 <font color="blue">readinessProbe</font>字段,而不是 livenessProbe 字段;
- 簡單的說,就緒探針正常的容器,k8s就認爲是能夠對外提供服務的,相應的請求也會被調度到該容器上來;
SpringBoot的actuator
- 簡單來講,actuator是用來幫助用戶監控和操做SprinBoot應用的,這些監控和操做均可以經過http請求實現,以下圖,http://localhost:8080/actuator/health 地址返回的是應用的健康狀態:

- 下面是經常使用的actuator地址,訪問不一樣的地址能夠獲得不一樣的信息:

- 在SpringBoot-2.3版本中,actuator新增了兩個地址:<font color="red">/actuator/health/liveness</font>和<font color="red">/actuator/health/readiness</font>,前者用做kubernetes的<font color="blue">存活探針</font>,後者用做kubernetes的<font color="blue">就緒探針</font>;
畫外音:SpringBoot的探針技術就這點東西?
- 文章看到這裏,您可能以爲索然無味:所謂的容器探針特性如此簡單,新增兩個actuator地址留給kubernetes的存活和就緒探針用,只要這兩個地址響應正常,kubernetes就斷定該容器正常;
- 大多數時候,上述結論並沒有不妥,SpringBoot官方給出的推薦配置以下圖,咱們只要照搬便可:

- 冷靜下來仔細思考,有三個問題彷佛沒有解決:
- 首先,SpringBoot爲kubernetes提供了兩個actuator項,可是那些並未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?
- 其次,就緒探針是何時開始返回200返回碼的?應用啓動階段,業務服務可能須要一段時間才能正常工做,就緒探針要是提早返回了200,那k8s就認爲容器能夠正常工做了,這時候把外部請求調度過來是沒法正常響應的,因此搞清楚就緒探針的狀態變化邏輯很重要;
- 最後,也是最重要的一點:有的場景下,例如外部依賴服務異常、本地全局異常等狀況下,業務不想對外提供服務,等到問題解決後業務又能夠對外提供服務了,若是此時咱們能本身寫代碼控制就緒探針的返回碼,那就作到了控制kubernetes是否將外部請求調度到此容器上,這但是個很實用的功能!
還須要繼續深刻
面對上述三個問題您是否會感慨:看似簡單的容器探針技術,想要用好還需掌握更多知識,接下來的文章中我們一塊兒努力吧,從知識覆蓋到實戰操練,終究會掌握這門實用技術;docker
歡迎關注個人公衆號:程序員欣宸

https://github.com/zq2599/blog_demosspringboot