Scheduler原理
一、简介
Scheduler 在整个系统中承担了“承上启下”的重要功能,“承上”是指它负则接收Controller Manager 创建的新 Pod,为它找到目标Node ,“启下”是指安置工作完成后,目标 Node 上的 kubelet
务进程接管后继工作,负 Pod 生命周期中的“下半生”
Scheduler 的作用是将待调度的 Pod (API 新创建的 Pod
、ControllerManager
为补足副本而创建的 Pod 等)按照特定的调度算法和调度策略绑定( Binding )到集群中的某个合适的 Node 上,并将绑定信息写入 etcd 中。在整个调度过程中涉及 3个对象,分别是:待调度 Pod 列表、可用 Node 列表,以及调度算法和策略 。简单地说,就是通过调度算法调度为待调度 Pod 列表的每个 Pod 从Node 列表中选择一个最适合的 Node,随后目标节点上的kubelet通过API Server监听到Pod的绑定事件,获取对应Pod清单,下载Image,启动容器。

二、调度流程
- 预选调度过程,即遍历所有目标 Node ,筛选出符合要求的候选节点。
- 确定最优节点 在第1步的基础上,采用优选策略 (xxx Priority )计算出每个候选节的积分,积分最高者胜出。
Scheduler 的调度流程是通过插件方式加载的“调度算法提供者”,一个 AlgorithmProvider
其实就是包括了一组预选策略与一组优先选择策略的结构体
可用的预选策略包含: NoDiskConflict
PodFitsResources
PodSelectorMatches
PodFitsHost
CheckNodeLabelPresence
CheckServiceAffinity
PodFitsPorts
策略等。