美文网首页K8s
spring boot 应用在 k8s 中的健康检查(二)

spring boot 应用在 k8s 中的健康检查(二)

作者: 惜鸟 | 来源:发表于2021-06-19 17:51 被阅读0次

    一、概述

    在 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 这两个环境变量:

    image.png

    对于熟悉 k8s 的小伙伴应该会想起 KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT,这是 k8s 给 pod 中配置的环境变量,所以我们可以知道 SpringBoot 是针对 k8s 的这个规则来判定是否是容器环境的。通过下面的操作查看一下 pod 中的这两个环境变量:

    image.png

    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 错误:

    image.png

    以上返回是符合预期的,因为此时并非在kubernetes环境。/actuator/health/liveness/actuator/health/readiness 在 kubernetes 环境才会开启,但是一般情况下,在开发阶段 SpringBoot 应用运行在自己的电脑上,此时如果想查看这两个接口的返回值有两种方式:

    第一种,就是添加*_SERVICE_HOST*_SERVICE_PORT这两个环境变量,让 SpringBoot 以为当前环境是kubernetes环境;

    在 idea 中配置这两个环境变量如下图所示:

    image.png image.png image.png

    再次运行程序,这次返回的状态码是200:

    image.png

    第二种,官方给出的描述是:如果应用运行在 k8s 环境,这些健康检查自动启动,你可以配置management.endpoint.health.probes.enabled=true 在任何环境中启用他们。

    image.png

    在 application.properties 中添加如下配置:

    management.endpoint.health.probes.enabled=true
    

    再次运行程序,这次返回的状态码是200:

    image.png

    3、应用生命周期和探针状态

    Kubernetes Probes支持的一个重要方面是它与应用程序生命周期的一致性。在AvailabilityState(应用程序的内存内部状态)和暴露该状态的实际Probe之间有一个显著的区别:根据应用程序生命周期的阶段,Probe可能不可用。

    Spring Boot 在启动和关闭期间发布 Application Events,Probes 可以监听此类事件并暴露 AvailabilityState 信息。

    下表显示了AvailabilityState和HTTP连接器在不同阶段的状态。

    在 Spring Boot 启动过程中,应用、存活探针、就绪探针以及 http server状态对应关系如下图:

    image.png

    在 Spring Boot 关闭过程中,应用、存活探针、就绪探针以及 http server状态对应关系如下图:


    image.png

    参考文档

    官网 spring boot actuator k8s 配置

    官网 spring boot 运行 k8s 环境

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

    相关文章

      网友评论

        本文标题:spring boot 应用在 k8s 中的健康检查(二)

        本文链接:https://www.haomeiwen.com/subject/bxrdyltx.html