关于springboot:spring-boot-应用在-k8s-中的健康检查二

4次阅读

共计 1886 个字符,预计需要花费 5 分钟才能阅读完成。

一、概述

在 spring boot 2.3 中引入了容器探针,也就是减少了 /actuator/health/liveness/actuator/health/readiness 这两个健康检查门路,对于部署在 k8s 中的利用,spring-boot-actuator 将通过这两个门路主动进行健康检查。本文次要依据官网文档的形容实际并记录应用流程,从如下几个方面进行介绍:

  1. k8s 中的健康检查
  2. spring-boot-actuator 中的 k8s 探针
  3. spring boot 健康检查在 k8s 中的实际

二、spring-boot-actuator 中的 k8s 探针

1、spring boot 对 k8s 环境的判断

官网文档如下图所示,SpringBoot 判断是否是 kubernetes 环境的逻辑很简略,查看是否有 *_SERVICE_HOST*_SERVICE_PORT 这两个环境变量:

对于相熟 k8s 的小伙伴应该会想起 KUBERNETES_SERVICE_HOSTKUBERNETES_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 环境

官网 利用生命周期和探针状态

正文完
 0