kubernetes调度组件kube-scheduler源码分析

kubernetes调度组件kube-scheduler源码分析
1.调度流程图

2 默认调度算法介绍


3 数据结构

func  main() {

    runtime.GOMAXPROCS(runtime.NumCPU())

    s:=options.NewSchedulerServer()

    s.AddFlags(pflag.CommandLine)

    util.InitFlags()

    util.InitLogs()

    defer util.FlushLogs()

    verflag.PrintAndExitIfRequested()

    app.Run(s)

}

主函数首先构建并初始化schedulerserver结构体,下面来看看主要数据结构

调度可以分成两个部分,第一部分是调度算法部分,第二部分是调度执行部分。


genericScheduler 调度执行部分的数据结构


type genericScheduler struct{

    cacheschedulercache.Cache

    predicates map[string]algorithm.FitPredicate

    prioritizers []algorithm.PriorityConfig

    extenders []algorithm.SchedulerExtender

    pods algorithm.PodLister

    random *rand.Rand

    random Locksync.Mutex

    lastNodeIndex uint64

}

FitPredicate函数用来在Node中判断POD请求的资源是否满足需要。

type PriorityConfig struct{

    Function  PriorityFunction

    Weight  int

}

PriorityConfig结构体包括Function函数和Weight整型变量,Function函数用来表示预测算法,Weight变量用来表示预测算法权重。

genericSchedulerSchedule是负责调度的函数,里面用到了findNodesThatFitPrioritizeNodes两个函数。

4 执行流程

1、新建schedulerserver结构体


2、传入参数并初始化


run


1、通过kubeconfig创建kubeclient用于访问APIserver


2、创建htttpserver用于性能分析,性能指标度量


3、创建scheduler.config对象(定期获取已经调度的pod列表,并从modeler假定队列中删除。监控可用的node,获取service列表、


创建genericScheduler对象)


4run不停执行scheduleOne(获取下一个待调度的pod,具体由genericScheduler调度)


kubernetes调度通过结构体genericScheduler最后选取出了一个Node,但是在这个node上面创建pod的工作并没有做。 


5Binding,这个结构体的作用是建立将一个对象绑定到另一个对象的关系,比如在调度过程中将POD绑定到一个Node上,在这个

结构体中就是将ObjectMetaPOD)绑定到ObjectReferenceNode)上。

type Binding struct{

    unversioned.TypeMeta`json:",inline"`

    //ObjectMetadescribestheobjectthatisbeingbound.

    ObjectMeta`json:"metadata,omitempty"`

    //Targetistheobjecttobindto.

    TargetObjectReference`json:"target"`

}

在建立好PODNode的绑定关系后,执行bindAction函数

6、把调度结果放入假定调度队列中。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值