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 时。
此策略有两个可配置参数:
PodRestartThreshold
和IncludingInitContainers
。如果 pod 重启超过配置的PodRestartThreshold
值,则 pod 会被驱除。您可以使用IncludingInitContainers
参数指定初始(Init)容器的重启次数是否应该计算到PodRestartThreshold
的值。- Pod 生命周期
PodLifeTime
策略驱除太老的 pod。pod 达到年龄(以秒为单位)后,由
MaxPodLifeTimeSeconds
参数设置,它将被驱除。