中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何深入掌握SpringBoot-2.3的容器探針

發布時間:2021-10-12 13:49:22 來源:億速云 閱讀:185 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關如何深入掌握SpringBoot-2.3的容器探針,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

  1. 當我們把應用部署到kubernetes環境時,這些知識讓我們能配置出官方推薦的探針方案,如下圖:

如何深入掌握SpringBoot-2.3的容器探針

  1. 盡管上述配置已經可以覆蓋多數場景,依然有三個問題未解決:

  • 首先,SpringBoot為kubernetes提供了兩個actuator項,但是那些并未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?

  • 其次,就緒探針是什么時候開始返回200返回碼的?應用啟動階段,業務服務可能需要一段時間才能正常工作,就緒探針要是提前返回了200,那k8s就認為容器可以正常工作了,這時候把外部請求調度過來是無法正常響應的,所以搞清楚就緒探針的狀態變化邏輯很重要;

  • 最后,也是最重要的一點:有的場景下,例如外部依賴服務異常、本地全局異常等情況下,業務不想對外提供服務,等到問題解決后業務又可以對外提供服務了,如果此時我們能自己寫代碼控制就緒探針的返回碼,那就做到了控制kubernetes是否將外部請求調度到此容器上,這可是個很實用的功能!

為了解決上述問題而作,這些問題解決后才能用好探針技術,讓它在容器環境帶來更大價值;

關鍵知識點

解決上述問題的關鍵集中在以下幾個知識點:

  1. SpringBoot對容器環境的判斷;

  2. SpringBoot對狀態定義;

  3. 獲取狀態;

  4. 監聽狀態;

  5. 修改狀態;

接下來挨個學習這些知識點;

SpringBoot對容器環境的判斷

  1. 官方文檔如下圖所示,SpringBoot判斷是否是kubernetes環境的邏輯很簡單:是否有<font color="blue">_SERVICE_HOST</font>和<font color="blue">_SERVICE_PORT</font>這兩個環境變量: 如何深入掌握SpringBoot-2.3的容器探針

  2. 熟悉kubernetes的讀者看到<font color="blue">_SERVICE_HOST"</font> 和<font color="blue">_SERVICE_PORT</font>,應該會想起<font color="red">KUBERNETES_SERVICE_HOST</font>和<font color="blue">KUBERNETES_SERVICE_PORT</font>,這是k8s給pod中配置的環境變量,看來SpringBoot也是針對k8s的這個規則來判定是否是容器環境的(如果將來k8s的某個版本不給pod設置這個環境變量,那些原本可以正常運行的pod豈不是有危險了?);

  3. 接下來通過實踐來驗證上述規則是否有效;

  4. 創建一個SpringBoot-2.3.0.RELEASE的應用,其pom.xml中的parent信息如下:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.0.RELEASE</version>
  <relativePath/>
</parent>
  1. 增加actuator依賴:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 啟動該應用,瀏覽器訪問:<font color="blue">http://localhost:8080/actuator/health/liveness</font>,返回404錯誤:

如何深入掌握SpringBoot-2.3的容器探針

  1. 以上返回是符合預期的,因為此時并非在kubernetes環境,接下來將"<font color="blue">_SERVICE_HOST</font> 和<font color="blue">_SERVICE_PORT</font>這兩個環境變量加入應用進程,看看是否有變化;

  2. 如下圖,編輯啟動類的配置信息:

如何深入掌握SpringBoot-2.3的容器探針

  1. 點擊下圖紅框位置,即可進入編輯環境變量的窗口:

如何深入掌握SpringBoot-2.3的容器探針

  1. 新的窗口中,操作如下圖紅框中所示,新增了兩個環境變量:

如何深入掌握SpringBoot-2.3的容器探針

  1. 再次運行程序,這次返回的狀態碼是200:

如何深入掌握SpringBoot-2.3的容器探針

  1. 至此,我們弄明白了SpringBoot是否開啟探針的邏輯,即應用是否運行在容器環境,而是否是容器環境的判定邏輯則是<font color="blue">_SERVICE_HOST</font>和<font color="blue">_SERVICE_PORT</font>這兩個環境變量是否存在;

非kubernetes環境開啟探針

