您的位置:首页 > 编程语言 > Java开发

Spring Boot与K8S的结合| 云原生应用开发系列7

2020-12-21 21:28 507 查看 https://blog.51cto.com/1506193

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服务器。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: