[源码分析-kubernetes]scheduler调度器源码解析
scheduler调度器源码解析
kube-scheduler是K8s集群的三大重要组件之一,负责集群运行的所有容器的调度工作,深入理解该组件可以说是入门k8s源码的灵魂所在;本文基于hutao大神的文章加入自己的理解对该组件进行深入的源码解析:
0. scheduler是一个多实例高可用选主的组件,同一个时间只有一个容器提供调度服务
- Run方法启动一个go协程:不停的执行scheduler.scheduleOne,输入容器信息 输出推荐节点 串行!
- 第一步进入初选过程 输入为一个pod 和从nodelistener中获取的所有node,之后会启动最多16个协程 来分别判定某个node
是否满足该pod的部署条件 协程之前按通过管道通信 - 每个node都会调用相应的所有初选函数来判断节点是否适合部署,任一一个出现问题则节点被过滤: 比如节点是否ready 节点是否有
可用端口 是否满足选择器的要求 磁盘 cpu 内存是否有压力等 - 对所有节点并发调用所有优选函数 计算每个节点在某个函数上的分值 然后根据权重计算最终节点获取的分数 会获得一个nodelist 然后获取这个list中最高分的节点作为部署节点
- 如果有配置priorityclass 会进入抢占调度逻辑
- 启动协程去绑定这个节点 重新进入下一个pod的scheduleOne逻辑
原文章相关链接:
gitbook:https://farmer-hutao.github.io/k8s-source-code-analysis/
github:https://hub.fastgit.org/daniel-hutao/k8s-source-code-analysis