diff --git a/pkg/scheduler/BUILD b/pkg/scheduler/BUILD index 6ee32ae6eea..e07a5de6507 100644 --- a/pkg/scheduler/BUILD +++ b/pkg/scheduler/BUILD @@ -14,7 +14,6 @@ go_library( "//pkg/features:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library", @@ -67,7 +66,6 @@ go_test( "//pkg/features:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library", "//pkg/scheduler/apis/extender/v1:go_default_library", diff --git a/pkg/scheduler/algorithm/priorities/BUILD b/pkg/scheduler/algorithm/priorities/BUILD index 9e2b1b96d1b..786a035a8db 100644 --- a/pkg/scheduler/algorithm/priorities/BUILD +++ b/pkg/scheduler/algorithm/priorities/BUILD @@ -1,29 +1,5 @@ package(default_visibility = ["//visibility:public"]) -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "metadata.go", - "priorities.go", - "reduce.go", - "types.go", - ], - importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities", - deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", - "//pkg/scheduler/listers:go_default_library", - "//pkg/scheduler/nodeinfo:go_default_library", - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/listers/apps/v1:go_default_library", - "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", - ], -) - filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/pkg/scheduler/algorithm/priorities/metadata.go b/pkg/scheduler/algorithm/priorities/metadata.go deleted file mode 100644 index ff439a3a190..00000000000 --- a/pkg/scheduler/algorithm/priorities/metadata.go +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package priorities - -import ( - v1 "k8s.io/api/core/v1" - appslisters "k8s.io/client-go/listers/apps/v1" - corelisters "k8s.io/client-go/listers/core/v1" - schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers" -) - -// MetadataFactory is a factory to produce PriorityMetadata. -type MetadataFactory struct { - serviceLister corelisters.ServiceLister - controllerLister corelisters.ReplicationControllerLister - replicaSetLister appslisters.ReplicaSetLister - statefulSetLister appslisters.StatefulSetLister -} - -// NewMetadataFactory creates a MetadataFactory. -func NewMetadataFactory( - serviceLister corelisters.ServiceLister, - controllerLister corelisters.ReplicationControllerLister, - replicaSetLister appslisters.ReplicaSetLister, - statefulSetLister appslisters.StatefulSetLister, -) MetadataProducer { - factory := &MetadataFactory{ - serviceLister: serviceLister, - controllerLister: controllerLister, - replicaSetLister: replicaSetLister, - statefulSetLister: statefulSetLister, - } - return factory.PriorityMetadata -} - -// priorityMetadata is a type that is passed as metadata for priority functions -type priorityMetadata struct{} - -// PriorityMetadata is a MetadataProducer. Node info can be nil. -func (pmf *MetadataFactory) PriorityMetadata( - pod *v1.Pod, - filteredNodes []*v1.Node, - sharedLister schedulerlisters.SharedLister, -) interface{} { - // If we cannot compute metadata, just return nil - if pod == nil { - return nil - } - return &priorityMetadata{} -} diff --git a/pkg/scheduler/algorithm/priorities/priorities.go b/pkg/scheduler/algorithm/priorities/priorities.go deleted file mode 100644 index 5c2d76b94de..00000000000 --- a/pkg/scheduler/algorithm/priorities/priorities.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package priorities - -const ( - // EqualPriority defines the name of prioritizer function that gives an equal weight of one to all nodes. - EqualPriority = "EqualPriority" - // MostRequestedPriority defines the name of prioritizer function that gives used nodes higher priority. - MostRequestedPriority = "MostRequestedPriority" - // RequestedToCapacityRatioPriority defines the name of RequestedToCapacityRatioPriority. - RequestedToCapacityRatioPriority = "RequestedToCapacityRatioPriority" - // SelectorSpreadPriority defines the name of prioritizer function that spreads pods by minimizing - // the number of pods (belonging to the same service or replication controller) on the same node. - SelectorSpreadPriority = "SelectorSpreadPriority" - // ServiceSpreadingPriority is largely replaced by "SelectorSpreadPriority". - ServiceSpreadingPriority = "ServiceSpreadingPriority" - // InterPodAffinityPriority defines the name of prioritizer function that decides which pods should or - // should not be placed in the same topological domain as some other pods. - InterPodAffinityPriority = "InterPodAffinityPriority" - // LeastRequestedPriority defines the name of prioritizer function that prioritize nodes by least - // requested utilization. - LeastRequestedPriority = "LeastRequestedPriority" - // BalancedResourceAllocation defines the name of prioritizer function that prioritizes nodes - // to help achieve balanced resource usage. - BalancedResourceAllocation = "BalancedResourceAllocation" - // NodePreferAvoidPodsPriority defines the name of prioritizer function that priorities nodes according to - // the node annotation "scheduler.alpha.kubernetes.io/preferAvoidPods". - NodePreferAvoidPodsPriority = "NodePreferAvoidPodsPriority" - // NodeAffinityPriority defines the name of prioritizer function that prioritizes nodes which have labels - // matching NodeAffinity. - NodeAffinityPriority = "NodeAffinityPriority" - // TaintTolerationPriority defines the name of prioritizer function that prioritizes nodes that marked - // with taint which pod can tolerate. - TaintTolerationPriority = "TaintTolerationPriority" - // ImageLocalityPriority defines the name of prioritizer function that prioritizes nodes that have images - // requested by the pod present. - ImageLocalityPriority = "ImageLocalityPriority" - // ResourceLimitsPriority defines the nodes of prioritizer function ResourceLimitsPriority. - ResourceLimitsPriority = "ResourceLimitsPriority" - // EvenPodsSpreadPriority defines the name of prioritizer function that prioritizes nodes - // which have pods and labels matching the incoming pod's topologySpreadConstraints. - EvenPodsSpreadPriority = "EvenPodsSpreadPriority" -) diff --git a/pkg/scheduler/algorithm/priorities/reduce.go b/pkg/scheduler/algorithm/priorities/reduce.go deleted file mode 100644 index b65c6f9b36e..00000000000 --- a/pkg/scheduler/algorithm/priorities/reduce.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package priorities - -import ( - "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" - schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers" -) - -// NormalizeReduce generates a PriorityReduceFunction that can normalize the result -// scores to [0, maxPriority]. If reverse is set to true, it reverses the scores by -// subtracting it from maxPriority. -func NormalizeReduce(maxPriority int64, reverse bool) PriorityReduceFunction { - return func( - _ *v1.Pod, - _ interface{}, - _ schedulerlisters.SharedLister, - result framework.NodeScoreList) error { - - var maxCount int64 - for i := range result { - if result[i].Score > maxCount { - maxCount = result[i].Score - } - } - - if maxCount == 0 { - if reverse { - for i := range result { - result[i].Score = maxPriority - } - } - return nil - } - - for i := range result { - score := result[i].Score - - score = maxPriority * score / maxCount - if reverse { - score = maxPriority - score - } - - result[i].Score = score - } - return nil - } -} diff --git a/pkg/scheduler/algorithm/priorities/types.go b/pkg/scheduler/algorithm/priorities/types.go deleted file mode 100644 index 6163ba0f530..00000000000 --- a/pkg/scheduler/algorithm/priorities/types.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package priorities - -import ( - v1 "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" - schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers" - schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" -) - -// PriorityMapFunction is a function that computes per-node results for a given node. -// TODO: Figure out the exact API of this method. -// TODO: Change interface{} to a specific type. -type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *schedulernodeinfo.NodeInfo) (framework.NodeScore, error) - -// PriorityReduceFunction is a function that aggregated per-node results and computes -// final scores for all nodes. -// TODO: Figure out the exact API of this method. -// TODO: Change interface{} to a specific type. -type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, sharedLister schedulerlisters.SharedLister, result framework.NodeScoreList) error - -// MetadataProducer is a function that computes metadata for a given pod. This -// is now used for only for priority functions. For predicates please use PredicateMetadataProducer. -type MetadataProducer func(pod *v1.Pod, filteredNodes []*v1.Node, sharedLister schedulerlisters.SharedLister) interface{} - -// PriorityConfig is a config used for a priority function. -type PriorityConfig struct { - Name string - Map PriorityMapFunction - Reduce PriorityReduceFunction - Weight int64 -} - -// EmptyMetadataProducer returns a no-op MetadataProducer type. -func EmptyMetadataProducer(pod *v1.Pod, filteredNodes []*v1.Node, sharedLister schedulerlisters.SharedLister) interface{} { - return nil -} diff --git a/pkg/scheduler/core/BUILD b/pkg/scheduler/core/BUILD index f0bdd9b442a..394a138fcea 100644 --- a/pkg/scheduler/core/BUILD +++ b/pkg/scheduler/core/BUILD @@ -11,10 +11,8 @@ go_library( deps = [ "//pkg/api/v1/pod:go_default_library", "//pkg/scheduler/algorithm:go_default_library", - "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/extender/v1:go_default_library", - "//pkg/scheduler/framework/plugins/migration:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", @@ -50,7 +48,6 @@ go_test( "//pkg/api/v1/pod:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/extender/v1:go_default_library", diff --git a/pkg/scheduler/core/extender_test.go b/pkg/scheduler/core/extender_test.go index 417c8680b7e..333333c6a75 100644 --- a/pkg/scheduler/core/extender_test.go +++ b/pkg/scheduler/core/extender_test.go @@ -34,7 +34,6 @@ import ( clientsetfake "k8s.io/client-go/kubernetes/fake" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/scheduler/algorithm" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" @@ -581,7 +580,6 @@ func TestGenericSchedulerWithExtenders(t *testing.T) { scheduler := NewGenericScheduler( cache, queue, - priorities.EmptyMetadataProducer, emptySnapshot, fwk, extenders, diff --git a/pkg/scheduler/core/generic_scheduler.go b/pkg/scheduler/core/generic_scheduler.go index ec0497fc650..b70341f4fd7 100644 --- a/pkg/scheduler/core/generic_scheduler.go +++ b/pkg/scheduler/core/generic_scheduler.go @@ -38,9 +38,7 @@ import ( "k8s.io/client-go/util/workqueue" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/scheduler/algorithm" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" @@ -138,8 +136,6 @@ type ScheduleResult struct { type genericScheduler struct { cache internalcache.Cache schedulingQueue internalqueue.SchedulingQueue - priorityMetaProducer priorities.MetadataProducer - prioritizers []priorities.PriorityConfig framework framework.Framework extenders []algorithm.SchedulerExtender nodeInfoSnapshot *nodeinfosnapshot.Snapshot @@ -231,8 +227,7 @@ func (g *genericScheduler) Schedule(ctx context.Context, state *framework.CycleS }, nil } - metaPrioritiesInterface := g.priorityMetaProducer(pod, filteredNodes, g.nodeInfoSnapshot) - priorityList, err := g.prioritizeNodes(ctx, state, pod, metaPrioritiesInterface, filteredNodes) + priorityList, err := g.prioritizeNodes(ctx, state, pod, filteredNodes) if err != nil { return result, err } @@ -252,12 +247,6 @@ func (g *genericScheduler) Schedule(ctx context.Context, state *framework.CycleS }, err } -// Prioritizers returns a slice containing all the scheduler's priority -// functions and their config. It is exposed for testing only. -func (g *genericScheduler) Prioritizers() []priorities.PriorityConfig { - return g.prioritizers -} - func (g *genericScheduler) Extenders() []algorithm.SchedulerExtender { return g.extenders } @@ -630,7 +619,6 @@ func (g *genericScheduler) prioritizeNodes( ctx context.Context, state *framework.CycleState, pod *v1.Pod, - meta interface{}, nodes []*v1.Node, ) (framework.NodeScoreList, error) { // If no priority configs are provided, then all nodes will have a score of one. @@ -647,7 +635,6 @@ func (g *genericScheduler) prioritizeNodes( } // Run the Score plugins. - state.Write(migration.PrioritiesStateKey, &migration.PrioritiesStateData{Reference: meta}) scoresMap, scoreStatus := g.framework.RunScorePlugins(ctx, state, pod, nodes) if !scoreStatus.IsSuccess() { return framework.NodeScoreList{}, scoreStatus.AsError() @@ -1096,7 +1083,6 @@ func podPassesBasicChecks(pod *v1.Pod, pvcLister corelisters.PersistentVolumeCla func NewGenericScheduler( cache internalcache.Cache, podQueue internalqueue.SchedulingQueue, - priorityMetaProducer priorities.MetadataProducer, nodeInfoSnapshot *nodeinfosnapshot.Snapshot, framework framework.Framework, extenders []algorithm.SchedulerExtender, @@ -1109,7 +1095,6 @@ func NewGenericScheduler( return &genericScheduler{ cache: cache, schedulingQueue: podQueue, - priorityMetaProducer: priorityMetaProducer, framework: framework, extenders: extenders, nodeInfoSnapshot: nodeInfoSnapshot, diff --git a/pkg/scheduler/core/generic_scheduler_test.go b/pkg/scheduler/core/generic_scheduler_test.go index 97b87912d6d..6f80cc89511 100644 --- a/pkg/scheduler/core/generic_scheduler_test.go +++ b/pkg/scheduler/core/generic_scheduler_test.go @@ -38,7 +38,6 @@ import ( clientsetfake "k8s.io/client-go/kubernetes/fake" "k8s.io/kubernetes/pkg/scheduler/algorithm" algorithmpredicates "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" @@ -784,7 +783,6 @@ func TestGenericScheduler(t *testing.T) { scheduler := NewGenericScheduler( cache, internalqueue.NewSchedulingQueue(nil), - priorities.EmptyMetadataProducer, snapshot, fwk, []algorithm.SchedulerExtender{}, @@ -828,7 +826,6 @@ func makeScheduler(nodes []*v1.Node, fns ...st.RegisterPluginFunc) *genericSched s := NewGenericScheduler( cache, internalqueue.NewSchedulingQueue(nil), - priorities.EmptyMetadataProducer, emptySnapshot, fwk, nil, nil, nil, nil, false, @@ -951,7 +948,6 @@ func TestFindFitPredicateCallCounts(t *testing.T) { scheduler := NewGenericScheduler( cache, queue, - priorities.EmptyMetadataProducer, emptySnapshot, fwk, nil, nil, nil, nil, false, @@ -1107,15 +1103,6 @@ func TestZeroRequest(t *testing.T) { snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes)) - metadataProducer := priorities.NewMetadataFactory( - informerFactory.Core().V1().Services().Lister(), - informerFactory.Core().V1().ReplicationControllers().Lister(), - informerFactory.Apps().V1().ReplicaSets().Lister(), - informerFactory.Apps().V1().StatefulSets().Lister(), - ) - - metadata := metadataProducer(test.pod, test.nodes, snapshot) - registry := framework.Registry{} plugins := &schedulerapi.Plugins{ Filter: &schedulerapi.PluginSet{}, @@ -1147,7 +1134,6 @@ func TestZeroRequest(t *testing.T) { scheduler := NewGenericScheduler( nil, nil, - metadataProducer, emptySnapshot, fwk, []algorithm.SchedulerExtender{}, @@ -1170,7 +1156,6 @@ func TestZeroRequest(t *testing.T) { ctx, state, test.pod, - metadata, test.nodes, ) if err != nil { @@ -1595,7 +1580,6 @@ func TestSelectNodesForPreemption(t *testing.T) { scheduler := NewGenericScheduler( nil, internalqueue.NewSchedulingQueue(nil), - priorities.EmptyMetadataProducer, snapshot, fwk, []algorithm.SchedulerExtender{}, @@ -2329,7 +2313,6 @@ func TestPreempt(t *testing.T) { scheduler := NewGenericScheduler( cache, internalqueue.NewSchedulingQueue(nil), - priorities.EmptyMetadataProducer, snapshot, fwk, extenders, diff --git a/pkg/scheduler/factory.go b/pkg/scheduler/factory.go index 8d4641ae33e..c3ca3677807 100644 --- a/pkg/scheduler/factory.go +++ b/pkg/scheduler/factory.go @@ -40,7 +40,6 @@ import ( kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" @@ -146,12 +145,6 @@ func (c *Configurator) create(extenders []algorithm.SchedulerExtender) (*Schedul algo := core.NewGenericScheduler( c.schedulerCache, podQueue, - priorities.NewMetadataFactory( - c.informerFactory.Core().V1().Services().Lister(), - c.informerFactory.Core().V1().ReplicationControllers().Lister(), - c.informerFactory.Apps().V1().ReplicaSets().Lister(), - c.informerFactory.Apps().V1().StatefulSets().Lister(), - ), c.nodeInfoSnapshot, framework, extenders, @@ -228,7 +221,7 @@ func (c *Configurator) createFromConfig(policy schedulerapi.Policy) (*Scheduler, priorityKeys = lr.DefaultPriorities } else { for _, priority := range policy.Priorities { - if priority.Name == priorities.EqualPriority { + if priority.Name == plugins.EqualPriority { klog.V(2).Infof("Skip registering priority: %s", priority.Name) continue } diff --git a/pkg/scheduler/framework/plugins/BUILD b/pkg/scheduler/framework/plugins/BUILD index 7c9aef33f53..8e4a20f0977 100644 --- a/pkg/scheduler/framework/plugins/BUILD +++ b/pkg/scheduler/framework/plugins/BUILD @@ -11,7 +11,6 @@ go_library( deps = [ "//pkg/features:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", - "//pkg/scheduler/algorithm/priorities:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/framework/plugins/defaultpodtopologyspread:go_default_library", "//pkg/scheduler/framework/plugins/imagelocality:go_default_library", diff --git a/pkg/scheduler/framework/plugins/legacy_registry.go b/pkg/scheduler/framework/plugins/legacy_registry.go index 7122c8382e2..095c098655e 100644 --- a/pkg/scheduler/framework/plugins/legacy_registry.go +++ b/pkg/scheduler/framework/plugins/legacy_registry.go @@ -26,7 +26,6 @@ import ( "k8s.io/klog" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality" @@ -47,6 +46,46 @@ import ( "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone" ) +const ( + // EqualPriority defines the name of prioritizer function that gives an equal weight of one to all nodes. + EqualPriority = "EqualPriority" + // MostRequestedPriority defines the name of prioritizer function that gives used nodes higher priority. + MostRequestedPriority = "MostRequestedPriority" + // RequestedToCapacityRatioPriority defines the name of RequestedToCapacityRatioPriority. + RequestedToCapacityRatioPriority = "RequestedToCapacityRatioPriority" + // SelectorSpreadPriority defines the name of prioritizer function that spreads pods by minimizing + // the number of pods (belonging to the same service or replication controller) on the same node. + SelectorSpreadPriority = "SelectorSpreadPriority" + // ServiceSpreadingPriority is largely replaced by "SelectorSpreadPriority". + ServiceSpreadingPriority = "ServiceSpreadingPriority" + // InterPodAffinityPriority defines the name of prioritizer function that decides which pods should or + // should not be placed in the same topological domain as some other pods. + InterPodAffinityPriority = "InterPodAffinityPriority" + // LeastRequestedPriority defines the name of prioritizer function that prioritize nodes by least + // requested utilization. + LeastRequestedPriority = "LeastRequestedPriority" + // BalancedResourceAllocation defines the name of prioritizer function that prioritizes nodes + // to help achieve balanced resource usage. + BalancedResourceAllocation = "BalancedResourceAllocation" + // NodePreferAvoidPodsPriority defines the name of prioritizer function that priorities nodes according to + // the node annotation "scheduler.alpha.kubernetes.io/preferAvoidPods". + NodePreferAvoidPodsPriority = "NodePreferAvoidPodsPriority" + // NodeAffinityPriority defines the name of prioritizer function that prioritizes nodes which have labels + // matching NodeAffinity. + NodeAffinityPriority = "NodeAffinityPriority" + // TaintTolerationPriority defines the name of prioritizer function that prioritizes nodes that marked + // with taint which pod can tolerate. + TaintTolerationPriority = "TaintTolerationPriority" + // ImageLocalityPriority defines the name of prioritizer function that prioritizes nodes that have images + // requested by the pod present. + ImageLocalityPriority = "ImageLocalityPriority" + // ResourceLimitsPriority defines the nodes of prioritizer function ResourceLimitsPriority. + ResourceLimitsPriority = "ResourceLimitsPriority" + // EvenPodsSpreadPriority defines the name of prioritizer function that prioritizes nodes + // which have pods and labels matching the incoming pod's topologySpreadConstraints. + EvenPodsSpreadPriority = "EvenPodsSpreadPriority" +) + // LegacyRegistry is used to store current state of registered predicates and priorities. type LegacyRegistry struct { // maps that associate predicates/priorities with framework plugin configurations. @@ -109,14 +148,14 @@ func NewLegacyRegistry() *LegacyRegistry { // Used as the default set of predicates if Policy was specified, but priorities was nil. DefaultPriorities: map[string]int64{ - priorities.SelectorSpreadPriority: 1, - priorities.InterPodAffinityPriority: 1, - priorities.LeastRequestedPriority: 1, - priorities.BalancedResourceAllocation: 1, - priorities.NodePreferAvoidPodsPriority: 10000, - priorities.NodeAffinityPriority: 1, - priorities.TaintTolerationPriority: 1, - priorities.ImageLocalityPriority: 1, + SelectorSpreadPriority: 1, + InterPodAffinityPriority: 1, + LeastRequestedPriority: 1, + BalancedResourceAllocation: 1, + NodePreferAvoidPodsPriority: 10000, + NodeAffinityPriority: 1, + TaintTolerationPriority: 1, + ImageLocalityPriority: 1, }, PredicateToConfigProducer: make(map[string]ConfigProducer), @@ -229,51 +268,51 @@ func NewLegacyRegistry() *LegacyRegistry { }) // Register Priorities. - registry.registerPriorityConfigProducer(priorities.SelectorSpreadPriority, + registry.registerPriorityConfigProducer(SelectorSpreadPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, defaultpodtopologyspread.Name, &args.Weight) plugins.PostFilter = appendToPluginSet(plugins.PostFilter, defaultpodtopologyspread.Name, nil) return }) - registry.registerPriorityConfigProducer(priorities.TaintTolerationPriority, + registry.registerPriorityConfigProducer(TaintTolerationPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.PostFilter = appendToPluginSet(plugins.PostFilter, tainttoleration.Name, nil) plugins.Score = appendToPluginSet(plugins.Score, tainttoleration.Name, &args.Weight) return }) - registry.registerPriorityConfigProducer(priorities.NodeAffinityPriority, + registry.registerPriorityConfigProducer(NodeAffinityPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, nodeaffinity.Name, &args.Weight) return }) - registry.registerPriorityConfigProducer(priorities.ImageLocalityPriority, + registry.registerPriorityConfigProducer(ImageLocalityPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, imagelocality.Name, &args.Weight) return }) - registry.registerPriorityConfigProducer(priorities.InterPodAffinityPriority, + registry.registerPriorityConfigProducer(InterPodAffinityPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.PostFilter = appendToPluginSet(plugins.PostFilter, interpodaffinity.Name, nil) plugins.Score = appendToPluginSet(plugins.Score, interpodaffinity.Name, &args.Weight) pluginConfig = append(pluginConfig, makePluginConfig(interpodaffinity.Name, args.InterPodAffinityArgs)) return }) - registry.registerPriorityConfigProducer(priorities.NodePreferAvoidPodsPriority, + registry.registerPriorityConfigProducer(NodePreferAvoidPodsPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, nodepreferavoidpods.Name, &args.Weight) return }) - registry.registerPriorityConfigProducer(priorities.MostRequestedPriority, + registry.registerPriorityConfigProducer(MostRequestedPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, noderesources.MostAllocatedName, &args.Weight) return }) - registry.registerPriorityConfigProducer(priorities.BalancedResourceAllocation, + registry.registerPriorityConfigProducer(BalancedResourceAllocation, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, noderesources.BalancedAllocationName, &args.Weight) return }) - registry.registerPriorityConfigProducer(priorities.LeastRequestedPriority, + registry.registerPriorityConfigProducer(LeastRequestedPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.Score = appendToPluginSet(plugins.Score, noderesources.LeastAllocatedName, &args.Weight) return @@ -320,26 +359,26 @@ func NewLegacyRegistry() *LegacyRegistry { }) registry.DefaultPredicates.Insert(predicates.EvenPodsSpreadPred) - registry.registerPriorityConfigProducer(priorities.EvenPodsSpreadPriority, + registry.registerPriorityConfigProducer(EvenPodsSpreadPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.PostFilter = appendToPluginSet(plugins.PostFilter, podtopologyspread.Name, nil) plugins.Score = appendToPluginSet(plugins.Score, podtopologyspread.Name, &args.Weight) return }) - registry.DefaultPriorities[priorities.EvenPodsSpreadPriority] = 1 + registry.DefaultPriorities[EvenPodsSpreadPriority] = 1 } // Prioritizes nodes that satisfy pod's resource limits if utilfeature.DefaultFeatureGate.Enabled(features.ResourceLimitsPriorityFunction) { klog.Infof("Registering resourcelimits priority function") - registry.registerPriorityConfigProducer(priorities.ResourceLimitsPriority, + registry.registerPriorityConfigProducer(ResourceLimitsPriority, func(args ConfigProducerArgs) (plugins config.Plugins, pluginConfig []config.PluginConfig) { plugins.PostFilter = appendToPluginSet(plugins.PostFilter, noderesources.ResourceLimitsName, nil) plugins.Score = appendToPluginSet(plugins.Score, noderesources.ResourceLimitsName, &args.Weight) return }) - registry.DefaultPriorities[priorities.ResourceLimitsPriority] = 1 + registry.DefaultPriorities[ResourceLimitsPriority] = 1 } return registry @@ -448,9 +487,9 @@ func (lr *LegacyRegistry) ProcessPriorityPolicy(policy config.PriorityPolicy, co validatePriorityOrDie(policy) priorityName := policy.Name - if policy.Name == priorities.ServiceSpreadingPriority { + if policy.Name == ServiceSpreadingPriority { // For compatibility reasons, "ServiceSpreadingPriority" as a key is still supported. - priorityName = priorities.SelectorSpreadPriority + priorityName = SelectorSpreadPriority } if _, ok := lr.PriorityToConfigProducer[priorityName]; ok { diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/BUILD b/pkg/scheduler/framework/plugins/serviceaffinity/BUILD index 7cb4f18ac63..d3fd46547ca 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/BUILD +++ b/pkg/scheduler/framework/plugins/serviceaffinity/BUILD @@ -22,13 +22,10 @@ go_test( srcs = ["service_affinity_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/algorithm/priorities:go_default_library", - "//pkg/scheduler/framework/plugins/migration:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/listers/fake:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/nodeinfo/snapshot:go_default_library", - "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", ], diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go index 028e5543f9a..96138c5f53e 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go @@ -22,11 +22,8 @@ import ( "sort" "testing" - apps "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" - "k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" fakelisters "k8s.io/kubernetes/pkg/scheduler/listers/fake" "k8s.io/kubernetes/pkg/scheduler/nodeinfo" @@ -382,11 +379,6 @@ func TestServiceAffinityScore(t *testing.T) { name: "three pods, two service pods, with rack label", }, } - // these local variables just make sure controllerLister\replicaSetLister\statefulSetLister not nil - // when construct metaDataProducer - sss := []*apps.StatefulSet{{Spec: apps.StatefulSetSpec{Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}} - rcs := []*v1.ReplicationController{{Spec: v1.ReplicationControllerSpec{Selector: map[string]string{"foo": "bar"}}}} - rss := []*apps.ReplicaSet{{Spec: apps.ReplicaSetSpec{Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}}}} for _, test := range tests { t.Run(test.name, func(t *testing.T) { @@ -401,14 +393,7 @@ func TestServiceAffinityScore(t *testing.T) { AntiAffinityLabelsPreference: test.labels, }, } - metaDataProducer := priorities.NewMetadataFactory( - fakelisters.ServiceLister(test.services), - fakelisters.ControllerLister(rcs), - fakelisters.ReplicaSetLister(rss), - fakelisters.StatefulSetLister(sss)) - metaData := metaDataProducer(test.pod, nodes, snapshot) state := framework.NewCycleState() - state.Write(migration.PrioritiesStateKey, &migration.PrioritiesStateData{Reference: metaData}) var gotList framework.NodeScoreList for _, n := range makeLabeledNodeList(test.nodes) { diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index d9617326c98..fa9159ca63c 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -45,7 +45,6 @@ import ( volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling" "k8s.io/kubernetes/pkg/scheduler/algorithm" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" - "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/core" frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" @@ -674,7 +673,6 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C algo := core.NewGenericScheduler( scache, internalqueue.NewSchedulingQueue(nil), - priorities.EmptyMetadataProducer, nodeinfosnapshot.NewEmptySnapshot(), fwk, []algorithm.SchedulerExtender{}, @@ -729,7 +727,6 @@ func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, sc algo := core.NewGenericScheduler( scache, queue, - priorities.EmptyMetadataProducer, nodeinfosnapshot.NewEmptySnapshot(), fwk, []algorithm.SchedulerExtender{},