背景
我有两个Kubernetes节点池-A
和B
。A
nodepool是正确的硬件,也是首选。B
be nodepool不是首选,因为它使用不同的硬件。
我的pod分配首选节点池A
。但是,A
并不总是可用的。它在70%的时间可用。
一旦pod在nodepool B
中产生,它将永远留在那里。这对我来说效率很低。
问题:
我想安排一个pod的自动终止,如果它位于nodepool B
中。自动终止可以在固定时间(或者更好的是X到Y分钟之间的随机时间)后完成。
如何实施?
我有两个Kubernetes节点池-A
和B
。A
nodepool是正确的硬件,也是首选。B
be nodepool不是首选,因为它使用不同的硬件。
我的pod分配首选节点池A
。但是,A
并不总是可用的。它在70%的时间可用。
一旦pod在nodepool B
中产生,它将永远留在那里。这对我来说效率很低。
我想安排一个pod的自动终止,如果它位于nodepool B
中。自动终止可以在固定时间(或者更好的是X到Y分钟之间的随机时间)后完成。
如何实施?
1条答案
按热度按时间f4t66c6m1#
这方面的需要非常明确。
您可以将这段代码添加到Deployment(.spec.affinity.nodeAffinity)中:
假设nodepool-a有一个标签“nodepool-a=true”(可以是任何其他),添加此配置后,Pod将被分配给nodepool-a;如果nodepool-a不可用,它们将被调度到与标签不匹配的其他节点池上。
使用此配置,您只需要计划部署的推出重启,以便在可用时将Pod移动到nodepool-a。
不幸的是,没有其他方法可以达到你的目标;也许您可以自动化由监视事件触发的Deployment rollout重启,该事件在一段时间后“通知”nodepool-a可用。
https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
查看 nodeaffinity 代码,我了解到将实现 requiredDuringSchedulingRequiredDuringExecution 函数,该函数甚至应该驱逐不匹配标签的节点上的Pod。
但没有详细说明何时实施。
https://github.com/kubernetes/kubernetes/blob/v1.26.3/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go#L36 (line 258)