kube-scheduler 工作流
2019-11-14 10:17:57   3  举报             
     
         
 kube-scheduler 工作流
    作者其他创作
 大纲/内容
 函数内
  开启不大于16个并发过程checkNode()计算一个node是否fit一个pod
    Preempt(最小代价在哪个node上驱逐和解指定哪些pod)
  尝试通过调度算法选择一个最优node
  Start
  开启N个并发PriorityConfig.Reduce()将map过程的结果分值规约成[0-10]
  因为FitError触发抢占过程
  得分最高的node胜出
  计算“潜力”node,用于抢占计算(不是所有node都需要尝试抢占的,比如node硬亲和性不满足)
  返回要驱逐的pod列表以及涉及破坏的pdb的pod数量
  genericScheduler.findNodesThatFit()这个方法完成预选过程
  Holistic(上层逻辑)
  reprievePod从pdb相关的队列中开始拯救pod,然后拯救pdb无关pod
  Scheduler.scheduleOne()完成1个pod的调度过程
  PrioritizeNodes()这个函数完成优选过程
  再预选(判断node是否fit)
  上述得到的nodes,pdbs都是入参
  得到1.要发生驱逐的node2.要被驱逐的pod列表3.\"被指定pod\"列表
  预选胜出的nodes作为输入项
  Scheduler.Run()调度逻辑开始工作
  开启不大于16个并发PriorityConfig.Map()计算一个node对应给定pod的得分
  发生驱逐过程,解指定过程等,腾出node资源
  selectVictimsOnNode计算一个node是否驱逐就满足要求;如果发生驱逐需要牺牲哪些pods和pdb破坏
  Priority(哪个node最适合运行给定pod)
  一系列的初始化包括配置项、Informer等等
  pickOneNodeForPreemption()抉择一个最合适抢占的node
  落实pod绑定的实质性操作
  将每个算法对应node的分值进行加权求和从而得到每个node的最终分值
  kube-scheduler 工作流 - v1.0 (farmer-hutao 2019/04/19)
  查询低优先级的指定到这个node但是未运行的pods(剥脱运行机会)
  filterPodsWithPDBViolation()将pod按照pdb有关和无关分成2个组,分别按照优先级排序为了最大程度保留pods.
  开启不大于16个并发执行checkNode()
  预选失败
  一个pod的调度结束开始处理下一个pod
  Predicate(哪些node能够运行给定的pod)
  每个node的驱逐代价计算完成
  如果没有异常,就计算得出了一个最优node
  Schedule寻找node失败?
  查询 pdb 列表(pod中断预算)为了尽量少打破 pdb规则
  通过checkNode()筛选的node胜出
  selectNodesForPreemption()计算各个node如果发生驱逐需要牺牲的pods和pdb
   
 
 
 
 
  0 条评论
 下一页
  
   
   
  
  
  
  
  
  
  
  
 