105 - kube-scheduler源码分析 - predicate算法注册

一、predicate注册过程
今天我们来聊聊predicate函数是怎么被注册进去的,也就是要执行的一堆predicate是怎么成为“选中的孩子”。 代码位置:pkg/scheduler/factory/plugins.go:111




- name string
- predicateFactory FitPredicateFactory
- string


- 第一行:正则匹配判断name是否合法,规则是: "^[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])$"
- 第二行:fitPredicateMap的类型是map[string]FitPredicateFactory,一个包级变量;也就是把predicate的名字当做key,把一个以PluginFactoryArgs为参数,algorithm.FitPredicate为返回值的函数当做value.
二、ApplyFeatureGates入口
cmd/kube-scheduler/app/server.go:297 Run()这个函数中有这样一步:



三、defaults包
pkg\scheduler\algorithmprovider\defaults\defaults.go中的init()函数 init()函数前面调用了registerAlgorithmProvider函数,参数是defaultPredicates()和defaultPriorities(),明显是注册默认的predicates和priorities.我们先关注predicate默认有哪些 (pkg/scheduler/algorithmprovider/defaults/defaults.go:112):
- NoVolumeZoneConflictPred
- MaxEBSVolumeCountPred
- MaxGCEPDVolumeCountPred
- MaxAzureDiskVolumeCountPred
- MatchInterPodAffinityPred
- NoDiskConflictPred
- GeneralPred
- CheckNodeMemoryPressurePred
- CheckNodeDiskPressurePred
- CheckNodeConditionPred
- PodToleratesNodeTaintsPred
- CheckVolumeBindingPred
- PodFitsHostPorts -> predicates.PodFitsHostPorts
- PodFitsResources -> predicates.PodFitsResources
- HostName -> predicates.PodFitsHost
- MatchNodeSelector -> predicates.PodMatchNodeSelector










SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

更多精彩