kubernetes scheduler源码阅读-- scheduler.New()的参数

scheduler.New() 定义在kubernetes/pkg/scheduler/scheduler.go 返回一个Scheduler type Scheduler struct { config *factory.Config } 首先先用New传过来的参数替换schedulerOptions默认配置 type schedulerOptions struct { // 调度器的名字,pod创建的时候可以根据这个名字选择使用哪个调度器,默认值"default-scheduler" schedulerName string // hardPodAffinitySymmetricWeight int32 disablePreemption bool percentageOfNodesToScore int32 bindTimeoutSeconds int64 } 然后调用factory.NewConfigFactory创建一个factory.Configurator,需要传入一个factory.ConfigFactoryArgs 还有个configFactory,这几个差不都都是参数传进来的几个值,具体还不知道干什么的。先看几个参数吧。 cc.InformerFactory.Core().V1().Nodes() 对应类型 nodeInformer coreinformers.NodeInformer 其中cc.InformerFactory在kubernetes/cmd/kube-scheduler/app/options/options.go中初始化: c.InformerFactory = informers.NewSharedInformerFactory(client, 0), 创建一个新的factory, 结构体主要为cc.client和informers map[reflect.Type]cache.SharedIndexInformer. Core()是New了一个新的group, 感觉还是啥没有,还是factory那几个值。 V1()是New了一个v1,返回一个version,还是哪几个值. Nodes() 传的还是那几个值,返回一个nodeInformer. 最重要的就是保留了factory,然后能够调用nodeInformer接口下的几个方法。后边用的吧。 nodeLister: args.NodeInformer.Lister(), 在NewConfigFactory()里创建configFactory的时候,调用了.Lister()方法。 func (f *nodeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { return NewFilteredNodeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) } func (f *nodeInformer) Informer() cache.SharedIndexInformer { return f.factory.InformerFor(&corev1.Node{}, f.defaultInformer) } func (f *nodeInformer) Lister() v1.NodeLister { return v1.NewNodeLister(f.Informer().GetIndexer()) } 调用太多,看代码最烦的就是调来调去,然后还有各种新数据定义,翻来翻去然后回不来了。。。 corev1.Node 这个里边应该都是返回的数据格式类型定义, 没细看。 看InformerFor里边defaultInformer是个真正调用的函数, InformerFor就是用来包装了一下 v1.NewNodeLister 看起来就是定义的restful api的请求。 看的有点细,其实这部分都是client-go里的,是封装的api请求,应该是分不同资源请求不同的interface cc.PodInformer 看这个应该比较重要 c.PodInformer = factory.NewPodInformer(client, 0) 用来返回non-terminal状态的pod configFactory其他初始化参数不看了,后边用到再看。

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply