【问题标题】:Why do I need 3 different kind of probes in kubernetes: startupProbe, readinessProbe, livenessProbe为什么我在 Kubernetes 中需要 3 种不同类型的探针:startupProbe、readinessProbe、livenessProbe
【发布时间】:2021-04-27 16:43:04
【问题描述】:

为什么我在 Kubernetes 中需要 3 种不同类型的探针:

  • 启动探针
  • readinessProbe
  • livenessProbe

有一些关于这个主题的问题(k8s - livenessProbe vs readinessProbeSetting up a readiness, liveness or startup probe)和文章。但这不是很清楚:

  • 为什么需要 3 种不同类型的探头?
  • 有哪些用例?
  • 最好的做法是什么?

【问题讨论】:

标签: kubernetes


【解决方案1】:

这 3 种探针有 3 个不同的用例。这就是为什么我们需要 3 种探针。

活性探针

如果 Liveness Probe 失败,则 pod 将重新启动(阅读有关 failureThreshold 的更多信息)。

用例:如果 pod 已死,则重新启动 pod。

最佳做法:仅在活性探测中包含基本检查。永远不要检查与其他服务(例如数据库)的连接。检查不应该花费太长时间来完成。 始终指定 light Liveness Probe 以确保在 pod 真的死机时重新启动 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 相比,如果 Readiness Probes 失败,只会停止到 pod 的流量,但不会重新启动。

用例:停止向 pod 发送流量,如果 pod 由于与另一个服务(例如数据库)的连接失败而暂时无法服务,并且 pod 稍后会恢复。

最佳做法:包括所有必要的检查,包括与其他服务的连接。然而,检查不应该花费太长时间来完成。 始终指定 Readiness Probe 以确保 pod 仅获得流量,前提是 pod 可以正确处理传入请求。

文档

【讨论】:

    【解决方案2】:

    livenessProbe、readinessProbe、startupProbe的区别

    livenessProbe

     livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 3
          periodSeconds: 3
    
    • 用于指示容器是否已启动且是否处于活动状态,即可用的证明。
    • 在给定的示例中,如果请求失败,它将重新启动容器。
    • 如果未提供,则默认状态为成功。

    readinessProbe

     readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 3
          periodSeconds: 3
    
    • 它用于指示容器是否已准备好为流量提供服务,即准备好使用的证明。
    • 它会检查依赖项,例如数据库连接或您的容器为完成其工​​作所依赖的其他服务。
    • 在给定的示例中,在请求返回 Success 之前,它不会提供任何流量(通过从与 Pod 匹配的所有服务的端点中删除 Pod 的 IP 地址)。
    • Kubernetes 在滚动更新期间依赖就绪探测,它使旧容器保持正常运行,直到新服务声明它已准备好接收流量。
    • 如果未提供,则默认状态为成功。

    startupProbe

     startupProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 3
          periodSeconds: 3
    
    • 用于指示Container内的应用程序是否已启动。
    • 如果提供了启动探测,则所有其他探测都将被禁用。
    • 在给定的示例中,如果请求失败,它将重新启动容器。
    • 一旦启动探测成功一次,活动探测就会接管以对容器死锁提供快速响应。
    • 如果未提供,则默认状态为成功。

    查看K8S documenation了解更多信息。

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 2019-08-20
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多