目录
1 概念
livenessProbe存活探针用来确定何时重启容器,readinessProbe就绪探针用来确定容器是否已经就绪可以接受流量。
2 应用场景
2.1 liveness
当pod容器进入不正常状态,需要我们将容器内的进程杀死,重启整个pod,使pod恢复至最初状态。可以通过 kubernets 的 livenessProbe配置,为pod内的容器指定一个区分是否需要重启容器的条件或范围,这个条件的瞬时值可以通过在容器内执行命令获取,然后在连续的有限次不满足这个条件时,liveness 探测失败,kubelet 自动将容器重启。
2.2 readiness
当pod容器处于就绪状态时,kubelet 才认为该pod可以作为service的 endpoint 接受流量(即:加入到 service 的 endpoint 列表里),如果不是就绪状态,kubelet 就会从service 的 endpoint 列表中剔除,从而保证外部请求不会被转发到该pod上。
3 探测方式
二者支持的探测方式相同
主要的探测方式有 3 种
exec执行命令探测 在容器内部执行命令
httpGet探测 访问容器的http服务,可以指定 http header
tcpSocket探测 访问容器的TCP端口
3.1 三种探测方式
- http探测
通过 kubectl 请求容器指定的url,且必须是GET请求。通过response的状态码,来判断是否探测成功,200 - 400(不含)之间时,也就是 2xx 或 3xx 都认为是探测成功。
- tcp探测
探测指定的端口,如果可以连接,就认为探测成功。类似于 telenet 命令
- exec指令命令探测
在容器内部执行命令,如果命令的退出码为0,认为探测成功
4 Prob详细参数
livenessProbe:
failureThreshold: 6 [探测成功后,最少连续探测失败多少次,才被认定为失败,默认值3]
httpGet: [探测方式 http]
host: xxx [不建议配置,链接的主机名,默认链接到pod的IP]
path: /actuator/health [请求的url]
port: 8080 [请求的端口]
scheme: HTTP [链接使用的scheme,默认值HTTP]
initialDelaySeconds: 360 [容器启动后第一次执行探测需要等待多长时间,单位秒]
periodSeconds: 20 [执行探测的频率,单位秒,即每隔多长时间执行一次探测]
successThreshold: 1 [探测失败后,最少连续探测成功多少次,才被认定为成功,默认值1]
timeoutSeconds: 3 [探测超时时间,单位秒,默认值1]
5 二者区别
liveness初始值为成功,防止还没有成功启动前,就被误杀。在规定时间内还未成功启动,将其设置为失败,从而触发容器重建。
readiness初始值为失败,防止还没有成功启动前就将流量导入。在规定时间内启动成功,将其设置为成功,从而将流量向应用导入。