k8s调度框架源码梳理(v1.22)
2022-07-05 00:45:23 24 举报
k8s调度框架源码梳理(v1.22)
作者其他创作
大纲/内容
应用层
fwk.RunPermitPlugins
PermitPlugin
开始绑定
g.findNodesThatPassFilters
所有的扩展点和执行顺序
p.flushBackoffQCompleted
PodTopologySpread
sched.frameworkForPod
执行注册的 FilterPlugin
NodeResources
PriorityQueue.Run()
调度器插件配置
prioritizeNodes
4
flushUnschedulableQLeftover
NodePort
PostFilterPlugin
pkg/scheduler/scheduler/framework/runtime/framework.go
PreScorePlugin
调度框架层
KubeSchedulerConfiguration
fwk.RunPostBindPlugins
设置调度结果:NodeName=xxx
fwk.RunFilterPluginsWithNominatedPods
1
注册默认的插件
addPodToSchedulingQueue
执行注册的 PermitPlugin 插件
5
根据配置文件构造调度器对象配置内容是:c.profiles
return &Scheduler
sched.assume
genericScheduler.Schedule
sched.bind
sched.addPodToCache
2
所有的配置信息
fwk.RunScorePlugins
fwk.RunPreBindPlugins
8
pkg/scheduler/framework/plugins
Setup
ReservePlugin
接口层
runCommand
sched.addNodeToCache
algo := NewGenericScheduler
addAllEventHandlers
fwk.RunPreFilterPlugins
9
根据配置文件构造调度器对象,并以name为索引加到map中
sched.NextPod()
合并默认的和自定义的调度插件
NewSchedulerCommand
默认实现frameworkImpl
scheduler.New
默认比较优先级和时间戳
SelectorSpread
Run
PostBindPlugin
numFeasibleNodesToFind
sched.Algorithm.Schedule
PercentageOfNodesToScore打分节点所占比例
为已调度pod注册处理函数
Pods().Informer().AddEventHandler
sched.SchedulingQueue.Run()
g.selectHost
实现拓扑分布
sched.Run
执行注册的 PreBindPlugin
执行调度算法开始调度
获取下一个待调度的pod
newProfile
.spec.schedulerName=xxx
frameworkplugins.NewInTreeRegistry()
Nodes().Informer().AddEventHandler
ScorePlugin
sched.scheduleOne
go func(){}
执行注册的 PostBindPlugin
只能enable一个实现用于堆排序时判断谁先被调度
TaintToleration
PreBindPlugin
registry.Merge(options.frameworkOutOfTreeRegistry)
插件层
m[cfg.SchedulerName] = p
7
3
VolumeBinding
profile.NewMap
fwk.RunReservePluginsReserve
执行注册的 BindPlugin
10
PrioritySort
fwk.RunPostFilterPlugins
internalqueue.NewSchedulingQueue
type Config struct
FilterPlugin
pkg/scheduler/scheduler.go
根据pod中指定的调度器名称获取调度器
cc.InformerFactory.Start
执行注册的 ReservePlugin 插件
fwk.RunPreScorePlugins
NewFramework
pkg/scheduler/framework/interface.go
Plugin
异步绑定 pod 到 host
每隔30s检查unscheduleQ里是否有pod可以放入activeQ
为未调度pod注册处理函数
QueueSortPlugin
PreFilterPlugin
每隔1s检查backoffQ里是否有pod可以放入activeQ
runtime.Registrymap[string]PluginFactory
cmd/kube-scheduler/app/server.go
fwk.RunBindPlugins
6
g.findNodesThatFitPod
main
调度入口层
configurator.create()
计算一次调度可返回的可用节点数,跟 percentageOfNodesToScore 参数强关联
New
0 条评论
下一页