ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

污点和容忍度

污点和容忍度

污点(Taint)和容忍度(Toleration)的机制是,当节点被标记了污点,只有那些容忍这些污点的Pod才可以被调度到该节点(对于已经运行的Pod,则可能被驱逐)。

污点有三个效果(effect):

  • NoSchedule:不会调度新的Pod到该节点(已运行的Pod不受影响)。

  • PreferNoSchedule:尽量避免调度新的Pod到该节点(已运行的Pod不受影响)。

  • NoExecute:不会调度新的Pod到该节点,并且会驱逐节点上已运行但不能容忍该污点的Pod。

污点效果对调度的影响对运行中Pod的影响
NoExecute 阻止调度 + 驱逐现有Pod 立即驱逐不容忍的Pod
NoSchedule 阻止调度 不驱逐现有Pod
PreferNoSchedule 尽量避免调度 不驱逐现有Pod

所以,回到你的问题:如果Pod设置了容忍度来容忍标记有NoExecute污点的节点,那么Pod将不会被该污点驱逐(除非设置了tolerationSeconds且超时)。这意味着Pod可以继续在该节点上运行,即使节点被标记了NoExecute污点。

注意:一个节点可以有多个污点,Pod需要容忍节点上的所有污点(或者至少是效果为NoExecute的污点)才能不被驱逐。如果Pod只容忍了部分污点,那么那些未被容忍的NoExecute污点仍然会导致Pod被驱逐。

另外,系统默认会为节点添加一些污点,例如node.kubernetes.io/not-readynode.kubernetes.io/unreachable,效果为`NoExecute。如果你希望Pod能够容忍节点故障(例如节点未就绪或无法访问)而不被立即驱逐,你可以为Pod添加对这些污点的容忍度。

tolerationSeconds 的作用

这是一个可选字段,用于设置容忍的时间限制:

  • 不设置 tolerationSeconds:Pod 将无限期容忍该污点,永远不会被驱逐

  • 设置 tolerationSeconds: 3600:Pod 在污点添加后,会在节点上继续运行 3600 秒(1小时),然后被驱逐

  1. NoSchedule:只影响调度过程,即不会将新的Pod调度到该节点上,但不会影响已经在该节点上运行的Pod。

  2. NoExecute:既影响调度(与NoSchedule类似,不会调度新的Pod),也会影响已经运行的Pod:如果Pod不能容忍NoExecute污点,则会被驱逐(即从节点上删除)。

返回列表