《Kubernetes知识篇(三):Kube-scheduler原理分析》

本文深入探讨了Kubernetes Scheduler的工作原理,包括预选和优选策略,如PodFitsResources、SelectorSpreadPriority等。调度流程涉及Pod的过滤与打分,确保将Pod合理分配到集群节点。了解这些机制有助于优化Kubernetes集群的资源利用率和稳定性。
摘要由CSDN通过智能技术生成



一、Kube-scheduler调度概述

Kubemetes Scheduler 在整个系统中承担了承上启下的重要功能,承上是指它负责接收Controller Manager 创建的新Pod,为其安排一个落脚的家(目标 Node);启下是指安置工作完成后,目标 Node 上的 kubelet 服务进程接管后继工作,负责 Pod 生命周期中的下半生。

具体来说,Kubernetes Scheduler的作用是将待调度的Pod按照特定的调度算法和调度策略绑定到集群的某个合适的Node上,并将绑定信息存储到etcd中。

在整个调度过程中设计三个调度对象,分别是:带调度的Pod列表、可用的Node列表、调度算法策略。

简单地说,就是通过调度算法策略为待调度Pod列表中每个Pod 从Node 列表中选择一个最适合的 Node 。随后节点上的kubelet通过API Server监听到Kubernetes scheduler产生的Pod绑定事件,获取对应的Pod清单,下载image镜像,并启动容器。

流程图如下:
在这里插入图片描述


二、Kube-scheduler调度流程

kube-scheduler的根本工作任务是根据各种调度算法将Pod绑定(bind)到最合适的工作节点,整个调度流程分为两个阶段:预选策略(Predicates)和优选策略(Priorities)。
1、预选调度过程:根据预选策略,遍历所有目标Node,筛选出符合要求的候选节点。
2、优选调度过程:确定最优节点,在第1步的基础上,采用优选策略 ( xxx Priority )计算出每个候选节点的积分,积分最高者胜出。


三、Kube-scheduler调度策略

预选策略(Predicates)
过滤条件包含如下:

PodFitsHostPorts:检查Pod容器所需的HostPort是否已被节点上其它容器或服务占用。如果已被占用,则禁止Pod调度到该节点。
PodFitsHost:检查Pod指定的NodeName是否匹配当前节点。
PodFitsResources:检查节点是否有足够空闲资源(例如CPU和内存)来满足Pod的要求。
PodMatchNodeSelector:检查Pod的节点选择器(nodeSelector)是否与节点(Node)的标签匹配
NoVolumeZoneConflict:对于给定的某块区域,判断如果在此区域的节点上部署Pod是否存在卷冲突。
NoDiskConflict:根据节点请求的卷和已经挂载的卷,评估Pod是否适合该节点。
MaxCSIVolumeCount:决定应该附加多少CSI卷,以及该卷是否超过配置的限制。
CheckNodeMemoryPressure:如果节点报告内存压力,并且没有配置异常,那么将不会往那里调度Pod。
CheckNodePIDPressure:如果节点报告进程id稀缺,并且没有配置异常,那么将不会往那里调度Pod。
CheckNodeDiskPressure:如果节点报告存储压力(文件系统已满或接近满),并且没有配置异常,那么将不会往那里调度Pod。
CheckNodeCondition:节点可以报告它们有一个完全完整的文件系统,然而网络不可用,或者kubelet没有准备好运行Pods。如果为节点设置了这样的条件,并且没有配置异常,那么将不会往那里调度Pod。
PodToleratesNodeTaints:检查Pod的容忍度是否能容忍节点的污点。
CheckVolumeBinding:评估Pod是否适合它所请求的容量。这适用于约束和非约束PVC。

优选策略(Priorities)
过滤条件包含如下:

SelectorSpreadPriority:对于属于同一服务、有状态集或副本集(Service,StatefulSet or ReplicaSet)的Pods,会将Pods尽量分散到不同主机上。
InterPodAffinityPriority:策略有podAffinity和podAntiAffinity两种配置方式。简单来说,就说根据Node上运行的Pod的Label来进行调度匹配的规则,匹配的表达式有:In, NotIn, Exists, DoesNotExist,通过该策略,可以更灵活地对Pod进行调度。
LeastRequestedPriority:偏向使用较少请求资源的节点。换句话说,放置在节点上的Pod越多,这些Pod使用的资源越多,此策略给出的排名就越低。
MostRequestedPriority:偏向具有最多请求资源的节点。这个策略将把计划的Pods放到整个工作负载集所需的最小节点上运行。
RequestedToCapacityRatioPriority:使用默认的资源评分函数模型创建基于ResourceAllocationPriority的requestedToCapacity。
BalancedResourceAllocation:偏向具有平衡资源使用的节点。
NodePreferAvoidPodsPriority:根据节点注释scheduler.alpha.kubernet .io/preferAvoidPods为节点划分优先级。可以使用它来示意两个不同的Pod不应在同一Node上运行。
NodeAffinityPriority:根据preferredduringschedulingignoredingexecution中所示的节点关联调度偏好来对节点排序。
TaintTolerationPriority:根据节点上无法忍受的污点数量,为所有节点准备优先级列表。此策略将考虑该列表调整节点的排名。
ImageLocalityPriority:偏向已经拥有本地缓存Pod容器镜像的节点。
ServiceSpreadingPriority:对于给定的服务,此策略旨在确保Service的Pods运行在不同的节点上。总的结果是,Service对单个节点故障变得更有弹性。
EqualPriority:赋予所有节点相同的权值1。
EvenPodsSpreadPriority:实现择优 pod的拓扑扩展约束

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值