更新时间:2024-09-26 GMT+08:00

设置组件实例容忍度策略

容器部署的组件,容忍度(Toleration)允许调度器将Pod调度至带有对应污点的节点上。 容忍度需要和节点污点相互配合,每个节点上都可以拥有一个或多个污点,对于未设置容忍度的Pod,调度器会根据节点上的污点效果进行选择性调度,可以用来避免Pod被分配到不合适的节点上。

表1所示,污点可以指定多种效果。
表1 污点效果说明

污点效果

Pod未设置对污点的容忍策略

Pod已设置对污点的容忍策略

NoExecute

  • 已运行在该节点的Pod会立刻被驱逐。
  • 未运行的Pod不会被调度到该节点。
  • 未指定容忍时间窗:Pod可以在这个节点上一直运行。
  • 已指定容忍时间窗:在容忍时间窗内,Pod还会在拥有污点的节点上运行,超出时间后会被驱逐。

PreferNoSchedule

  • 已运行在该节点的Pod不会被驱逐。
  • 未运行的Pod尽量不调度到该节点。

Pod可以在这个节点上一直运行。

NoSchedule

  • 已运行在该节点的Pod不会被驱逐。
  • 未运行的Pod不会被调度到该节点。

Pod可以在这个节点上一直运行。

Kubernetes会自动给Pod添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的容忍度,且配置容忍时间窗为300s。这些默认容忍度策略表示当Pod运行的节点被打上这两个污点之一时,可以在5分钟内依旧保持运行在该节点上。

DaemonSet中的Pod被创建时,针对以上污点自动添加的容忍度将不会指定容忍时间窗。即表示节点存在上述污点时,DaemonSet中的Pod一直不会被驱逐。

常用污点说明,请参考表2

表2 常用污点说明

污点

说明

node.kubernetes.io/not-ready

节点未就绪。

node.kubernetes.io/unreachable

节点控制器访问不到节点。

node.kubernetes.io/memory-pressure

节点存在内存压力。

node.kubernetes.io/network-unavailable

节点网络不可用。

node.kubernetes.io/unschedulable

节点不可调度。

前提条件

待操作集群节点已增加污点,请参考管理节点污点(Taint)

设置组件实例容忍度策略

  1. 选择“高级配置 > 容忍策略”。
  2. 单击“新增容忍策略”,参考下表添加污点容忍策略。

    参数名称

    参数说明

    污点键

    输入节点的污点键。

    操作符

    • Equal:设置此操作符表示准确匹配指定污点键(必填)和污点值的节点。如果不填写污点值,则表示可以与所有污点键相同的污点匹配。
    • Exists:设置此操作符表示匹配存在指定污点键的节点,此时容忍度不能指定污点值。若不填写污点键则可以容忍全部污点。

    污点值

    “操作符”为Equal时,需要填写污点值。

    污点策略

    • 全部:表示匹配所有污点效果。
    • NoSchedule:表示匹配污点效果为NoSchedule的污点。
    • PreferNoSchedule:表示匹配污点效果为PreferNoSchedule的污点。
    • NoExecute:表示匹配污点效果为NoExecute的污点。

    容忍时间窗(s)

    “污点策略”为NoExecute时支持配置。

    在容忍时间窗内,Pod还会在拥有污点的节点上运行,超出时间后会被驱逐。