Azure Kubernetes 服务:如何将 pod 从 Spot 节点池自动移动到常规节点池?

Azure Kubernetes Service: How to move pod from Spot node pool to Regular node pool automatically?

我的 azure kubernetes 集群中有 2 个节点池。其中一个节点池是 Spot VM 节点池,另一个是常规 VM 节点池。我已经在 spot 节点池上部署了 2 pods。所以,我希望如果 spot 节点池被驱逐,那么相同的 pods 是否会自动重新安排在常规节点池上?

我了解了节点亲和力和节点选择器,它用于 运行 某些节点中的 pods。如果 kubernetes 提供此功能以在现场节点 pool/spot 实例被驱逐时自动将 pods 迁移到另一个节点,这将很有帮助。

有谁知道我们如何在 kubernetes 中实现这一目标吗?

谢谢。

使用的 Kubernetes 版本 1.18.14

您可以在现场节点上使用 NoSchedule 污点。这不会从节点中驱逐任何 运行 pods,但不会为它们安排任何新的 pods(除非您明确指定匹配的容忍度)。

您可以查看此文档页面了解更多详细信息:https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/

但总的来说,你要做的是:

现场节点应该有一个唯一的标签,如果你描述其中一个节点,你可以找到它。使用它像这样用 NoSchedule 污点污染所有节点

kubectl taint nodes node1 key1=value1:NoSchedule 

(将 key1=value1 替换为您找到的标签)

对于所有 pods 你想继续调度到 spot 节点(例如系统 pods)添加以下容忍度以允许它们继续:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

对于您在问题中提到的pods,您不希望在它们出现故障后将它们重新安排回现场节点,所以不要在它们上添加容忍度。

假设您的 pods 由部署或状态集(或任何其他在丢失 pod 时负责重新安排的控制器)控制,当您的 pods 将被逐出一个 spot 节点由于它消失了,将取代它的 pods 将无法再被调度到 spot 节点,并且鉴于唯一的其他选择是常规节点,它们将被调度到那里。