如何让 Kubernetes 驱逐一段时间没有准备好的 pod?



我在多个 Pod(部署托管副本集的成员(上配置了就绪探测。它们按预期工作 - 作为部署推出策略的一部分,需要做好准备,如果正常运行的容器变为 NotReady,则关联的服务会将其从终结点池中删除,直到它再次变为就绪。

此外,我有外部运行状况检查(使用 Sensu(,当 Pod 变为 NotReady 时会提醒我。

有时,Pod 会在较长时间内报告 NotReady,并且没有恢复的迹象。我想配置这样的事情,如果一个 pod 在 NotReady 中停留了很长时间,它就会从节点中逐出并在其他地方重新调度。我将满足于一种简单地杀死容器的机制(导致它在同一个 pod 中重新启动(,但我真正想要的是将 pod 逐出并重新调度。

我似乎找不到任何可以做到这一点的东西。它存在吗?我的大部分搜索都发现了有关从 NotReady节点中驱逐 pod 的内容,这根本不是我想要的。

如果这不存在,为什么?我应该使用其他机制来完成等效的事情吗?

编辑:我应该指定我还配置了活体探针并按照我想要的方式工作。在我所说的场景中,豆荚是"活着的"。我的活动探测器配置为检测更严重的故障并相应地重新启动,并且正在按预期工作。

我真的在寻找基于处于活动状态但长时间未准备好的 pod 进行驱逐的能力。

我想我真正想要的是能够配置任意数量的探测器,每个探测器都有它检查的不同期望,并且每个探测器都有在达到某个故障阈值时将采取的不同操作。就像现在一样,活动失败只有一种方法(重新启动容器(,准备失败也只有一种方法(等待(。我希望能够配置任何操作。

从 Kubernetes v1.15 开始,您可能希望结合使用就绪性探测和活动性探测来实现所需的结果。请参阅配置活动和就绪探测。

在v1.16 中可能会引入在 Pod 准备就绪后启动活动探测的新功能。将会有一个名为startupProbe的新探针,它可以以更直观的方式处理这个问题。

可以使用 periodSeconds 配置 HTTP 活动性探测或 TCP 活动性探测,具体取决于容器映像的类型。

livenessProbe:
.....
initialDelaySeconds: 3
periodSeconds: 5  [ This field specifies that kubelet should perform liveness probe every 3 seconds. ]

您可以尝试为此目的使用Prometheus指标并创建如下所示的警报。基于此,您可以在警报管理器中配置一个 webhook,它将做出正确的反应(操作:杀死 pod(,然后调度程序将重新创建 Pod。

最新更新