我在多个 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。