为什么我在kubernetes中需要3种不同类型的探针:startupProbe、readinessProbe、livenessProbe
为什么我在 kubernetes 中需要 3 种不同类型的探针:
- 启动探针
- 就绪探针
- 活性探针
有一些问题(k8s - livenessProbe 与 readinessProbe,设置就绪、活跃或启动探测器)和关于这个主题的文章。但这不是很清楚:
- 为什么我需要 3 种不同类型的探头?
- 有哪些用例?
- 什么是最佳做法?
回答
这 3 种探针有 3 种不同的用例。这就是为什么我们需要 3 种探针。
活性探针
如果Liveness Probe失败,pod 将重新启动(阅读有关 failureThreshold 的更多信息)。
用例:如果 pod 已死,则重新启动 pod。
最佳实践:仅在活性探测中包含基本检查。永远不要检查与其他服务(例如数据库)的连接。检查不应花费太长时间才能完成。如果 pod真的死了,请始终指定一个light Liveness Probe以确保 pod 将重新启动。
启动探针
Startup Probes检查 pod 在启动后何时可用。
用例:一旦 Pod 在启动后可用,就将流量发送到 Pod。启动探测器可能需要更长的时间才能完成,因为它们仅在初始化时调用。他们可能会调用预热任务(但也可以考虑使用 init 容器进行初始化)。
最佳实践:如果 pod 需要很长时间才能启动,请指定Startup Probe。Startup 和 Liveness Probe 可以使用相同的端点,但Startup Probe 的故障阈值将不那么严格,以防止启动失败(s. Kubernetes in Action)。
准备探针
与Startup Probes Readiness Probes检查相比,Pod 在整个生命周期中是否可用。与Liveness Probes相比,只有到 pod 的流量才会停止,如果Readiness 探针失败,但不会重启。
用例:停止向 Pod 发送流量,如果 Pod 由于与另一个服务(例如数据库)的连接失败而暂时无法提供服务,并且 Pod 将在稍后恢复。
最佳实践:包括所有必要的检查,包括与其他服务的连接。尽管如此,检查不应花费太长时间才能完成。如果 Pod 可以正确处理传入的请求,请始终指定Readiness Probe以确保 Pod 仅获取流量。
文档
- 这篇文章很好地解释了三种探针之间的区别。
- 该官方kubernetes文档提供了有关所有配置选项很好的概述。
- 探针的最佳实践。
- Kubernetes in Action一书提供了有关最佳实践的最详细见解。