Kubernetes:如果托管在特定的nodepoll上,则自动重启pod

nqwrtyyt  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(136)

背景

我有两个Kubernetes节点池-AB
A nodepool是正确的硬件,也是首选。B be nodepool不是首选,因为它使用不同的硬件。
我的pod分配首选节点池A。但是,A并不总是可用的。它在70%的时间可用。
一旦pod在nodepool B中产生,它将永远留在那里。这对我来说效率很低。

问题:

我想安排一个pod的自动终止,如果它位于nodepool B中。自动终止可以在固定时间(或者更好的是X到Y分钟之间的随机时间)后完成。
如何实施?

f4t66c6m

f4t66c6m1#

这方面的需要非常明确。
您可以将这段代码添加到Deployment(.spec.affinity.nodeAffinity)中:

nodeAffinity:
      # Soft anti affinity between nodes A and B
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: nodepool-a
              operator: In
              values:
              - "true"
          topologyKey: "kubernetes.io/hostname"

假设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)

相关问题