@@ -21,9 +21,9 @@ import (
21
21
"fmt"
22
22
23
23
v1 "k8s.io/api/core/v1"
24
+ "k8s.io/apimachinery/pkg/labels"
24
25
"k8s.io/apimachinery/pkg/runtime"
25
26
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
26
- "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
27
27
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
28
28
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
29
29
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
@@ -60,8 +60,8 @@ func validateNoConflict(presentLabels []string, absentLabels []string) error {
60
60
61
61
// New initializes a new plugin and returns it.
62
62
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 {
65
65
return nil , err
66
66
}
67
67
if err := validateNoConflict (args .PresentLabels , args .AbsentLabels ); err != nil {
@@ -70,20 +70,18 @@ func New(plArgs *runtime.Unknown, handle framework.FrameworkHandle) (framework.P
70
70
if err := validateNoConflict (args .PresentLabelsPreference , args .AbsentLabelsPreference ); err != nil {
71
71
return nil , err
72
72
}
73
- // Note that the reduce function is always nil therefore it's ignored.
74
- prioritize , _ := priorities .NewNodeLabelPriority (args .PresentLabelsPreference , args .AbsentLabelsPreference )
75
73
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 ,
79
77
}, nil
80
78
}
81
79
82
80
// NodeLabel checks whether a pod can fit based on the node labels which match a filter that it requests.
83
81
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
87
85
}
88
86
89
87
var _ framework.FilterPlugin = & NodeLabel {}
@@ -107,9 +105,23 @@ func (pl *NodeLabel) Score(ctx context.Context, state *framework.CycleState, pod
107
105
if err != nil {
108
106
return 0 , framework .NewStatus (framework .Error , fmt .Sprintf ("getting node %q from Snapshot: %v" , nodeName , err ))
109
107
}
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
113
125
}
114
126
115
127
// ScoreExtensions of the Score plugin.
0 commit comments