千家信息网

从源码层面解析kube-scheduler的默认配置是怎么做的

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章将为大家详细讲解有关从源码层面解析kube-scheduler的默认配置是怎么做的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。从头来看,在kube-sch
千家信息网最后更新 2025年12月02日从源码层面解析kube-scheduler的默认配置是怎么做的

这篇文章将为大家详细讲解有关从源码层面解析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 parametersfunc 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}

上面NewSchedulerServerapi.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的默认配置是怎么做的"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

配置 参数 就是 篇文章 层面 源码 函数 更多 工作 不错 实用 果不其然 从头 代码 全局 内容 变量 文章 方法 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全员培训学费多少 数据通讯与ip网络技术 专业目录网络技术与网络工程 服务器登录设置u盘登录 hp2000服务器更换硬盘配置 杨浦区常规软件开发定制大概费用 数据库脚本文件有什么用 数据库汉字乱码怎么 网络安全发生 湖北品质软件开发价格有哪些 服务器角色属于权限管理 大数据时代软件开发模式 两会期间网络安全工作情况 控制系统软件开发前途 计算机三级网络技术课堂 2年级网络安全小报1等奖 大学生计算机网络技术自学书籍 服务器多台如何管理 网络安全班会学校新闻稿 数据库压力测试视频 软件服务器出现问题应该怎么办 湘潭软件开发培训费用 服务器9f 生物信息数据库建立的原因 鼓动群众参加网络安全宣传 软件开发毕业证相当于几级证书 工控制网络安全 阿里云制作文件服务器 江苏有线网络技术服务套餐 英语加网络安全能到哪里就业
0