调度器能够借助容忍度(Toleration)机制,将Pod部署到带有相应污点的节点之上。这一机制的实现依赖于容忍度与节点污点的协同作用。节点可配置一个或多个污点,对于缺乏对应容忍度的Pod,调度器会根据污点的具体效果进行筛选,以避免不恰当的节点分配。更多关于容忍度的应用实例,请参阅K8S官网“污点与容忍度”章节。
不同类型的污点效果
NoExecute
已在该节点运行的Pod会立即被移除。
未运行的Pod则不会被调度至此节点。
若未设定容忍时间(tolerationSeconds),Pod可持续在该节点运行。
若设定了容忍时间,Pod将在指定时间内继续运行,超时后则被移除。
PreferNoSchedule
已运行的Pod不受影响,不会被移除。
未运行的Pod尽量避免调度至此节点。
Pod可长期在该节点上运行。
NoSchedule
已运行的Pod同样不受影响。
未运行的Pod不会被调度至此节点。
Pod能持续在该节点上运行。
容忍策略配置参数详解
参数名称 | 参数说明 |
---|---|
污点键 | 标识节点的污点键。 |
操作符 | Equal:精确匹配指定污点键(必填)及值的节点;Exists:匹配存在指定污点键的节点,此时无需指定污点值。 |
污点值 | 当操作符为Equal时,需填写对应的污点值。 |
污点效果 | 全部:匹配所有污点效果;NoSchedule、PreferNoSchedule、NoExecute:分别匹配对应的污点效果。 |
容忍时间 | 即tolerationSeconds,仅NoExecute效果时支持配置,设定Pod在污点节点上的容忍时长,超时后被移除。 |
默认容忍策略解析
Kubernetes默认会为Pod添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的容忍度,并设置容忍时间为300秒。这意味着,当Pod所在节点被标记为这两种污点之一时,Pod仍可在5分钟内保持运行状态。
注意
在DaemonSet创建Pod时,针对上述污点自动添加的容忍度不会设定容忍时间,意味着在节点存在这些污点的情况下,DaemonSet中的Pod将始终不会被移除。
容忍度配置示例
进入创建负载的页面,在高级配置中,选择容忍策略,进行污点容忍配置。