Spring Boot與K8S的結合| 雲原生應用開發系列7

1.參數注入

在OpenShift上配置應用程序的推薦方法是使用ConfigMaps。使用ConfigMap可確保配置與應用程序映像分離,並使應用程序映像保持可移植性。使用ConfigMap,配置數據在運行時注入容器。


Spring Boot沒有直接支持ConfigMaps。

另一種方法是使用Spring Cloud Kubernetes項目,該項目提供與Kubernetes和OpenShift的Spring Cloud集成。 Spring Cloud Kubernetes項目由Red Hat Fabric8團隊啓動,現已轉移到Spring Cloud Incubator保護傘下。

https://github.com/spring-cloud-incubator/spring-cloud-kubernetes


Spring Cloud Kubernetes項目通過提供ConfigMapPropertySource爲Kubernetes和OpenShift ConfigMaps提供支持。 ConfigMapPropertySource搜索Kubernetes ConfigMap。 ConfigMap的名稱是Spring應用程序的名稱,由spring.application.name屬性定義。 如果找到這樣的ConfigMap,則通過處理各個配置屬性來處理它。通過將名爲application.properties的任何屬性的內容應用爲屬性文件來處理這些單獨的屬性。


2.使用Spring Cloud Kubernetes

要使用Spring Cloud Kubernetes,您需要在此處顯示Maven依賴項。 groupId是org.springframework.cloud。 artifactId`是`spring-cloud-starter-kubernetes-config。

圖片


要使用Spring Cloud Kubernetes,您需要一個必需的屬性文件。您的application.properties文件必須包含應用程序名稱的條目,如此處所示。 然後使用spring.application.name屬性(本例中爲cart-service)定義的相同條目創建ConfigMap。 oc create命令用於創建ConfigMap。



部署應用程序時,瞭解它是否可用以及是否可以開始處理傳入請求非常重要。通過實施運行狀況檢查模式,您可以監視應用程序的運行狀況,從而檢查應用程序是否可用並且能夠爲請求提供服務。


3.健康檢查

有關健康服務檢查有五個關鍵概念:

  • Liveness

  • Readiness

  • Failover

  • Resilience and stability

  • Probe



Liveness定義應用程序是否正在運行。有時正在運行的應用程序會進入無響應或停止狀態,必須重新啓動。檢查活動有助於確定是否需要重新啓動應用程序。 Readiness情況定義正在運行的應用程序是否可以服務請有時,正在運行的應用程序會進入錯誤或損壞的狀態,在該狀態下它無法再處理請求。檢查準備情況有助於確定是否可以繼續將請求路由到該應用程序。


故障轉移可以正常處理服務請求中的失敗。如果應用程序無法爲請求提供服務,則該請求和將來的請求可以進行故障轉移,這意味着它們將路由到另一個應用程序。這通常是同一應用程序的冗餘副本。 彈性和穩定性使服務請求失敗得以優雅地處理。如果應用程序由於連接丟失而無法爲請求提供服務,則在彈性系統中,可以在重新建立連接後重試該請求。 探針是Kubernetes操作,可定期對正在運行的容器執行診斷。





您的應用程序可以公開REST端點以報告準備情況和活躍度。 爲了準備就緒,請公開/ health / readyiness REST端點。如果應用程序已準備好處理請求,請讓它返回HTTP狀態代碼200.如果不是,請讓它返回HTTP狀態代碼503(如果可能)。 爲了活躍,暴露/ health / liveness REST端點。如果應用程序處於活動狀態,請讓它返回HTTP狀態代碼200.如果不是,請讓它返回HTTP狀態代碼503(如果可能)。



spring Boot公開用於管理和監視的HTTP和Java Management Extensions或JMX端點。

