代码读的master上最新的 1641ff411.
命令入口文件在kubernetes/cmd/kube-scheduler/scheduler.go
主要就两句,设置启动参数。其他的设置命令行参数和日志打印。具体不看了
command := app.NewSchedulerCommand()
command.Execute();
NewSchedulerCommand 在文件kubernetes/cmd/kube-scheduler/app/server.go
很多代码都是设置scheduler命令参数的,也是用的cobra这个库,跟docker是一样的。
opts, err := options.NewOptions() 读取默认配置
runCommand()执行命令
runCommand 比较有用的几行:
c, err := opts.Config()
这里边东西比较多,比如初始化kube-client与api交互,eventclient,选举相关的配置。没仔细看,代码在kubernetes/cmd/kube-scheduler/app/options/options.go
cc := c.Complete()
stopCh := make(chan struct{}) 这个channel传入了Run函数,Run只会在报异常或者这个channel关闭的时候返回
是用来配合context提示go协程退出的
函数最后调用return Run(cc, stopCh)
Run()
生成一个新的scheduler, sched, err := scheduler.New()
后边启动了事件传输,监控选举的,还有监控和指标收集的,这个先不看了。
再后边就是stopChannel配合context管理协程,还有一个leader选举的功能,是通过cc.LeaderElection参数来控制的.
leader选举功能开启是为了高可用的时候使用
无论是否leader选举,最后都进入sched.Run()
上一篇: ubuntu 16.04下安装微信开发者工具不能编译的问题
下一篇: kubernetes scheduler源码阅读-- scheduler.New()的参数
0 Responses so far.