这篇文章将为大家详细讲解有关从源码层面解析kube-scheduler的默认配置是怎么做的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联建站是一家集网站建设,玉州企业网站建设,玉州品牌网站建设,网站定制,玉州网站建设报价,网络营销,网络优化,玉州网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
从头来看,在kube-scheduler的main函数中,s := options.NewSchedulerServer()创建SchedulerServer时,是按照默认参数创建的。
--- plugin/cmd/kube-scheduler/scheduler.go:30 ---
func main() {
s := options.NewSchedulerServer()
s.AddFlags(pflag.CommandLine)
flag.InitFlags()
logs.InitLogs()
defer logs.FlushLogs()
verflag.PrintAndExitIfRequested()
if err := app.Run(s); err != nil {
glog.Fatalf("scheduler app failed to run: %v", err)
}
}
--- plugin/cmd/kube-scheduler/app/options/options.go:44 ---
// NewSchedulerServer creates a new SchedulerServer with default parameters
func NewSchedulerServer() *SchedulerServer {
versioned := &v1alpha1.KubeSchedulerConfiguration{}
api.Scheme.Default(versioned)
cfg := componentconfig.KubeSchedulerConfiguration{}
api.Scheme.Convert(versioned, &cfg, nil)
cfg.LeaderElection.LeaderElect = true
s := SchedulerServer{
KubeSchedulerConfiguration: cfg,
}
return &s
}上面NewSchedulerServer中api.Scheme.Default(versioned)就是设置默认参数的操作。看看Default(...)的代码:
--- pkg/runtime/scheme.go:439 ---
// Default sets defaults on the provided Object.
func (s *Scheme) Default(src Object) {
if fn, ok := s.defaulterFuncs[reflect.TypeOf(src)]; ok {
fn(src)
}
}原来Default(...)做的工作就是从Scheme.defaulterFuncs这个Map中获取&v1alpha1.KubeSchedulerConfiguration{}这个type对应的defaultFunc fn,并执行fn(&v1alpha1.KubeSchedulerConfiguration{})来完成默认参数的配置。
OK,那么问题来了。这些type对应的defaultFunc是怎么register到Scheme.defaulterFuncs这个Map中的呢?
答案就在pkg/apis/componentconfig/v1alpha1/register.go中定义的全局变量SchemeBuilder。SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs)在创建SchemeBuilder时就调用了addDefaultFuncs函数。注册defaultFunc的工作应该就是在addDefaultingFuncs方法中实现的。
看看addDefaultingFuncs的实现,果不其然啊.SetDefaults_KubeSchedulerConfiguration就是&v1alpha1.KubeSchedulerConfiguration{}对应的defaultFuncs。
---- pkg/apis/componentconfig/v1alpha1/register.go ----
var (
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs)
AddToScheme = SchemeBuilder.AddToScheme
)
---- pkg/apis/componentconfig/v1alpha1/defaults.go -----
func addDefaultingFuncs(scheme *kruntime.Scheme) error {
RegisterDefaults(scheme)
return scheme.AddDefaultingFuncs(
SetDefaults_KubeProxyConfiguration,
SetDefaults_KubeSchedulerConfiguration,
SetDefaults_LeaderElectionConfiguration,
SetDefaults_KubeletConfiguration,
)
}
func SetDefaults_KubeSchedulerConfiguration(obj *KubeSchedulerConfiguration) {
if obj.Port == 0 {
obj.Port = ports.SchedulerPort
}
if obj.Address == "" {
obj.Address = "0.0.0.0"
}
if obj.AlgorithmProvider == "" {
obj.AlgorithmProvider = "DefaultProvider"
}
if obj.ContentType == "" {
obj.ContentType = "application/vnd.kubernetes.protobuf"
}
if obj.KubeAPIQPS == 0 {
obj.KubeAPIQPS = 50.0
}
if obj.KubeAPIBurst == 0 {
obj.KubeAPIBurst = 100
}
if obj.SchedulerName == "" {
obj.SchedulerName = api.DefaultSchedulerName
}
if obj.HardPodAffinitySymmetricWeight == 0 {
obj.HardPodAffinitySymmetricWeight = api.DefaultHardPodAffinitySymmetricWeight
}
if obj.FailureDomains == "" {
obj.FailureDomains = api.DefaultFailureDomains
}
}再结合plugin/cmd/kube-scheduler/app/options/options.go:57定义的AddFlags,可得kube-scheduler的默认配置如下:
port = 10251
address = "0.0.0.0"
algorithm-provider = "DefaultProvider"
content-type = "application/vnd.kubernetes.protobuf"
kube-api-qps = 50
kube-api-burst = 100
scheduler-name = "default-scheduler"
hard-pod-affinity-symmetric-weight = 1
failure-domains = "kubernetes.io/hostname,failure-domain.beta.kubernetes.io/zone,failure-domain.beta.kubernetes.io/region"
关于“从源码层面解析kube-scheduler的默认配置是怎么做的”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
文章标题:从源码层面解析kube-scheduler的默认配置是怎么做的
本文路径:http://www.jxjierui.cn/article/ppojph.html


咨询
建站咨询
