-
RemovePodsViolatingTopologySpreadConstraint
:查找不平衡的拓扑域,并在违反DoNotSchedule
约束时尝试从较大的拓扑域中驱逐 Pod。 -
RemoveDuplicates
:确保在同一节点上只运行一个与副本集、复制控制器、部署或作业关联的 Pod。如果有多个,则为了更好地在集群中分配 Pod,这些重复的 Pod 将被驱逐。
虽然 调度器 用于确定托管新 Pod 的最合适的节点,但 descheduler 可用于驱逐正在运行的 Pod,以便可以将 Pod 调度到更合适的节点。
您可以使用 descheduler 根据特定策略驱逐 Pod,以便可以将 Pod 调度到更合适的节点。
在以下情况下,您可以从 descheduler 驱逐正在运行的 Pod 中受益
节点利用不足或利用过度。
Pod 和节点亲和性要求(例如污点或标签)已更改,并且原始调度决策不再适用于某些节点。
节点故障需要移动 Pod。
将新节点添加到集群。
Pod 重启次数过多。
descheduler 不会安排驱逐 Pod 的替换。调度器会自动为驱逐的 Pod 执行此任务。 |
当 descheduler 决定从节点驱逐 Pod 时,它采用以下通用机制
openshift-*
和 kube-system
命名空间中的 Pod 永远不会被驱逐。
将priorityClassName
设置为system-cluster-critical
或system-node-critical
的关键 Pod 永远不会被驱逐。
不属于副本控制器、副本集、部署或作业的静态、镜像或独立 Pod 永远不会被驱逐,因为这些 Pod 不会被重新创建。
与守护程序集关联的 Pod 永远不会被驱逐。
具有本地存储的 Pod 永远不会被驱逐。
在可突发和保证的 Pod 之前驱逐尽力而为的 Pod。
所有带有descheduler.alpha.kubernetes.io/evict
注解的 Pod 类型都符合驱逐条件。此注解用于覆盖阻止驱逐的检查,用户可以选择要驱逐哪个 Pod。用户应了解 Pod 将如何以及是否被重新创建。
如果驱逐操作违反了其 Pod Disruption Budget (PDB),则不会驱逐受 Pod Disruption Budget (PDB) 约束的 Pod。使用驱逐子资源来处理 PDB,从而驱逐 Pod。
以下驱逐器配置文件可用:
AffinityAndTaints
此配置文件驱逐违反 Pod 间反亲和性、节点亲和性和节点污点的 Pod。
它启用以下策略:
RemovePodsViolatingInterPodAntiAffinity
:移除违反 Pod 间反亲和性的 Pod。
RemovePodsViolatingNodeAffinity
:移除违反节点亲和性的 Pod。
RemovePodsViolatingNodeTaints
:移除违反节点上NoSchedule
污点的 Pod。
具有requiredDuringSchedulingIgnoredDuringExecution
类型节点亲和性的 Pod 将被移除。
TopologyAndDuplicates
此配置文件驱逐 Pod,以努力在节点之间均匀分布类似的 Pod 或相同拓扑域的 Pod。
它启用以下策略:
RemovePodsViolatingTopologySpreadConstraint
:查找不平衡的拓扑域,并在违反DoNotSchedule
约束时尝试从较大的拓扑域中驱逐 Pod。
RemoveDuplicates
:确保在同一节点上只运行一个与副本集、复制控制器、部署或作业关联的 Pod。如果有多个,则为了更好地在集群中分配 Pod,这些重复的 Pod 将被驱逐。
不要与以下任何配置文件一起启用 |
LifecycleAndUtilization
此配置文件驱逐长期运行的 Pod 并平衡节点之间的资源使用情况。
它启用以下策略:
RemovePodsHavingTooManyRestarts
:移除其容器重启次数过多的 Pod。
所有容器(包括 Init 容器)的重启总次数超过 100 次的 Pod。
LowNodeUtilization
:查找资源利用率低的节点,并尝试从资源利用率高的节点驱逐 Pod,希望能将驱逐的 Pod 重新调度到这些资源利用率低的节点上。
如果节点的所有阈值(CPU、内存和 Pod 数量)的使用率低于 20%,则认为该节点资源利用率低。
如果节点的任何阈值(CPU、内存和 Pod 数量)的使用率高于 50%,则认为该节点资源利用率高。
可以选择通过将技术预览字段devLowNodeUtilizationThresholds
设置为以下值之一来调整这些资源利用率低/高的阈值百分比:Low
为 10%/30%,Medium
为 20%/50%,或High
为 40%/70%。默认值为Medium
。
PodLifeTime
:驱逐过旧的 Pod。
默认情况下,超过 24 小时的 Pod 将被移除。您可以自定义 Pod 生命周期值。
不要与以下任何配置文件一起启用 |
SoftTopologyAndDuplicates
此配置文件与TopologyAndDuplicates
相同,只是还会考虑具有软拓扑约束(例如whenUnsatisfiable: ScheduleAnyway
)的 Pod 进行驱逐。
不要同时启用 |
EvictPodsWithLocalStorage
此配置文件允许具有本地存储的 Pod 符合驱逐条件。
EvictPodsWithPVC
此配置文件允许具有持久卷声明的 Pod 符合驱逐条件。如果您使用的是Kubernetes NFS Subdir External Provisioner
,则必须为安装 provisioner 的命名空间添加一个排除的命名空间。
CompactAndScale
此配置文件启用HighNodeUtilization
策略,该策略尝试从资源利用率低的节点驱逐 Pod,以允许工作负载在一组较小的节点上运行。如果节点的所有阈值(CPU、内存和 Pod 数量)的使用率低于 20%,则认为该节点资源利用率低。
可以选择通过将技术预览字段devHighNodeUtilizationThresholds
设置为以下值之一来调整资源利用率低的百分比:Minimal
为 10%,Modest
为 20%,或Moderate
为 30%。默认值为Modest
。
不要与以下任何配置文件一起启用 |
LongLifecycle
此配置文件平衡节点之间的资源使用情况,并启用以下策略:
RemovePodsHavingTooManyRestarts
:移除其容器重启次数过多的 Pod,以及所有容器(包括 Init 容器)的重启总次数超过 100 次的 Pod。重新启动虚拟机客户操作系统不会增加此计数。
LowNodeUtilization
:当存在任何资源利用率低的节点时,从资源利用率高的节点驱逐 Pod。驱逐 Pod 的目标节点将由调度程序确定。
如果节点的所有阈值(CPU、内存和 Pod 数量)的使用率低于 20%,则认为该节点资源利用率低。
如果节点的任何阈值(CPU、内存和 Pod 数量)的使用率高于 50%,则认为该节点资源利用率高。
不要与以下任何配置文件一起启用 |