K8S SpringBoot 探针配置

152 阅读4分钟

K8S 探针配置

kubernetes提供了三种探针(支持exec、tcp和http方式)来探测容器的状态

1. LivenessProbe

容器存活性检查,用于判断容器是否健康,告诉 kubelet 一个容器什么时候处于不健康的状态。如果 LivenessProbe 探针探测到容器不健康,则 kubelet 将删除该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含 LivenessProbe 探针,那么 kubelet 认为该容器的 LivenessProbe 探针返回的值永远是 Success;

2. ReadinessProbe

容器就绪性检查,用于判断容器是否启动完成且准备接收请求。如果ReadinessProbe探针探测到失败,Endpoint Controller 将从 Service 的 Endpoint 中删除包含该容器所在 Pod 的 IP 地址的Endpoint条目。如果容器不提供就绪态探针,则默认状态为 Success。

3. StartupProbe

容器启动检查,指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器,而容器依其重启策略进行重启。 如果容器没有提供启动探测,则默认状态为 Success。

4. 三种探针共有配置

Probe有如下配置字段,可以使用这些字段精确的控制存活和就绪检测的行为:

  1. initialDelaySeconds:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。

  2. periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。

  3. timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。

  4. successThreshold:探测器在失败后,被视为成功的最小连续成功数。默认值是 1。 存活和启动探测的这个值必须是 1。最小值是 1。

  5. failureThreshold:当探测失败时,Kubernetes 的重试次数。 存活探测情况下的放弃就意味着重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。

SpringBoot集成

1. 引入依赖

implementation("org.springframework.boot:spring-boot-starter-actuator")

从 Spring Boot 2.3 开始,LivenessStateHealthIndicator 和 ReadinessStateHealthIndicator 类将公开应用程序的活跃度和就绪状态。 当将应用程序部署到 Kubernetes 时,Spring Boot 会自动注册这些健康指标,即默认在K8S环境下,livenessreadiness探针会自动注册,当然也可以显示开启。

显示开启livenessreadiness探针

management:
  endpoint:
    health:
      probes:
        enabled: true
  health:
    livenessstate:
      enabled: true
    readinessstate:
      enabled: true

2. 探针配置

Spring Boot Actuator 提供了 Endpoints(端点)给外部来与应用程序进行访问和交互。

例如 /health 端点提供了关于应用健康情况的一些基础信息。/metrics 端点提供了一些有用的应用程序指标(JVM 内存使用、系统 CPU 使用等)。

一般来说,端点可以分为几类:

  • 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与 Spring Boot 应用密切相关的配置类信息。
  • 度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP 请求统计等。
  • 操作控制类:提供了对应用的关闭等操作类功能。

如上述配置,开启了helath端点。

management:
  endpoints:
    web:
      exposure:
        include: health

helath端点配置

/health 端点会聚合你程序的健康指标,来检查程序的健康情况。端点公开的应用健康信息取决于参数 management.endpoint.health.show-details,该属性值可选项为:

属性值描述
never不展示详细信息,up 或者 down 的状态,默认配置
when-authorized详细信息将会展示给通过认证的用户,授权的用户可以通过management.endpoint.health.roles配置
alawys对所有用户暴露详细信息

由于我们配置在K8S内部,且服务不对外暴露,这里配置成always就可。

management:
  endpoints:
    web:
      exposure:
        include: health
  endpoint:
    health:
      probes:
        enabled: true
      show-details: always

访问 IP + PORT + /acacutor/health 就可以看到详细信息了。

组件健康监测

如上如,我们访问IP + PORT + /acacutor/health看到的是所有组件的健康状态,也可以通过配置禁用某个组件的健康监测

## 禁用Redis健康监测
management:
  health:
    redis:
      enabled: false

## 禁用所有自动配置的健康监测
management:
  health:
    defaults:
      enabled: false

常见指示器

自定义健康监测

实现HealthIndicator接口或者继承AbstractHelathIndicator

参考文档

  1. blog.csdn.net/qq_25112523…
  2. blog.csdn.net/youanyyou/a…
  3. docs.spring.io/spring-boot…
  4. blog.csdn.net/u013360850/…
  5. blog.csdn.net/yb2020/arti…
  6. www.cnblogs.com/chanshuyi/p…