假设我们有一个带有两个区域的Kubernetes集群,每个区域都有两个节点(工作人员,区域0中的N00和N01,区域1中的N10和N11)。我们想要一个执行以下操作的Kubernetes调度程序。
(1)进行部署时,每个区域只有一个,只有一个Pod。在该区域内的哪个节点都没有关系。
(2)当带有正在运行的Pod P的节点N00发生故障时,如果同一区域内的N01起作用,则将Pod调度为N01。否则,安排到另一个区域,此时我们不在乎podAntiAffinity,因此另一个区域中的任何节点(N10或N11)都可以工作。
(3)如果最终恢复了N00且P已计划在N01上进行,则我们什么也不做,但是,如果在P已计划在另一区域上恢复N00时,我们希望将P重新安排回其原始区域。
我们可以在Kubernetes API上发挥任何技巧来实现这一目标吗?
答案 0 :(得分:0)
很遗憾,我无法向您展示一种简单的方法,但我希望以下信息对您有所帮助。
如果使用多个类似的部署,则可以使用标准调度程序,每个部署针对具有不同亲和/反亲和配置的每个区域:
或者,您可以编写自定义计划程序以增加区域选择性:
尽管如此,当运行的pod再次变得健康时,它不允许您将运行的pod重新安排到另一个区域中的另一个节点。
Kubernetes Scheduler仅负责为未分配的Pod选择最合适的节点。对于处于“运行”状态的豆荚,它什么也没做。
有一个design proposal可以实现广告连播重新安排功能,但尚未准备就绪。
目前,您可以将reschedule项目作为创建自己的解决方案的起点。