<font color="blue">/actuator/health/liveness</font>和<font color="blue">/actuator/health/readiness</font>在kubernetes環境才會開啟,但是一般情況下,在開發階段SpringBoot應用可能運行在自己的電腦上,此時如果想查看這兩個接口的返回值有兩種方式:

第一種,就是前面提到的添加<font color="blue">_SERVICE_HOST</font>和<font color="blue">_SERVICE_PORT</font>這兩個環境變量,讓SpringBoot以為當前環境是kubernetes環境;

第二種,是按照官方指導添加屬性,如下圖紅框所示:

如何深入掌握SpringBoot-2.3的容器探針

SpringBoot對探針相關狀態定義

  1. 首先要弄清楚有哪些狀態,源碼是最準確的;

  2. 如下圖,存活探針一共有兩種狀態:<font color="blue">CORRECT</font>表示應用運行中并且內部狀態正常,<font color="blue">BROKEN</font>表示應用運行中并且內部是BROKEN狀態(請原諒我的英語水平)

如何深入掌握SpringBoot-2.3的容器探針

  1. 如下圖,就緒探針一共有兩種狀態:<font color="blue">ACCEPTING_TRAFFIC</font>表示應用可以對外提供服務,<font color="blue">REFUSING_TRAFFIC</font>表示應用無法對外提供服務;

如何深入掌握SpringBoot-2.3的容器探針

  1. 另外,上圖的since注解顯示這兩個枚舉是從<font color="red">2.3.0</font>版本開始生效的;

  2. 小小八卦一下,上述兩個枚舉的作者<font color="blue">Brian Clozel</font>,坐標法國里昂,目前在sringboot的提交次數排第8名:

如何深入掌握SpringBoot-2.3的容器探針

  1. 在SpringBoot啟動過程中,應用、存活探針、就緒探針三者狀態對應關系如下圖:

如何深入掌握SpringBoot-2.3的容器探針

  1. 在SpringBoot停止過程中,應用、存活探針、就緒探針三者狀態對應關系如下圖:

如何深入掌握SpringBoot-2.3的容器探針

獲取狀態

如果業務應用想獲取當前的存活和就緒狀態,將ApplicationAvailability接口autowire進來即可,下一篇《實戰篇》會有詳細的使用方式,這里看下關鍵代碼:

如何深入掌握SpringBoot-2.3的容器探針

監聽狀態

得益于Spring完整的事件發布和訂閱機制,業務應用通過EventListener注解就能監聽到存活和就緒狀態的變化,在EventListener注解修飾的方法中寫入必要的業務代碼即可實現狀態監聽,下一篇《實戰篇》會有詳細的使用方式,這里看下關鍵代碼:

如何深入掌握SpringBoot-2.3的容器探針

修改狀態

  1. 修改狀態,尤其是就緒狀態,這應該是我們最關注的功能了,在某些業務場景下,應用無法對外提供服務,這時候我們希望K8S不要將外部請求調度到這里,如果K8S通過就緒探針收到返回碼非200,就不再將請求調度到這個pod上;

  2. 下一篇《實戰篇》會有詳細的代碼介紹,這里給出關鍵代碼作為參考:

如何深入掌握SpringBoot-2.3的容器探針

請注意

重要的事情一定要強調:咱們修改狀態的最終目的,不是為了取得applicationAvailability.getReadinessState()返回新的枚舉對象,而是要<font color="red">改變/actuator/health/readiness接口的返回碼(就緒是200,未就緒是503)</font>,這是kubernetes的探針規則要用到的。

以上就是如何深入掌握SpringBoot-2.3的容器探針,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰来县| 宁陵县| 渝中区| 友谊县| 永胜县| 肃北| 麟游县| 舒城县| 沈丘县| 理塘县| 南江县| 炉霍县| 丰都县| 全南县| 伊金霍洛旗| 渝中区| 隆安县| 新沂市| 丰原市| 揭西县| 延寿县| 嘉禾县| 榆中县| 新乐市| 襄垣县| 无锡市| 阿拉善左旗| 漯河市| 临海市| 宝山区| 嘉峪关市| 榆树市| 灵石县| 吉隆县| 中山市| 阳新县| 运城市| 三原县| 井冈山市| 铁力市| 苍溪县|