概览
时机
调度分类
分级调度 拥有当前集群所有的资源, 并发的调度集回写状态, 如果发生锁冲突就进行重试
数据本地化, 启动worker处理数据, 本地启动 worker 远程启动job 远程传输文件 会存在效率问题, 哪里有数据 就将job下发到哪里, 将执行代码copy到目标节点
反相似 cpu密集 IO密集的任务混合到一起 这样不会存在资源的争抢
监听apiserver 还未分配节点的pod 然后根据调度策略 将pod绑定到节点(node)
调度阶段&绑定阶段
percidate预选 将不满足需求的节点过滤掉
每一个阶段 里面实现了很多的SQL(扩展点) 其实就是framework + 插件
调度插件 fit.go
pod--container 根据container的需求 计算pod需要的资源
leastallocate 哪个节点已经分配的少 谁的分配资源少 谁的优先级就高 mosttallocate 谁的分配资源多 谁的优先级就高
percidate工作原理
所有的插件并行顺序执行, 所有的插件都过滤完成 剩下的就是结果
资源分配
左边的 pod的需求
右边 节点上的资源情况(已经用的、总量)
进程调度
流量控制
例如节点8c (分时复用)
控制container使用cpu的资源
period = 10W ms的周期中
业务能用的ms /10W ms
控制使用比例
cpu争抢的时候 会按照1:2的比例争抢资源
node selecter
带SSD卡的机器 打一个lable pod支持node selecter 可以选择具有哪些lable的机器
Node affinity(建议使用)
更灵活
- in not
- 策略控制
- require 必选 硬性的亲和指标
- preferred 优选 软性的亲和指标(软亲和)
DuringScheduler首次调度的时候需要亲和的指标 DuringExecution 运行期间是否还满足亲和要求 如果不满足要求的时候 会重新进行调度 DuringIgnore 不需要管
污点
保证业务不被调度到这个节点
priority class
高优业务优先被调用 高优的资源 可以 让低优的资源 被清除掉
重调度
任务执行的过程中 持续的监听集群 如果存在调度策略 违法、异常 需要将pod驱逐掉 重新走调度器 找一个更合适的节点
扩展调度器
额外的服务跑到一个webhook中 extender
基于 framework扩展
动态调度
负载感知调度
例如设置调度水位 cpu70% 通过promethues监控 如果超过cpu70% 停止调度到改节点
将超过目标水位的节点过滤掉, 优先将业务调度到负载低的节点 解决负载不均衡的问题
为了提升cpu和内存