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服务器。
- 2.android 原生应用和React native 结合开发.环境搭建
- ios 原生应用和React native 结合开发1.环境搭建
- 源码分析:通过Spring Boot构建一个购物车微服务 | 云原生应用开发系列6
- AgileEAS.NET应用开发平台-系列目录
- SAP企业移动平台开发探索系列4 – 使用SUP开发iOS离线应用
- SAP企业移动平台开发探索系列9 – 使用SenchaTouch第三方UI开发HWC应用
- ASP.NET开发实践系列课程之Web应用的安全攻防之垃圾信息群发(SPAM)
- SharePoint 2010应用开发系列
- iOS开发系列--让你的应用“动”起来
- 云原生(CloudNative)将成为应用云化开发的主流方式
- Android 原生应用嵌入React-Native模块开发-环境配置及填坑记
- AgileEAS.NET应用开发平台详细使用教程-系列索引
- 循序渐进学.Net Core Web Api开发系列【16】:应用安全续-加密与解密
- Java AJAX开发系列 - 4,ZK应用实例
- 【多端应用开发系列1.1.1 —— Android:使用新浪API V2】服务器Json数据处理——Json数据概述
- Kinect开发之结合Unity3D进行游戏应用开发
- react-native + as <react-native嵌入原生应用开发>
- HBase应用开发回顾与总结系列之一:概述HBase设计规范
- iPad app应用开发系列文章之三 -- iOS的多核编程和内存管理
- HBase应用开发回顾与总结系列之二:RowKey行键设计规范