Readiness Probe 和 HealthCheck 有什么好处?

What is benefit of readiness probe and healthCheck?

我正在开发一个应用程序,正如我所见,它正在执行多项健康检查?

  1. 数据库就绪探测
  2. 另一个 API 依赖准备探测

当我查看集群日志时,我意识到我的服务在数据库检查失败时仅抛出 500 并关闭。我在这里无法理解的是,如果 DB 已关闭或另一个 API 已关闭,并且如果我没有就绪探测器,那么我的容器无论如何都会关闭。另外,我会看到我的应用程序确实抛出了大约 500,因为数据库或其他服务已关闭。

无论如何,我的容器就绪探测有什么好处?我的另一个问题是,只有当我将服务部署到集群时,我才应该考虑 Healthcheck 吗?如果不是集群微服务环境,执行 healtheck 会 increase/decrease 好处吗?

在一些地方使用了就绪探测。一个重要的问题是未就绪的 pods 已从所有引用它们的服务中删除。它们对于 Deployments/StatefulSets 上的滚动更新也很重要,因为滚动不会继续,直到新的 pods 达到就绪状态。一般来说,用于就绪探测的检查应该只检查当前服务。所以它不应该接触到数据库。有时这很难实施,而且确实会降低它们的用处。但是检查每个 pod 的东西,比如 Web 服务器正在监听端口并且可以 return HTTP 响应。

Kubernetes 使用三种类型的探测器来检查 Pod:

的健康状况
  • Liveness:告诉Kubernetes容器内部出了问题,最好重启看看Kubernetes是否能解决错误。
  • Readiness:告诉 Kubernetes Pod 已准备好接收流量。有时发生的事情并没有完全使 Pod 丧失能力,但无法满足客户的要求。例如:失去与数据库的连接或第三方服务失败。在这种情况下,我们不希望 Kubernetes 重置 Pod,但我们也不希望它发送它无法满足的流量。当 Readiness 探测失败时,Kubernetes 从服务中删除 Pod 并停止与 Pod 的通信。解决错误后,Kubernetes 可以将其添加回来。
  • Startup:当 Pod 已启动并准备接收流量时通知 Kubernetes。这些探针对于需要一段时间才能开始的应用程序特别有用。 Pod 启动时,Kubernetes 不会发送 LivenessReadiness 探测。如果是这样,他们可能会干扰应用程序启动。 您可以获得有关探测器如何在此 link:
  • 上工作的更多信息

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