kubernets学习

k8s源码学习 - Scheduler笔记(2)

2019-03-24  本文已影响0人  zoux

接上文的工作,上文是找到了scheduler的入口。接下来看scheduler具体的执行。

cmd/kube-scheduler/scheduler.go:34 main函数 ->
cmd/kube-scheduler/app/server.go:70 NewSchedulerCommand->
cmd/kube-scheduler/app/server.go:117 runCommand ->
cmd/kube-scheduler/app/server.go:167 Run ->
pkg/scheduler/scheduler.go:276 run ->
(这是上文的工作)

pkg/scheduler/scheduler.go:501 scheduleOne ->
pkg/scheduler/scheduler.go:291 schedule->
这里schedule只是一个街口,定义在 schedule/algorithm/interface中
pkg/scheduler/core/generic_scheduler.go:139 Schedule
(这一步是参考的,我具体是没有找出来,这里先存个疑,有机会补补接口这方面的知识)

func (g *genericScheduler) Schedule(pod *v1.Pod, nodeLister algorithm.NodeLister) (string, error) {
    nodes, err := nodeLister.List()
    trace.Step("Computing predicates")
    filteredNodes, failedPredicateMap, err := g.findNodesThatFit(pod, nodes)
    trace.Step("Prioritizing")
    priorityList, err := PrioritizeNodes(pod, g.cachedNodeInfoMap, metaPrioritiesInterface, g.prioritizers, filteredNodes, g.extenders)
    trace.Step("Selecting host")
    return g.selectHost(priorityList)
}

这是函数的主要内容,可以出来调度的顺序了。
先用findNodesThatFit删选出不合适的,然后PrioritizeNodes进行打分,最后selectHost选出来一个最好的。

findNodesThatFit,PrioritizeNodes,selectHost都在pkg/scheduler/core/generic_scheduler.go中。

上一篇 下一篇

猜你喜欢

热点阅读