Startup

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 CycleBinding 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.goSchedule() 函数流程如下:

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