NoExecute、NoSchedule、PreferNoSchedule 有什么区别?

Chr*_*ski 7 kubernetes

https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/文档对于这些值的确切含义不是很清楚。

系统会尽量避免在节点上放置不能容忍污点的 pod,但这不是必需的

“尝试”是什么意思?如果我说一个函数会尝试对数字列表进行排序 - 这不是很清楚......

sur*_*ren 13

虽然略有不同,但我更喜欢谷歌对Node Taints 的解释,而不是 Kubernetes:

节点污点允许您标记节点,以便调度程序避免或阻止将其用于某些 Pod。一个补充特性,tolerations,允许你指定可以在“受污染”节点上使用的 Pod。

节点污点是与效果关联的键值对。以下是可用的效果:

NoSchedule:不容忍这种污点的 Pod 不会被安排在节点上。

PreferNoSchedule:Kubernetes 避免将不能容忍这种污点的 Pod 调度到节点上。这基本上意味着,如果可能的话,就去做。

NoExecute:如果 Pod 已经在节点上运行,则从节点中驱逐,如果尚未在节点上运行,则不会调度到节点上。

请注意, 和 之间的区别在于NoScheduleNoExecute第一个它不会安排 pod,但如果它已经在运行,则不会杀死它。对于最后一个,它将杀死 pod 并在另一个节点上重新调度。


iom*_*omv -1

根据你的问题 - 我理解它是关于 PreferNoSchedule - 这意味着这不是一个严格的要求,换句话说,如果一个 Pod 已经在该节点上调度并且它具有容忍效果,则它不会被删除。

如果您仍然感到困惑,我建议您深入研究设计提案文档,它们为我澄清了很多概念。

  • 您刚才描述的是“NoSchedule”和“NoExecute”之间的区别。`PreferNoSchedule` 只是意味着它将_尝试_避免在该节点上调度 Pod,但有时可能会发生(例如,如果所有其他节点都“满”)。 (4认同)