歡迎訪問我的GitHub
- 地址:https://github.com/zq2599/blog_demos
- 內容:原創文章分類匯總,及配套原始碼,涉及Java、Docker、K8S、DevOPS等
關于《SpringBoot-2.3容器化技術》系列
《SpringBoot-2.3容器化技術》系列,旨在和大家一起學習實踐2.3版本帶來的最新容器化技術,讓咱們的Java應用更加適應容器化環境,在云計算時代依舊緊跟主流,保持競爭力;
全系列文章分為主題和輔助兩部分,主題部分如下:
- 《體驗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;
知識點整理
下面是掌握探針技術所需的基礎知識,也是本文的主要內容:
- kubernetes的存活探針livenessProbe;
- kubernetes的就緒探針readinessProbe;
- SpringBoot的actuator;
接下來逐個學習,有了這些知識積累,我們才能更好的閱讀官方資料,開發適合自己業務場景的探針;
kubernetes的存活探針livenessProbe
- kubernetes的探針涉及的內容是很多的,這里只提和SpringBoot相關的部分;
- kubelet 使用存活探針livenessProbe來知道什么時候要重啟容器;
- 下圖是kubernetes官網的存活探針示例,幾個關鍵引數已經做了詳細說明:

- 可見如果我們的SpringBoot應用發布到kubernetes環境,只要應用還健康,livenessProbe對應的地址就要能回應200-400的回傳碼;
kubernetes的就緒探針readinessProbe
- 有時候,應用程式會暫時性的不能提供通信服務,例如,應用程式在啟動時可能需要加載很大的資料或組態檔,或是啟動后要依賴等待外部服務,在這種情況下,既不想殺死應用程式,也不想給它發送請求,Kubernetes 提供了就緒探測器來發現并緩解這些情況,容器所在 Pod 上報還未就緒的資訊,并且不接受通過 Kubernetes Service 的流量,
- 就緒探測器的配置和存活探測器的配置相似,唯一區別就是要使用 readinessProbe欄位,而不是 livenessProbe 欄位;
- 簡單的說,就緒探針正常的容器,k8s就認為是可以對外提供服務的,相應的請求也會被調度到該容器上來;
SpringBoot的actuator
- 簡單來說,actuator是用來幫助用戶監控和操作SprinBoot應用的,這些監控和操作都可以通過http請求實作,如下圖,http://localhost:8080/actuator/health 地址回傳的是應用的健康狀態:

- 下面是常用的actuator地址,訪問不同的地址可以得到不同的資訊:

- 在SpringBoot-2.3版本中,actuator新增了兩個地址:/actuator/health/liveness和/actuator/health/readiness,前者用作kubernetes的存活探針,后者用作kubernetes的就緒探針;
畫外音:SpringBoot的探針技術就這點東西?
- 文章看到這里,您可能覺得索然無味:所謂的容器探針特性如此簡單,新增兩個actuator地址留給kubernetes的存活和就緒探針用,只要這兩個地址回應正常,kubernetes就判定該容器正常;
- 大多數時候,上述結論并無不妥,SpringBoot官方給出的推薦配置如下圖,我們只要照搬即可:

- 冷靜下來仔細思考,有三個問題似乎沒有解決:
-
首先,SpringBoot為kubernetes提供了兩個actuator項,但是那些并未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?
-
其次,就緒探針是什么時候開始回傳200回傳碼的?應用啟動階段,業務服務可能需要一段時間才能正常作業,就緒探針要是提前回傳了200,那k8s就認為容器可以正常作業了,這時候把外部請求調度過來是無法正常回應的,所以搞清楚就緒探針的狀態變化邏輯很重要;
-
最后,也是最重要的一點:有的場景下,例如外部依賴服務例外、本地全域例外等情況下,業務不想對外提供服務,等到問題解決后業務又可以對外提供服務了,如果此時我們能自己寫代碼控制就緒探針的回傳碼,那就做到了控制kubernetes是否將外部請求調度到此容器上,這可是個很實用的功能!
還需要繼續深入
面對上述三個問題您是否會感慨:看似簡單的容器探針技術,想要用好還需掌握更多知識,接下來的文章中咱們一起努力吧,從知識覆寫到實戰操練,終究會掌握這門實用技術;
歡迎關注我的公眾號:程式員欣宸

https://github.com/zq2599/blog_demos
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/168187.html
標籤:Java
