掌握SpringBoot-2.3的容器探針:深入篇
- 2020 年 6 月 10 日
- 筆記
歡迎訪問我的GitHub
//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的容器探針》系列的第二篇,前文 《掌握SpringBoot-2.3的容器探針:基礎篇》知道了kubernetes的存活和就緒探針,以及SpringBoot-2.3的actuator新增的兩個endpoint,當我們把應用部署到kubernetes環境時,這些知識讓我們能配置出官方推薦的探針方案,如下圖:
- 儘管上述配置已經可以覆蓋多數場景,依然有三個問題未解決:
-
首先,SpringBoot為kubernetes提供了兩個actuator項,但是那些並未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?
-
其次,就緒探針是什麼時候開始返回200返回碼的?應用啟動階段,業務服務可能需要一段時間才能正常工作,就緒探針要是提前返回了200,那k8s就認為容器可以正常工作了,這時候把外部請求調度過來是無法正常響應的,所以搞清楚就緒探針的狀態變化邏輯很重要;
-
最後,也是最重要的一點:有的場景下,例如外部依賴服務異常、本地全局異常等情況下,業務不想對外提供服務,等到問題解決後業務又可以對外提供服務了,如果此時我們能自己寫程式碼控制就緒探針的返回碼,那就做到了控制kubernetes是否將外部請求調度到此容器上,這可是個很實用的功能!
本篇就是為了解決上述問題而作,這些問題解決後才能用好探針技術,讓它在容器環境帶來更大價值;
關鍵知識點
解決上述問題的關鍵集中在以下幾個知識點:
- SpringBoot對容器環境的判斷;
- SpringBoot對狀態定義;
- 獲取狀態;
- 監聽狀態;
- 修改狀態;
接下來挨個學習這些知識點;
SpringBoot對容器環境的判斷
-
官方文檔如下圖所示,SpringBoot判斷是否是kubernetes環境的邏輯很簡單:是否有_SERVICE_HOST和