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

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:{}]'