彈簧啓動 - 啓動器 - 執行器啓動器啓用此功能。 執行器需要Spring MVC。 以下是一些Actuator端點: autoconfig顯示一個自動配置報告,顯示所有自動配置候選項以及它們應用或未應用的原因。 beans顯示應用程序中所有Spring bean的完整列表。 健康顯示應用健康信息。 指標顯示當前應用程序的“指標”信息。 當Jolokia在類路徑上時,jolokia通過HTTP公開JMX bean。


從所有HealthIndicator bean收集健康狀況。 Spring Boot包含許多自動配置的HealthIndicator。 默認情況下,僅返回運行狀況。完整細節需要驗證。 您可以爲運行狀況和信息端點添加自定義HealthIndicators或InfoContributors。 Actuator端點是完全可配置的,包括服務器地址,路徑,端口,SSL和安全性。




Spring Boot應用程序通常打包爲可執行JAR或WAR歸檔。 Spring Boot Maven插件的重新打包目標將在Maven的打包階段構建的JAR存檔重寫爲可執行的JAR。這裏顯示了一個例子。 Spring Boot可執行的自包含JAR文件與着色的uber-JAR不同。 還有可用於可部署WAR的替代包裝。

圖片

Spring Boot JAR內部結構支持嵌套JAR。這裏顯示了一個例子。

圖片


使用java命令啓動Spring Boot應用程序,如下所示。 您可以指定帶有雙連字符的環境屬性命令行參數。 您可以使用Spring Boot Maven插件編譯和運行應用程序。


使用java命令啓動Spring Boot應用程序:

$ java -jar my-app-1.0.0.jar


環境屬性命令行參數前綴爲 - :

$ java -jar my-app-1.0.0.jar --server.port = 9000


使用Spring Boot Maven插件編譯並運行應用程序:

$ mvn spring-boot:run




Fabric8 Maven插件是爲Docker,Kubernetes和OpenShift構建和部署Java應用程序的一站式商店。它將您的Java應用程序帶到Kubernetes和OpenShift。它提供了與Maven的緊密集成,並從已提供的構建配置中獲益。它側重於三個任務:

  • 構建Docker鏡像 

  • 創建OpenShift和Kubernetes資源 

  • 在Kubernetes和OpenShift上部署應用程序


Fabric8 Maven插件支持以下目標:

  • fabric8:resource創建Kubernetes和OpenShift資源描述符。

  • fabric8:build構建Docker鏡像。

  • fabric8:push將Docker鏡像推送到註冊表。

  • fabric8:deploy將OpenShift資源對象部署到集羣。


fabric8:觀察重建和重啓的情況。

Fabric8 Maven插件支持Kubernetes和OpenShift描述符。 它還支持使用二進制源的OpenShift Docker構建。 該插件還提供靈活的自定義。 Generators分析Maven構建併爲某些系統生成自動Docker鏡像配置,包括spring-boot,plain Java和Apace Karaf。 Enchers使用SCM標籤等額外信息擴展Kubernetes和OpenShift資源描述符,並可以添加服務等默認對象。可以單獨配置發生器和濃縮器並將其組合到配置文件中。



Fabric8 Maven插件還支持各種配置樣式:

  • 零配置:用於快速提升預先確定默認值的默認值。

  • 內聯配置:在XML語法的插件配置中。

  • 外部配置:插件豐富的實際部署描述符的模板。


Docker Compose配置:提供Docker組合文件,並在Kubernetes / OpenShift集羣上啓動Docker組合部署。

資源描述符可以作爲指定骨架的外部YAML文件提供。然後,這個骨架由濃縮物填充,這些濃縮物可以添加標籤等。這些文件中的Maven屬性將解析爲其值。使用此模型,您可以使用每個Kubernetes或OpenShift資源對象的所有靈活性,但仍然可以獲得添加構建信息的好處。


默認情況下,Fabric8插件從src / main / fabric8目錄中讀取資源片段。


圖片


fabric8:deploy是構建Docker鏡像的主要目標。

  • 此目標旨在在部署之前運行fabric8:build和fabric8:資源。 

  • 它生成OpenShift資源並將它們部署到OpenShift服務器。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章