一句话讲清 K8S ReadinessProbe、LivenessProbe和StartupProbe 探针

我是 LEE,老李,一个在 IT 行业摸爬滚打 16 年的技术老兵。

事件背景

之前写过一片关于 k8s 3 种探针的文章,收到很多小伙伴的反馈,说太繁琐了。学习曲线太过于陡峭,希望有一篇能快速入门的文章。

技术探索

一句话说清概念

  • 存活性探测 (Liveness probes): 主要是探测应用是否还活着。如果检测到应用没有存活就杀掉当前 pod 并重启;
  • 就绪性探测 (Readiness probes): 只要是探测应用是否准备好接受请求访问,如果检测应用准备好了,就把请求流量放进来;反之,则把应用节点从注册中心拿掉。
  • 启动探测 (Startup Probes): 对于旧应用需要更长的启动时间,这时候既不想重启应用也不想让请求访问进来,可以设置启动探测给足够的启动时间保证应用启动成功

动画展示

ReadinessProbe

Readiness Probe 的设计目的是让 Kubernetes 明确知道 Pod 何时已经完全正版就绪。在向 POD 发送请求通信之前,首先进行 Readiness Probe 测试。如果测试没有通过,Kubernetes 停止向其发送通信请求,直到测试通过。

ReadinessProbe

LivenessProbe

Liveness Probe 是为了让 k8s 知道 Pod 是否存活(而不一定可用)。如果 POD 死掉,则 k8s 会将其 Remove 并启动一个新的 POD 取而代之。

LivenessProbe

麻烦的启动时间线

可以自定义在 pod 启动时是否执行这些检测,如果不设置,则检测结果均默认为通过;如果设置,则顺序为: startupProbe --> readinessProbe --> livenessProbe

(★) 但是真的是上面的顺序嘛? 官方文档上却说不是,其中有一段说到。

Caution: Liveness probes do not wait for readiness probes to succeed. If you want to wait before executing a liveness probe you should use initialDelaySeconds or a startupProbe.

翻译:livenessProbe 不会等待 readinessProbe 成功。如果你想在执行 livenessProbe 之前等待,你应该使用 initialDelaySeconds 或 startupProbe。

好了,真正的顺序是:startupProbe --> readinessProbe(livenessProbe)

(★) readinessProbe 和 livenessProbe 之间是异步并发的

参考文档

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容