在Kubernetes(k8s)中,readinessProbe
和 livenessProbe
是用于监测容器健康状态的探针机制,作用如下:
- readinessProbe(就绪探针):用于判断容器是否准备好接收流量,即是否处于就绪状态。如果探测成功,Pod的Ready状态判定为True,Kubernetes会将该Pod加入到负载均衡器中,开始转发流量;如果探测失败,Pod的Ready状态判定为False,Kubernetes会将该Pod从服务的负载均衡池中移除,避免请求被发送到未就绪的容器实例。常用于应用启动后需要一定时间进行初始化的场景,如加载配置文件、连接数据库等。配置参数有
initialDelaySeconds
(初始化容器多少秒后开始第一次探测)、timeoutSeconds
(探测超时时间,默认1秒)、periodSeconds
(探测周期,默认10秒)、failureThreshold
(连续失败几次判定为不就绪,默认3次)、successThreshold
(连续成功几次判定为就绪,默认1次)。 - livenessProbe(存活探针):用于判断容器是否存活,即是否处于Running状态。如果探测成功,Pod状态判定为Running;如果探测失败,Kubernetes会根据Pod的重启策略来重启容器。适用于检测应用是否出现死锁、内存泄漏等异常情况,确保应用在出现故障时能够自动恢复。探测方式有
httpGet
(向容器发送HTTP Get请求,状态码2xx或3xx为成功)、tcpSocket
(尝试与容器指定端口建立TCP连接,连接成功即健康)、exec
(在容器内执行命令,退出状态码为0表示成功)
在Kubernetes(k8s)中,readinessProbe
和 livenessProbe
探测在容器生命周期中的前后顺序及相关情况如下:
- 启动阶段:
- 容器启动后,会先执行
startupProbe
(启动探针,若有配置),用于检测应用是否启动成功。startupProbe
成功后,livenessProbe
和readinessProbe
才会开始工作[1,3,7]。 - 若没有
startupProbe
,livenessProbe
和readinessProbe
会按各自配置的initialDelaySeconds
(初始延迟时间)开始探测。例如配置initialDelaySeconds: 5
,则容器启动5秒后开始第一次探测。
- 容器启动后,会先执行
- 运行阶段:
livenessProbe
定期探测容器是否存活,若探测失败,Kubernetes会根据Pod的重启策略重启容器。比如配置periodSeconds: 5
,则每隔5秒执行一次探测。readinessProbe
也定期探测容器是否就绪,探测成功,Pod的Ready状态为True,可接收流量;探测失败,Pod的Ready状态为False,Kubernetes会将Pod从服务的负载均衡池中移除,不再转发流量。如配置periodSeconds: 10
,则每隔10秒执行一次探测。
- 探测方法:两种探针都支持
exec
(执行命令,返回值为0表示成功)、httpGet
(发送HTTP请求,状态码2xx或3xx表示成功)、tcpSocket
(建立TCP连接成功表示健康)三种探测方法,且配置方法相同。 - 同时使用情况:
readinessProbe
和livenessProbe
可并行用于同一容器,确保流量不到达未就绪容器,且在容器失败时重启容器