func affinityPredicates() util.StringSet { return util.NewStringSet( "HostName", "MatchNodeSelector", "PodFitsPorts", "PodFitsResources", "NoDiskConflict", // Ensures that all pods within the same service are hosted on minions within the same region as defined by the "region" label factory.RegisterFitPredicate("ServiceAffinity", algorithm.NewServiceAffinityPredicate(factory.PodLister, factory.ServiceLister, factory.MinionLister, []string{"region"})), // Fit is defined based on the presence of the "region" label on a minion, regardless of value. factory.RegisterFitPredicate("NodeLabelPredicate", algorithm.NewNodeLabelPredicate(factory.MinionLister, []string{"region"}, true)), ) }
// Registers a custom fit predicate with the algorithm registry. // Returns the name, with which the predicate was registered. func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string { var predicateFactory FitPredicateFactory var ok bool validatePredicateOrDie(policy) // generate the predicate function, if a custom type is requested if policy.Argument != nil { if policy.Argument.ServiceAffinity != nil { predicateFactory = func(args PluginFactoryArgs) algorithm.FitPredicate { return algorithm.NewServiceAffinityPredicate( args.PodLister, args.ServiceLister, args.NodeInfo, policy.Argument.ServiceAffinity.Labels, ) } } else if policy.Argument.LabelsPresence != nil { predicateFactory = func(args PluginFactoryArgs) algorithm.FitPredicate { return algorithm.NewNodeLabelPredicate( args.NodeInfo, policy.Argument.LabelsPresence.Labels, policy.Argument.LabelsPresence.Presence, ) } } } else if predicateFactory, ok = fitPredicateMap[policy.Name]; ok { // checking to see if a pre-defined predicate is requested glog.V(2).Infof("Predicate type %s already registered, reusing.", policy.Name) } if predicateFactory == nil { glog.Fatalf("Invalid configuration: Predicate type not found for %s", policy.Name) } return RegisterFitPredicateFactory(policy.Name, predicateFactory) }