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 条评论
下一页