Skip to content

Latest commit

 

History

History
 
 

kube-scheduler

kube-scheduler

  1. 利用SharedIndedInformer过滤未调度的Pod放入调度队列
  2. 利用SharedIndexInformer过滤已调度的Pod更新调度缓存
  3. 调度队列取出一个待调度的Pod,通过Pod.Spec.SchedulerName获取调度框架
  4. 调度框架是配置好的调度插件集合,既可以通过扩展调度插件的方式扩展调度能力,也可以通过调度扩展器
  5. 调度算法利用调度缓存的快照以及输入的调度框架,为Pod选择最优的节点
  6. 如果调度算法执行失败,将Pod放入调度队列的不可调度自队列;如果调度算法执行成功,通知调度缓存假定调度Pod后异步绑定,绑定成功执行2
  7. 其实调度算法并不是执行失败就将Pod放入不可调度队列,而是通过调度插件执行抢占调度,抢占成功的Pod会被提名并等待被强占调度Pod退出,只有抢占失败的Pod才会放入不可调度队列
  8. 而且Pod假定调度完成后,不是立刻执行绑定,而是需要经过调度插件的ReservePlugin和PermitPlugin,如果PermitPlugin返回等待,则Pod需要等待直到批准或超时
  9. 向SharedIndedInformer注册了Pod、Node、Service、CSINode、PV、PVC、StorageClass事件处理函数
  10. 以上调度流程通过调度器对象实现,而调度器是通过配置器构造的,配置器的配置主要来自配置API