diff --git a/plugin/pkg/scheduler/algorithm/predicates/predicates.go b/plugin/pkg/scheduler/algorithm/predicates/predicates.go index cc2e219d4e7..7f2ce1f288b 100644 --- a/plugin/pkg/scheduler/algorithm/predicates/predicates.go +++ b/plugin/pkg/scheduler/algorithm/predicates/predicates.go @@ -812,7 +812,7 @@ func (c *PodAffinityChecker) InterPodAffinityMatches(pod *api.Pod, meta interfac return false, fmt.Errorf("node not found") } if !c.satisfiesExistingPodsAntiAffinity(pod, meta, node) { - return false, nil + return false, ErrPodAffinityNotMatch } // Now check if requirements will be satisfied on this node. @@ -824,7 +824,7 @@ func (c *PodAffinityChecker) InterPodAffinityMatches(pod *api.Pod, meta interfac return true, nil } if !c.satisfiesPodsAffinityAntiAffinity(pod, node, affinity) { - return false, nil + return false, ErrPodAffinityNotMatch } if glog.V(10) { diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go index f55f4827080..7ff6f75e303 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go @@ -93,24 +93,6 @@ func init() { factory.RegisterFitPredicate("HostName", predicates.PodFitsHost) // Fit is determined by node selector query. factory.RegisterFitPredicate("MatchNodeSelector", predicates.PodSelectorMatches) - // Fit is determined by inter-pod affinity. - factory.RegisterFitPredicateFactory( - "MatchInterPodAffinity", - func(args factory.PluginFactoryArgs) algorithm.FitPredicate { - return predicates.NewPodAffinityPredicate(args.NodeInfo, args.PodLister, args.FailureDomains) - }, - ) - //pods should be placed in the same topological domain (e.g. same node, same rack, same zone, same power domain, etc.) - //as some other pods, or, conversely, should not be placed in the same topological domain as some other pods. - factory.RegisterPriorityConfigFactory( - "InterPodAffinityPriority", - factory.PriorityConfigFactory{ - Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction { - return priorities.NewInterPodAffinityPriority(args.NodeInfo, args.NodeLister, args.PodLister, args.HardPodAffinitySymmetricWeight, args.FailureDomains) - }, - Weight: 1, - }, - ) } func defaultPredicates() sets.String { @@ -154,6 +136,14 @@ func defaultPredicates() sets.String { // Fit is determined by node disk pressure condition. factory.RegisterFitPredicate("CheckNodeDiskPressure", predicates.CheckNodeDiskPressurePredicate), + + // Fit is determined by inter-pod affinity. + factory.RegisterFitPredicateFactory( + "MatchInterPodAffinity", + func(args factory.PluginFactoryArgs) algorithm.FitPredicate { + return predicates.NewPodAffinityPredicate(args.NodeInfo, args.PodLister, args.FailureDomains) + }, + ), ) } @@ -186,5 +176,16 @@ func defaultPriorities() sets.String { ), factory.RegisterPriorityFunction("NodeAffinityPriority", priorities.CalculateNodeAffinityPriority, 1), factory.RegisterPriorityFunction("TaintTolerationPriority", priorities.ComputeTaintTolerationPriority, 1), + // pods should be placed in the same topological domain (e.g. same node, same rack, same zone, same power domain, etc.) + // as some other pods, or, conversely, should not be placed in the same topological domain as some other pods. + factory.RegisterPriorityConfigFactory( + "InterPodAffinityPriority", + factory.PriorityConfigFactory{ + Function: func(args factory.PluginFactoryArgs) algorithm.PriorityFunction { + return priorities.NewInterPodAffinityPriority(args.NodeInfo, args.NodeLister, args.PodLister, args.HardPodAffinitySymmetricWeight, args.FailureDomains) + }, + Weight: 1, + }, + ), ) } diff --git a/test/e2e/scheduler_predicates.go b/test/e2e/scheduler_predicates.go index dc5f2f82e21..71b82fbbf6f 100644 --- a/test/e2e/scheduler_predicates.go +++ b/test/e2e/scheduler_predicates.go @@ -976,7 +976,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() { framework.Logf("Sleeping 10 seconds and crossing our fingers that scheduler will run in that time.") time.Sleep(10 * time.Second) - verifyResult(c, labelPodName, 1, 1, ns) + verifyResult(c, labelPodName, 1, 0, ns) }) // test the pod affinity successful matching scenario with multiple Label Operators.