kube-scheduler是k8s中相对比较简单的一个服务,它监听api server获取新建的Pod,从众多的Node中选择一个合适的,来运行该Pod。
选择的过程分两个阶段:预选阶段 & 优选阶段
- 预选阶段:根据Pod创建的要求,筛选出所有符合要求的Node,通过该阶段的Node理论上都可以运行目标Pod
- 优选阶段:给上一步筛选出来的Node打分,选择一个分数最高的Node
本文简单的跟进一下kube-scheduler执行的整个流程。
入口代码:
1 | #cmd/kube-scheduler/app/server.go:62 |
继续看Run函数
1 | // Run executes the scheduler based on the given configuration. It only return on error or when stopCh is closed. |
这里边重要的函数就两个,
一个是scheduler.New() 构建了一个Scheduler对象,关联了各个informer的动作;
一个是run(ctx),启动调度服务,run(ctx)最终会调用函数:scheduleOne;
先看下scheduleOne函数
1 | // scheduleOne does the entire scheduling workflow for a single pod. It is serialized on the scheduling algorithm's host fitting. |