Kube Scheduler Startup #
由于 kube-scheduler 是项目中后期才拆分出来的,所以结构也相对简单。
启动时主要工作便是运行 scheduleOne
函数,从队列中不断地获取需要调度的 pod。
sequenceDiagram
participant main as cmd/kube-scheduler/scheduler.go
participant server as cmd/kube-scheduler/app/server.go
participant sched as pkg/scheduler/scheduler.go
participant q as pkg/scheduler/internal/queue/scheduling_queue.go
main-->>server: NewSchedulerCommand()
server-->>server: runCommand()
Setup()
Run()
server-->>sched: Run()
sched-->>q: Run()
par loop Cleaner
q-->>q: flushBackoffQCompleted()
q-->>q: flushUnschedulableQLeftover()
end
par loop Main
sched-->>sched: scheduleOne()
end
scheduleOne
函数主要工作就是从队列中提取 pod 的信息,然后执行
Scheduling Framework 中的 Scheduling Cycle
和 Binding Cycle
。
位于 pkg/scheduler/
下。
sequenceDiagram participant sched as scheduler.go participant algo as core/generic_scheduler.go participant f as framework/runtime/framework.go participant ex as framework/extender.go participant q as internal/queue/scheduling_queue.go sched-->>+q: NextPod() q-->>-sched: Pop(): *QueuedPodInfo Note right of sched: Scheduling Cycle sched-->>+algo: Schedule() algo-->>-sched: ScheduleResult sched-->>f: RunPostFilterPlugins() sched-->>f: RunReservePluginsReserve() sched-->>f: RunPermitPlugins() par Binding Note right of sched: Binding Cycle sched-->>f: WaitOnPermit() sched-->>f: RunPreBindPlugins() sched-->>+sched: bind() sched-->>+sched: extendersBinding() sched-->>+algo: Extenders() algo-->>-sched: []Extender sched-->>-ex: Bind() sched-->>-f: RunBindPlugins() sched-->>f: RunPostBindPlugins() end
其中,位于 core/generic_scheduler.go
的 Schedule()
函数流程如下:
sequenceDiagram participant sched as scheduler.go participant algo as core/generic_scheduler.go participant f as framework/runtime/framework.go participant ex as framework/extender.go sched-->>algo: Schedule() algo-->>+algo: findNodesThatFitPod() algo-->>f: RunPreFilterPlugins() algo->>+algo: findNodesThatPassFilters() algo-->>+algo: PodPassesFiltersOnNode() algo-->>-f: RunFilterPlugins() deactivate algo algo-->>+algo: findNodesThatPassExtenders() algo-->>-ex: Filter() deactivate algo algo-->>+algo: prioritizeNodes() algo-->>f: RunPreScorePlugins() algo-->>f: RunScorePlugins() deactivate algo algo-->>sched: ScheduleResult