kube-scheduler
2023-01-31 10:13:07   0  举报             
     
         
 kube-scheduler源码阅读,代码执行梳理
    作者其他创作
 大纲/内容
 file: pkg/scheduler/internal/cache/cache.go
  file: pkg/scheduler/internal/cache/cache.go
  返回符合条件的全部node
  file: pkg/scheduler/schedule_one.go: 
  main()
  开始调度schedulePod
  sched.run()
  UpdateSnapshot
  addAllEventHandlers
  kube-scheduler
  file: pkg/scheduler/schedule_one.go
  启动时会先执行:将超过 最大为调度时间的 pod 移动到 backoffQ 或者 activeQ [当前时间减去 创建时间 大于 最大未调度时间]正式开始运行scheduleOne
  Setup——》scheduler.New
  skipPodSchedule
  1、设置默认配置,options,根据传入的值opts进行设置2、实例framework插件(如果自定义的插件也是只需要在framework下注册)在这里就会默认进行实例3、注册监控 metrics4、 list&watch pod和node5、进行用户配置设置6、实例毅哥优先级队列【podqueue,该队列中就包含了经常在一些文章中看到的 activeQ和backoffQ】7、通过上诉的参数,进行实例化scheduler8、添加事件处理器
  事件处理器
  判断是否是Assumed的podIsAssumedPod
  否
  findNodesThatFitPod
  使用cobra定义一个启动命令行,读取传递的参数
  RunPreFilterPlugins
  file: pkg/scheduler/scheduler.go
  // 两种情况会跳过调度// 一、设置了删除字段DeletionTimestamp// 二、已经是 Assumed Pod (当pod完成了scheduler的Predicate和Priority后,立刻就设置为Assumed,之后再调用apiserver的Bind接口)
  file:cmd/kube-scheduler/scheduler.go
  从缓存(watch的节点信息)中将节点信息更新到快照,用于调度时使用
  file:cmd/kube-scheduler/app/server.go
  如果node快照更新后,快照节点数量为0
  NewSchedulerCommand()
  registryOptions 默认是没有传递值的,因此后续也没有操作在Setup() 中实例scheduler和相关配置
  调度阶段
  文本
  从Assumed的 map中通过uid获取pod,如果存在就是Assumed的pod
    
    收藏 
     
 
 
 
 
  0 条评论
 下一页
  
  
  
  
  
  
  
  
  
 