K8s的LivenessProbe 和ReadinessProbe的启动顺序问题

突然想到这个问题,幸好K8s的issue上有相关问题:

issue 27114

  • LivenessProbe should start after ReadinessProbe Succeeded if ReadinessProbe is specified

  • 这个比较长,翻译下原作者提出的问题,重点是:LivenessProbe会导致pod重启,ReadinessProbe只是不提供服务,这个是我之前没注意的

    我们最初的理解是LivenessProbe会在ReadinessProbe成功后开始检查,但事实并非如此。

    我们正在测试具有较长启动时间的系统,启动时间大约在 1-3 分钟之间。

    我们将ReadinessProbe指定为与 LivenessProbe相同的 url,并将 LivenessProbe的初始延迟指定为 30 秒,我们发现 pod 因 LivenessProbe失败而被kill,而ReadinessProbe仍然失败。

    那么,为什么我们不指定LivenessProbe的初始延迟超过 3 分钟呢?即ReadinessProbe在第一分钟成功,但是LivenessProbe没有成功,pod任然无法运行。
    所以,它会影响正在运行的服务。

    为什么我们不只用ReadinessProbe而放弃LivenessProbe?
    当ReadinessProbe再次失败时,它也可能会停止服务,因此不会对正在运行的服务造成任何影响,问题是:Pod不会重新启动,我们必须手动重新启动它们。

  • 这个issue使得官方添加了一个startupProbe

    kubelet 使用存活探测器来知道什么时候要重启容器。 例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面的步骤)。 这样的情况下重启容器有助于让应用程序在有问题的情况下更可用。
    kubelet 使用就绪探测器可以知道容器什么时候准备好了并可以开始接受请求流量, 当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 在 Pod 还没有准备好的时候,会从 Service 的负载均衡器中被剔除的。
    kubelet 使用启动探测器(startupProbe)可以知道应用程序容器什么时候启动了。 如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探测器不会影响应用程序的启动。 这可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。
    

真正的启动顺序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值