一,探针介绍
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