一、简介

Scheduler 在整个系统中承担了“承上启下”的重要功能,“承上”是指它负则接收Controller Manager 创建的新 Pod,为它找到目标Node ,“启下”是指安置工作完成后,目标 Node 上的 kubelet 务进程接管后继工作,负 Pod 生命周期中的“下半生”

Scheduler 的作用是将待调度的 Pod (API 新创建的 PodControllerManager 为补足副本而创建的 Pod 等)按照特定的调度算法和调度策略绑定( Binding )到集群中的某个合适的 Node 上,并将绑定信息写入 etcd 中。在整个调度过程中涉及 3个对象,分别是:待调度 Pod 列表、可用 Node 列表,以及调度算法和策略 。简单地说,就是通过调度算法调度为待调度 Pod 列表的每个 Pod 从Node 列表中选择一个最适合的 Node,随后目标节点上的kubelet通过API Server监听到Pod的绑定事件,获取对应Pod清单,下载Image,启动容器。

image-20211108213055710

二、调度流程

  • 预选调度过程,即遍历所有目标 Node ,筛选出符合要求的候选节点。
  • 确定最优节点 在第1步的基础上,采用优选策略 (xxx Priority )计算出每个候选节的积分,积分最高者胜出。

Scheduler 的调度流程是通过插件方式加载的“调度算法提供者”,一个 AlgorithmProvider 其实就是包括了一组预选策略与一组优先选择策略的结构体

可用的预选策略包含: NoDiskConflict PodFitsResources PodSelectorMatches PodFitsHost CheckNodeLabelPresence CheckServiceAffinity PodFitsPorts 策略等。