Kube-scheduler调度器内部流转过程

k8s调度器kube-schduler的主要作用是将新创建的pod调度到集群中的合适节点上运行。kube-scheduler的调度算法非常灵活,可以根据不同的需求进行自定义配置,比如资源限制、亲和性和反亲和性等。 kube-scheduler的工作原理
监听api server:kube-scheduler会监听api server上的pod对象,以获取需要被调度的pod信息。它会通过api server提供的rest api接口获取pod的信息,例如pod的标签、资源需求等信息。
筛选可用节点:kube-scheduler会根据pod的资源需求和约束条件(例如pod需要的特定节点标签)筛选出可用的node节点。它会从所有注册到集群中的node节点中选择符合条件的节点。
计算分值:kube-scheduler会为每个可用的节点计算一个分值,以决定哪个节点是最合适的。分值的计算方式可以通过调度算法来指定,例如默认的算法是将节点资源利用率和距离pod的网络延迟等因素纳入考虑。
选择节点:kube-scheduler会选择分值最高的节点作为最终的调度目标,并将pod绑定到该节点上。如果有多个节点得分相等,kube-scheduler会随机选择一个节点。
更新api server:kube-scheduler会更新api server上的pod对象,将选定的node节点信息写入pod对象的spec字段中,然后通知kubelet将pod绑定到该节点上并启动容器。
kube-scheduler调度器内部流转过程
scheduler 通过注册 client-go 的 informer 的 handler 方法监听 api-server 的 pod 和 node 变更事件,从而实现将 pod 的信息更新 scheduler 的 activeq,podbackoffq,unschedulableq 三个队列中。
带调度的 pod 会进入到 activeq 的调度队列中,activeq 是一个维护着 pod 优先级的堆结构,调度器在调度循环中每次从堆中取出优先级最高的 pod 进行调度。
取出的待调度 pod 会经过调度器的一系列调度算法找到合适的 node 节点进行绑定。如果调度算法判定没有适合的节点,会将 pod 更新为不可调度状态,并扔进 unschedulable 的队列中。
调度器在执行绑定操作的时候是一个异步过程,调度器会先在缓存中创建一个和原来 pod 一样的 assume pod 对象用模拟完成节点的绑定,如将 assume pod 的 nodename 设置成绑定节点名称,同时通过异步执行绑定指令操作。
在 pod 和 node 绑定前,scheduler需要确保 volume 已经完成绑定操作,确认完所有绑定前准备工作,scheduler 会向 api-server 发送一个 bind 对象,对应节点的 kubelet 将待绑定的pod在节点运行起来。  
为节点计算分值 节点分值计算是通过调度器算法实现的,而不是固定的。默认情况下,kube-scheduler采用的是defaultpreemption算法,其计算分值的方式包括以下几个方面:
节点的资源利用率 kube-scheduler会考虑每个节点的cpu和内存资源利用率,将其纳入节点分值的计算中。资源利用率越低的节点得分越高。
节点上的pod数目 kube-scheduler会考虑每个节点上已经存在的pod数目,将其纳入节点分值的计算中。如果节点上已经有大量的pod,新的pod可能会导致资源竞争和拥堵,因此节点得分会相应降低。
pod与节点的亲和性和互斥性 kube-scheduler会考虑pod与节点的亲和性和互斥性,将其纳入节点分值的计算中。如果pod与节点存在亲和性,例如pod需要特定的节点标签或节点与pod在同一区域,节点得分会相应提高。如果pod与节点存在互斥性,例如pod不能与其他特定的pod共存于同一节点,节点得分会相应降低。
节点之间的网络延迟 kube-scheduler会考虑节点之间的网络延迟,将其纳入节点分值的计算中。如果节点之间的网络延迟较低,节点得分会相应提高。
pod的优先级 kube-scheduler会考虑pod的优先级,将其纳入节点分值的计算中。如果pod具有高优先级,例如是关键业务的部分,节点得分会相应提高。
这些因素的相对权重可以通过kube-scheduler的命令行参数或者调度器配置文件进行调整。需要注意的是,kube-scheduler的算法是可扩展的,可以根据需要编写自定义的调度算法来计算节点分值。 调度策略
默认调度策略(defaultpreemption):默认调度策略是kube-scheduler的默认策略,其基本原则是为pod选择一个未满足需求的最小代价节点。如果无法找到这样的节点,就会考虑使用预选,即将一些已经调度的pod驱逐出去来为新的pod腾出空间。
带优先级的调度策略(priority):带优先级的调度策略基于pod的优先级对节点进行排序,优先选择优先级高的pod。该策略可以通过设置pod的priorityclass来实现。
节点亲和性调度策略(nodeaffinity):节点亲和性调度策略基于节点标签或其他条件,选择与pod需要的条件相匹配的节点。这可以通过在pod定义中使用nodeaffinity配置实现。
pod 亲和性调度策略(podaffinity):pod 亲和性调度策略根据pod的标签和其他条件,选择与pod相似的其他pod所在的节点。这可以通过在pod定义中使用podaffinity配置实现。
pod 互斥性调度策略(podantiaffinity):pod 互斥性调度策略选择与pod不相似的其他pod所在的节点,以避免同一节点上运行相似的pod。这可以通过在pod定义中使用podantiaffinity配置实现。
资源限制调度策略(resourcelimits):资源限制调度策略选择可用资源最多的节点,以满足pod的资源需求。这可以通过在pod定义中使用resourcelimits配置实现。


芯动神州发布ADSD1299助攻穿戴式脑电采集系统
国内安企再发力,监控布线技术独占鳌头
OPPOFindX2Pro有哪些亮点?
BI+智慧医疗:医疗行业的数据可视化解决方案
高(低)频信号混入低(高)频噪声小信号时频表现
Kube-scheduler调度器内部流转过程
魅族Pro7什么时候上市?魅族Pro7最新消息:魅族Pro7设计功能提升,魅族Pro7Plus加持值得期待
硬阈值和软阈值区别分析及选取技巧
CPU技术及产业链供应关系
220V AC电源LED指示灯电路图
CCell可再生能源公司与 Vicor 合作,为新珊瑚礁生长提供强劲动力
飞凌嵌入式10.4吋LCD液晶屏简介
22nm工艺芯片即将量产,我国北斗芯片再次取得重大突破
苹果A11/A12/A13芯片订单或将尽归台积电
工业互联网投融资研讨会在北京召开 逐步驱动整个现代产业体系的改变
安防系稳健增长 2020深入红海
新应用指南部署光纤基础设施结构化布线
电能质量治理产业发展迅速 基建投资提高产业需求
AGV纤维自动化物流系统的特点及应用
碱性锌锰电池漏液的检测