本篇文章分享Pod的调度、抢占和驱逐的相关概念,基本都是理论,但非常重要,经常在面试中被问到。希望能耐心看完! Kubernetes(K8s)作为一个容器编排平台,其调度( 调度(scheduling)指的是确保 Pod 匹配到合适的节点, 以便 kubelet 能够运行它们。 抢占(Preemption)指的是终止低优先级的 Pod 以便高优先级的 Pod 可以调度到 Node 上的过程。 驱逐(Eviction)是在资源匮乏的节点上,主动让一个或多个 Pod 失效的过程。 接下来将详细介绍这三个概念: 调度器通过 Kubernetes 的监测(Watch)机制来发现集群中新创建且尚未被调度到节点上的 Pod。调度的主要任务是将Pod分配到集群中的合适的节点上。调度器根据Pod的需求(如CPU、内存、存储等)和节点的资源状况(如可用CPU、内存、节点标签等)来决定Pod部署在哪个节点上。 Kubernetes调度过程主要包括以下步骤: 1、资源需求:每个Pod可以声明它对资源的需求,如CPU、内存等。这些信息由resources.requests和resources.limits字段描述。 2、节点筛选:调度器会根据Pod的资源需求以及节点的资源状况来筛选合适的节点。筛选是通过一系列的调度策略(如节点的可用资源、Pod的亲和性和反亲和性等)来进行的。 3、节点优选:一旦节点被筛选出来,调度器将评估每个节点的优劣。优选是基于一组优先级策略(例如,Pod亲和性、负载均衡、Pod优先级等)。 4、Pod调度:调度器最终会选择一个最佳节点,并将Pod调度到该节点上。Pod在被调度之前,状态是Pending,调度后它的状态变为Running。 Kubernetes调度器默认采用的是 抢占机制是Kubernetes中用于保证高优先级Pod能够在资源不足时“抢占”低优先级Pod的资源,从而确保关键任务的运行。抢占的目标是保证高优先级的Pod能够优先调度到集群中的节点。 抢占机制发生的条件是: 高优先级 Pod 请求调度时,当前没有足够的资源 集群资源不足时,调度器会查找那些资源消耗较大的、优先级较低的 Pod,并尝试将其驱逐,以便为高优先级 Pod 腾出空间。 驱逐是指Kubernetes将运行中的Pod从节点上强制移除,通常是因为节点资源不足(如CPU、内存不足)或者Pod违反了某些限制(如超出资源配额)。 Kubernetes中的驱逐策略有两种类型: 1、驱逐请求:当节点的资源压力增大时,Kubernetes会评估当前节点上所有Pod的资源使用情况。 2、Pod选择:Kubernetes会根据Pod的优先级、资源使用量、Pod的类型(如持久性或临时性)来选择哪些Pod需要被驱逐。 3、驱逐Pod:一旦Pod被选择驱逐,Kubernetes会通过API向该Pod发出驱逐命令,通知调度器将其从节点上移除。 调度、抢占和驱逐之间存在紧密的联系,它们共同决定了Pod在集群中的运行和资源分配。调度器不仅负责Pod的初始调度,还会根据Pod的优先级、资源需求以及集群的负载情况,在运行过程中做出合理的资源分配决策。 调度器在初次调度时可能会考虑抢占机制(特别是当资源紧张时)。如果集群资源不足,优先级较高的Pod会抢占低优先级Pod的资源。 抢占机制和驱逐机制有些相似。驱逐是节点资源压力下自动发生的,而抢占是通过调度器主动发起的。 在资源紧张时,抢占和驱逐可以结合使用,通过优先级调整、驱逐低优先级Pod来保证高优先级Pod的运行。 调度器也需要在节点资源变动时(如节点资源不足或发生故障时)做出决策。如果Pod运行在一个资源即将耗尽的节点上,调度器可能会选择将Pod重新调度到一个资源充足的节点。 理解这三个机制如何协同工作,有助于更好地管理Kubernetes集群,优化资源分配,并确保高优先级应用能够在集群中正常运行。 往期精彩文章:Scheduling
)、抢占(Preemption
)和驱逐(Eviction
)机制是确保集群资源合理分配、高效使用并保证应用健康运行的关键部分。1. 调度(Scheduling)
1.1. 调度概述
1.2 调度过程
1.3. 调度策略
kube-scheduler
, 以下是最常用的调度策略2. 抢占(Preemption)
2.1. 抢占概述
2.2. 抢占机制工作原理
2.2.1. 抢占的触发
PriorityClass
控制。PriorityClass 是一个 API 资源,定义了 Pod 的优先级。Pod 的优先级越高,被调度的优先级越高,且越有可能触发抢占。PreemptLowerPriority
:默认设置,允许高优先级 Pod 抢占低优先级 Pod。DoNotPreempt
:禁止抢占,Pod 只能在资源可用时调度,不会抢占其他 Pod。2.2.2. 抢占过程
2.3. 抢占对调度的影响
3. 驱逐(Eviction)
3.1. 驱逐概述
3.2. 驱逐的触发条件
3.3. 驱逐策略
3.4. 驱逐过程
3.5. 驱逐的影响
4. 调度、抢占和驱逐的交互
4.1 调度与抢占
4.2 驱逐与抢占
4.3 调度和驱逐
Kubernetes的Pod调度、抢占和驱逐的区别与关系
发布于 2025-04-07 19 次阅读