当 Pod 的就绪健康检查失败时会发生什么?

当 Pod 的就绪健康检查失败时会发生什么?

我正在追踪我们集群中一个未知的超时问题,发现了一些有趣的事情。

我们目前有 30 个 Pod 用于一项服务。当我运行时,kubectl get event这 30 个 Pod 一直处于就绪状态失败。它们所有的“LASTSEEN”都少于 10 分钟,并且一直在失败。

但我仍然可以毫无问题地访问该服务。

我认为 Kube 会删除那些未能就绪的 Pod,使其无法被访问。

为什么我仍然可以访问该服务?我仔细检查了一下,发现每个服务每隔 10 分钟左右仍然会失败一次。

答案1

首先回答标题中的主要问题。

引用官方的话文档关于就绪探测概念

带有容器的 Pod 报告其尚未准备好,不会通过 Kubernetes 服务接收流量。

或之后博客文章,很好地解释了活性探测和就绪探测之间的主要区别

当就绪探测失败时,Kubernetes 将不会向 pod 发送流量,直到探测成功为止。

现在谈谈您仍然可以访问服务的原因。我假设您有一些 Deployment 对象,它控制着应用程序实例的生命周期。请注意,在更新部署时,它还会让旧副本继续运行,直到新副本上的探测成功。这意味着,如果您的新 pod 以某种方式损坏,它们将永远不会看到流量,您的旧 pod 将继续为部署提供所有流量。

相关内容