kube-scheduler 工作流
2019-11-14 10:17:57 3 举报
kube-scheduler 工作流
作者其他创作
大纲/内容
函数内
开启不大于16个并发过程checkNode()计算一个node是否fit一个pod
Preempt(最小代价在哪个node上驱逐和解指定哪些pod)
尝试通过调度算法选择一个最优node
Start
开启N个并发PriorityConfig.Reduce()将map过程的结果分值规约成[0-10]
因为FitError触发抢占过程
得分最高的node胜出
计算“潜力”node,用于抢占计算(不是所有node都需要尝试抢占的,比如node硬亲和性不满足)
返回要驱逐的pod列表以及涉及破坏的pdb的pod数量
genericScheduler.findNodesThatFit()这个方法完成预选过程
Holistic(上层逻辑)
reprievePod从pdb相关的队列中开始拯救pod,然后拯救pdb无关pod
Scheduler.scheduleOne()完成1个pod的调度过程
PrioritizeNodes()这个函数完成优选过程
再预选(判断node是否fit)
上述得到的nodes,pdbs都是入参
得到1.要发生驱逐的node2.要被驱逐的pod列表3.\"被指定pod\"列表
预选胜出的nodes作为输入项
Scheduler.Run()调度逻辑开始工作
开启不大于16个并发PriorityConfig.Map()计算一个node对应给定pod的得分
发生驱逐过程,解指定过程等,腾出node资源
selectVictimsOnNode计算一个node是否驱逐就满足要求;如果发生驱逐需要牺牲哪些pods和pdb破坏
Priority(哪个node最适合运行给定pod)
一系列的初始化包括配置项、Informer等等
pickOneNodeForPreemption()抉择一个最合适抢占的node
落实pod绑定的实质性操作
将每个算法对应node的分值进行加权求和从而得到每个node的最终分值
kube-scheduler 工作流 - v1.0 (farmer-hutao 2019/04/19)
查询低优先级的指定到这个node但是未运行的pods(剥脱运行机会)
filterPodsWithPDBViolation()将pod按照pdb有关和无关分成2个组,分别按照优先级排序为了最大程度保留pods.
开启不大于16个并发执行checkNode()
预选失败
一个pod的调度结束开始处理下一个pod
Predicate(哪些node能够运行给定的pod)
每个node的驱逐代价计算完成
如果没有异常,就计算得出了一个最优node
Schedule寻找node失败?
查询 pdb 列表(pod中断预算)为了尽量少打破 pdb规则
通过checkNode()筛选的node胜出
selectNodesForPreemption()计算各个node如果发生驱逐需要牺牲的pods和pdb
0 条评论
下一页