Skip to content

Commit 22a0f55

Browse files
committed
move NodeLabel priority logic to its Score plugin
1 parent 9fad2e3 commit 22a0f55

File tree

5 files changed

+28
-90
lines changed

5 files changed

+28
-90
lines changed

pkg/scheduler/algorithm/priorities/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ go_library(
1717
"metadata.go",
1818
"most_requested.go",
1919
"node_affinity.go",
20-
"node_label.go",
2120
"node_prefer_avoid_pods.go",
2221
"priorities.go",
2322
"reduce.go",

pkg/scheduler/algorithm/priorities/node_label.go

Lines changed: 0 additions & 70 deletions
This file was deleted.

pkg/scheduler/algorithm_factory.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -399,10 +399,7 @@ func RegisterCustomPriorityFunction(policy schedulerapi.PriorityPolicy, configPr
399399
schedulerFactoryMutex.RUnlock()
400400
pcf = &PriorityConfigFactory{
401401
MapReduceFunction: func(_ AlgorithmFactoryArgs) (priorities.PriorityMapFunction, priorities.PriorityReduceFunction) {
402-
return priorities.NewNodeLabelPriority(
403-
configProducerArgs.NodeLabelArgs.PresentLabelsPreference,
404-
configProducerArgs.NodeLabelArgs.AbsentLabelsPreference,
405-
)
402+
return nil, nil
406403
},
407404
Weight: weight,
408405
}

pkg/scheduler/framework/plugins/nodelabel/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ go_library(
77
visibility = ["//visibility:public"],
88
deps = [
99
"//pkg/scheduler/algorithm/predicates:go_default_library",
10-
"//pkg/scheduler/algorithm/priorities:go_default_library",
1110
"//pkg/scheduler/framework/plugins/migration:go_default_library",
1211
"//pkg/scheduler/framework/v1alpha1:go_default_library",
1312
"//pkg/scheduler/nodeinfo:go_default_library",
1413
"//staging/src/k8s.io/api/core/v1:go_default_library",
14+
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
1515
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
1616
],
1717
)

pkg/scheduler/framework/plugins/nodelabel/node_label.go

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import (
2121
"fmt"
2222

2323
v1 "k8s.io/api/core/v1"
24+
"k8s.io/apimachinery/pkg/labels"
2425
"k8s.io/apimachinery/pkg/runtime"
2526
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
26-
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
2727
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
2828
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2929
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
@@ -60,8 +60,8 @@ func validateNoConflict(presentLabels []string, absentLabels []string) error {
6060

6161
// New initializes a new plugin and returns it.
6262
func New(plArgs *runtime.Unknown, handle framework.FrameworkHandle) (framework.Plugin, error) {
63-
args := &Args{}
64-
if err := framework.DecodeInto(plArgs, args); err != nil {
63+
args := Args{}
64+
if err := framework.DecodeInto(plArgs, &args); err != nil {
6565
return nil, err
6666
}
6767
if err := validateNoConflict(args.PresentLabels, args.AbsentLabels); err != nil {
@@ -70,20 +70,18 @@ func New(plArgs *runtime.Unknown, handle framework.FrameworkHandle) (framework.P
7070
if err := validateNoConflict(args.PresentLabelsPreference, args.AbsentLabelsPreference); err != nil {
7171
return nil, err
7272
}
73-
// Note that the reduce function is always nil therefore it's ignored.
74-
prioritize, _ := priorities.NewNodeLabelPriority(args.PresentLabelsPreference, args.AbsentLabelsPreference)
7573
return &NodeLabel{
76-
handle: handle,
77-
predicate: predicates.NewNodeLabelPredicate(args.PresentLabels, args.AbsentLabels),
78-
prioritize: prioritize,
74+
handle: handle,
75+
predicate: predicates.NewNodeLabelPredicate(args.PresentLabels, args.AbsentLabels),
76+
Args: args,
7977
}, nil
8078
}
8179

8280
// NodeLabel checks whether a pod can fit based on the node labels which match a filter that it requests.
8381
type NodeLabel struct {
84-
handle framework.FrameworkHandle
85-
predicate predicates.FitPredicate
86-
prioritize priorities.PriorityMapFunction
82+
handle framework.FrameworkHandle
83+
predicate predicates.FitPredicate
84+
Args
8785
}
8886

8987
var _ framework.FilterPlugin = &NodeLabel{}
@@ -107,9 +105,23 @@ func (pl *NodeLabel) Score(ctx context.Context, state *framework.CycleState, pod
107105
if err != nil {
108106
return 0, framework.NewStatus(framework.Error, fmt.Sprintf("getting node %q from Snapshot: %v", nodeName, err))
109107
}
110-
// Note that node label priority function doesn't use metadata, hence passing nil here.
111-
s, err := pl.prioritize(pod, nil, nodeInfo)
112-
return s.Score, migration.ErrorToFrameworkStatus(err)
108+
109+
node := nodeInfo.Node()
110+
score := int64(0)
111+
for _, label := range pl.PresentLabelsPreference {
112+
if labels.Set(node.Labels).Has(label) {
113+
score += framework.MaxNodeScore
114+
}
115+
}
116+
for _, label := range pl.AbsentLabelsPreference {
117+
if !labels.Set(node.Labels).Has(label) {
118+
score += framework.MaxNodeScore
119+
}
120+
}
121+
// Take average score for each label to ensure the score doesn't exceed MaxNodeScore.
122+
score /= int64(len(pl.PresentLabelsPreference) + len(pl.AbsentLabelsPreference))
123+
124+
return score, nil
113125
}
114126

115127
// ScoreExtensions of the Score plugin.

0 commit comments

Comments
 (0)