3.10.2. Descheduler 策略

descheduler 可以使用以下策略:

低节点使用率

LowNodeUtilization 策略会查找使用率不足的节点,并在可能的情况下从其他节点中驱除 pod,以希望这些被驱除的 pod 可以在使用率低的节点上被重新创建。

节点使用率是否不足是由以下可配置的阈值参数决定的: CPU 、内存和 pod 的数量。如果节点的使用情况低于所有参数的配置阈值(CPU 、内存和 pod 的数量),则该节点将被视为使用不足。

您还可以为 CPU、内存和 pod 数量设置目标阈值。如果节点用量超过任何参数配置的目标阈值,则节点的 pod 可能会被考虑被驱除。

另外,还可以使用 NumberOfNodes 参数设置一个值,仅当使用率低的节点数超过这个配置的值时才会激活相关策略。这对大型集群非常有用,因为大型集群可能会有少数节点经常处于低利用率的情况,或在一个短时间段内出现低利用率的情况。

重复的 pod

RemoveDuplicates 策略确保只有一个 pod 关联在同一节点上运行的副本集、复制控制器、部署或作业。如果存在多个相关的节点,则这些重复的 pod 会被驱除以更好地在集群中分散 pod。

当节点失败后,pod 移到另一个节点时会出现这种情况,导致与副本集、复制控制器、部署或作业关联的多个 pod。当出现故障的节点重新就绪后,此策略会驱除重复的 pod。

此策略有一个可选参数 ExcludeOwnerKinds,用于指定 Kind 类型的列表。如果 pod 中有这些类型列为 OwnerRef,则该 pod 不会被考虑驱除。

违反 pod 间的反关联性

RemovePodsViolatingInterPodAntiAffinity 策略确保违反了 pod 间的反关联性的 pod 被从节点中驱除。

当为已在同一节点上运行的 pod 创建反关联性规则时,可能会发生这种情况。

违反节点关联性

RemovePodsViolatingNodeAffinity 策略确保违反了节点关联性的 pod 被从节点中驱除。

当节点不再满足 pod 的关联性规则,会出现这种情况。如果存在另外一个节点可以满足关联性规则,则 pod 会被驱除。

违反节点污点

RemovePodsViolatingNodeTaints 策略确保违反了节点上的 NoSchedule 污点的 pod 会被驱除。

如果 pod 被设置为容忍 taint key=value:NoSchedule,并在污点节点上运行时,会出现这种情况。如果节点的污点被更新或删除,污点不再满足 pod 的容限,则 pod 会被驱除。

重启太多

RemovePodsHavingTooManyRestarts 策略确保已重启了多次的 pod 被从节点中移除。

如果 pod 调度到一个无法启动它的节点时,会出现这种情况。例如,如果节点有网络问题且无法挂载一个联网的持久性卷,则 pod 应该被驱除以便可以调度到另一个节点上。另一个示例是 pod 处于 crashlooping 时。

此策略有两个可配置参数: PodRestartThresholdIncludingInitContainers。如果 pod 重启超过配置的 PodRestartThreshold 值,则 pod 会被驱除。您可以使用 IncludingInitContainers 参数指定初始(Init)容器的重启次数是否应该计算到 PodRestartThreshold 的值。

Pod 生命周期

PodLifeTime 策略驱除太老的 pod。

pod 达到年龄(以秒为单位)后,由 MaxPodLifeTimeSeconds 参数设置,它将被驱除。