一,探针介绍
1 探针类型
livenessProbe:存活探针,用于判断容器是不是健康;如果探测失败,Kubernetes就会重启容器。
readinessProbe:就绪探针,用于判断是否可以将容器加入到Service负载均衡池中,对外提供服务。
startupProbe:启动探针,判断容器内的应用程序是否已启动。
区别:如果提供了启动探测,其他两个探针将会被暂时禁用,直到满足配置,启动探针满足一次探测后,后续不再进行探测。
使用场景:启动探针使用避免容器重启陷入死循环

上图中的配置如果容器启动时间超过20s,就会启动重启策略。如果调高失败次数,服务挂了以后不能及时重启服务。
2 配置参数
| initialDelaySeconds | 探针初始等待时间,默认是 0 秒 |
| periodSeconds | 探测的时间间隔。默认是 10 秒。 |
| timeoutSeconds | 探测的超时时间。默认值是 1 秒。 |
| successThreshold | 探测的成功数。默认值是 1。 |
| failureThreshold | 探测的失败数。默认值是3。 |
3 探针方式
| httpGet | 请求接口,类似于curl -I HTTP://podIP:8080/health/liveness接口,返回数值在>=200且<=400代表成功 |
| tcpSocket | 连接容器的 80 端口,类似于telnet 80端口 |
| exec | 执行 shell 命令 |
tcpSocket方式:

httpGet方式:

exec方式:

二,spring-boot-starter-actuator
1 K8s探针和spring-boot-starter-actuator联系

2 使用配置
引入依赖:

开启配置:

3 应用测试
存活探针接口:

就绪探针接口:

4 原理分析
健康指标:

org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration

org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator#doDataSourceHealthCheck


org.springframework.boot.actuate.redis.RedisHealthIndicator


5 自定义健康指标
实现healthIndicator接口:

状态映射:

参考来源:Spring Boot Actuator: Production-ready Features
https://spring.io/blog/2020/03/25/liveness-and-readiness-probes-with-spring-boot