func affinityPriorities() util.StringSet { return util.NewStringSet( "LeastRequestedPriority", "ServiceSpreadingPriority", // spreads pods belonging to the same service across minions in different zones factory.RegisterPriorityFunction("ZoneSpreadingPriority", algorithm.NewServiceAntiAffinityPriority(factory.ServiceLister, "zone"), 2), // Prioritize nodes based on the presence of the "zone" label on a minion, regardless of value. factory.RegisterPriorityFunction("NodeLabelPriority", algorithm.NewNodeLabelPriority("zone", true), 1), ) }
// Registers a custom priority function with the algorithm registry. // Returns the name, with which the priority function was registered. func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy) string { var pcf *PriorityConfigFactory validatePriorityOrDie(policy) // generate the priority function, if a custom priority is requested if policy.Argument != nil { if policy.Argument.ServiceAntiAffinity != nil { pcf = &PriorityConfigFactory{ Function: func(args PluginFactoryArgs) algorithm.PriorityFunction { return algorithm.NewServiceAntiAffinityPriority( args.ServiceLister, policy.Argument.ServiceAntiAffinity.Label, ) }, Weight: policy.Weight, } } else if policy.Argument.LabelPreference != nil { pcf = &PriorityConfigFactory{ Function: func(args PluginFactoryArgs) algorithm.PriorityFunction { return algorithm.NewNodeLabelPriority( policy.Argument.LabelPreference.Label, policy.Argument.LabelPreference.Presence, ) }, Weight: policy.Weight, } } } else if existing_pcf, ok := priorityFunctionMap[policy.Name]; ok { glog.V(2).Infof("Priority type %s already registered, reusing.", policy.Name) // set/update the weight based on the policy pcf = &PriorityConfigFactory{ Function: existing_pcf.Function, Weight: policy.Weight, } } if pcf == nil { glog.Fatalf("Invalid configuration: Priority type not found for %s", policy.Name) } return RegisterPriorityConfigFactory(policy.Name, *pcf) }