Config
https://sourcegraph.com/github.com/kubernetes/[email protected]/-/blob/pkg/scheduler/api/v1/types.go#L31
{
"kind" : "Policy",
"apiVersion" : "v1",
"extenders" : [
{
"urlPrefix": "http://127.0.0.1:3456/scheduler",
"filterVerb": "predicates",
"enableHttps": false,
"nodeCacheCapable": false,
"managedResources": [{
"name": "tencent.com/vcuda-core",
"ignoredByScheduler": false
}, {
"name": "tencent.com/vcuda-memory",
"ignoredByScheduler": false
}]
}
],
"hardPodAffinitySymmetricWeight" : 10,
"alwaysCheckAllPredicates" : false
}Scheduling
谁调用 MakeNextPod, 然后调 schedulerOne? scheduling_queue.go:815] About to try and schedule pod default/engine-static-feature-db-worker-p4-3-0 https://sourcegraph.com/github.com/kubernetes/[email protected]/-/blob/pkg/scheduler/internal/queue/scheduling_queue.go#L811
scheduler.go:456] Attempting to schedule pod: default/engine-static-feature-db-worker-p4-3-0 https://sourcegraph.com/github.com/kubernetes/[email protected]/-/blob/pkg/scheduler/scheduler.go#L442
sched.schedule https://sourcegraph.com/github.com/kubernetes/[email protected]/-/blob/pkg/scheduler/scheduler.go#L283
sched.config.Algorithm.Schedule(pod, sched.config.NodeLister)
- scheduler.algorithm = NewGenericScheduler -> genericScheduler
sched.config.NodeLister = core node lister
genericScheduler.Schedule
genericScheduler.findNodesThatFit
- genericScheduler.predicates(自带 predicates) len == 0 -> all
否则
- numNodesToFind = numFeasibleNodesToFind 目标个数,到这个数就不找了
checkNode 塞到 ParallelizeUntil -> 16 个 worker 处理所有 node
podFitsOnNode
extenders(目前是 HTTP Extenders: https://sourcegraph.com/github.com/kubernetes/[email protected]/-/blob/pkg/scheduler/core/extender.go#L42:6)
- h.managedResources.Len() == 0 { return true } && if h.hasManagedResources { return true }
- extender.IsIgnorable() 当 http extender 返回 err, 如果 ignorable, 就 ignore, 否则返回空列表
new scheduler
provider: GetAlgorithmProvider -> CreateFromKeys -> NewGenericScheduler policy: CreateFromConfig -> CreateFromKeys -> core.NewGenericScheduler
policy(file,cm)读取文件内容方式不同
- initPolicyFromFile(source.Policy.File.Path, policy);
- initPolicyFromConfigMap(client, source.Policy.ConfigMap, policy);
policy schedulerapi.ExtenderConfig:
struct {
URLPrefix string
FilterVerb string
PreemptVerb string
PrioritizeVerb string
Weight int
BindVerb string
EnableHTTPS bool
TLSConfig *ExtenderTLSConfig
HTTPTimeout Duration
NodeCacheCapable bool
ManagedResources []ExtenderManagedResource
Ignorable bool
}scheduler.algorithm = NewGenericScheduler -> genericScheduler
CreateFromConfig:
if policy.Predicates == nil
- klog.V(2).Infof("Using predicates from algorithm provider '%v'", DefaultProvider)
if policy.Priorities == nil {
- klog.V(2).Infof("Using priorities from algorithm provider '%v'", DefaultProvider)
for ii := range policy.ExtenderConfigs {
- klog.V(2).Infof("Creating extender with config %+v", policy.ExtenderConfigs[ii])
- extender, err := core.NewHTTPExtender(&policy.ExtenderConfigs[ii])
if !extender.IsIgnorable() :
- 有一个 ignorable 列表,在 extender 列表最后,
- 有一个 ignoredExtendedResources 列表
for _, r := range policy.ExtenderConfigs[ii].ManagedResources {
if r.IgnoredByScheduler {
- ignoredExtendedResources.Insert(string(r.Name))
默认: predicates 'map[CheckNodeUnschedulable:{} CheckVolumeBinding:{} GeneralPredicates:{} MatchInterPodAffinity:{} MaxAzureDiskVolumeCount:{} MaxCSIVolumeCountPred:{} MaxEBSVolumeCount:{} MaxGCEPDVolumeCount:{} NoDiskConflict:{} NoVolumeZoneConflict:{} PodToleratesNodeTaints:{}]' and priority functions 'map[BalancedResourceAllocation:{} ImageLocalityPriority:{} InterPodAffinityPriority:{} LeastRequestedPriority:{} NodeAffinityPriority:{} NodePreferAvoidPodsPriority:{} SelectorSpreadPriority:{} TaintTolerationPriority:{}]'