一、概述
在 spring boot 2.3 中引入了容器探针,也就是减少了 /actuator/health/liveness
和 /actuator/health/readiness
这两个健康检查门路,对于部署在 k8s 中的利用,spring-boot-actuator 将通过这两个门路主动进行健康检查。本文次要依据官网文档的形容实际并记录应用流程,从如下几个方面进行介绍:
- k8s 中的健康检查
- spring-boot-actuator 中的 k8s 探针
- spring boot 健康检查在 k8s 中的实际
二、spring-boot-actuator 中的 k8s 探针
1、spring boot 对 k8s 环境的判断
官网文档如下图所示,SpringBoot 判断是否是 kubernetes 环境的逻辑很简略,查看是否有 *_SERVICE_HOST
和*_SERVICE_PORT
这两个环境变量:
对于相熟 k8s 的小伙伴应该会想起 KUBERNETES_SERVICE_HOST
和 KUBERNETES_SERVICE_PORT
,这是 k8s 给 pod 中配置的环境变量,所以咱们能够晓得 SpringBoot
是针对 k8s 的这个规定来断定是否是容器环境的。通过上面的操作查看一下 pod 中的这两个环境变量:
2、验证上述规定
创立一个 spring boot 利用,其中 pom.xml 的 parent 信息如下(我这里应用的 2.4.5,须要 >= 2.3.x 版本):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
并且增加 spring-boot-starter-actuator
的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
间接启动利用,应用浏览器拜访:http://localhost:8080/actuator/health/readiness , 返回 404 谬误:
以上返回是合乎预期的,因为此时并非在 kubernetes 环境。/actuator/health/liveness
和 /actuator/health/readiness
在 kubernetes 环境才会开启,然而个别状况下,在开发阶段 SpringBoot 利用运行在本人的电脑上,此时如果想查看这两个接口的返回值有两种形式:
第一种,就是增加 *_SERVICE_HOST
和*_SERVICE_PORT
这两个环境变量,让 SpringBoot 认为以后环境是 kubernetes 环境;
在 idea 中配置这两个环境变量如下图所示:
再次运行程序,这次返回的状态码是 200:
第二种,官网给出的形容是:如果利用运行在 k8s 环境,这些健康检查主动启动,你能够配置management.endpoint.health.probes.enabled=true
在任何环境中启用他们。
在 application.properties 中增加如下配置:
management.endpoint.health.probes.enabled=true
再次运行程序,这次返回的状态码是 200:
3、利用生命周期和探针状态
Kubernetes Probes 反对的一个重要方面是它与应用程序生命周期的一致性。在 AvailabilityState(应用程序的内存外部状态)和裸露该状态的理论 Probe 之间有一个显著的区别: 依据应用程序生命周期的阶段,Probe 可能不可用。
Spring Boot 在启动和敞开期间公布 Application Events,Probes 能够监听此类事件并裸露 AvailabilityState 信息。
下表显示了 AvailabilityState 和 HTTP 连接器在不同阶段的状态。
在 Spring Boot 启动过程中,利用、存活探针、就绪探针以及 http server 状态对应关系如下图:
在 Spring Boot 敞开过程中,利用、存活探针、就绪探针以及 http server 状态对应关系如下图:
参考文档
官网 spring boot actuator k8s 配置
官网 spring boot 运行 k8s 环境
官网 利用生命周期和探针状态