Skip to content

Commit 571cea0

Browse files
committed
Convert NodeLabelPresence custom predicate to filter plugin.
1 parent 2a1ac8b commit 571cea0

File tree

12 files changed

+336
-66
lines changed

12 files changed

+336
-66
lines changed

cmd/kube-scheduler/app/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ func runCommand(cmd *cobra.Command, args []string, opts *options.Options, regist
157157
}
158158

159159
// Run executes the scheduler based on the given configuration. It only returns on error or when context is done.
160-
func Run(ctx context.Context, cc schedulerserverconfig.CompletedConfig, registryOptions ...Option) error {
160+
func Run(ctx context.Context, cc schedulerserverconfig.CompletedConfig, outOfTreeRegistryOptions ...Option) error {
161161
// To help debugging, immediately log version
162162
klog.V(1).Infof("Starting Kubernetes Scheduler version %+v", version.Get())
163163

164164
outOfTreeRegistry := make(framework.Registry)
165-
for _, option := range registryOptions {
165+
for _, option := range outOfTreeRegistryOptions {
166166
if err := option(outOfTreeRegistry); err != nil {
167167
return err
168168
}

pkg/scheduler/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ go_library(
2222
"//pkg/scheduler/apis/config:go_default_library",
2323
"//pkg/scheduler/core:go_default_library",
2424
"//pkg/scheduler/framework/plugins:go_default_library",
25+
"//pkg/scheduler/framework/plugins/nodelabel:go_default_library",
2526
"//pkg/scheduler/framework/v1alpha1:go_default_library",
2627
"//pkg/scheduler/internal/cache:go_default_library",
2728
"//pkg/scheduler/internal/cache/debugger:go_default_library",
@@ -80,6 +81,7 @@ go_test(
8081
"//pkg/scheduler/apis/extender/v1:go_default_library",
8182
"//pkg/scheduler/core:go_default_library",
8283
"//pkg/scheduler/framework/plugins:go_default_library",
84+
"//pkg/scheduler/framework/plugins/nodelabel:go_default_library",
8385
"//pkg/scheduler/framework/v1alpha1:go_default_library",
8486
"//pkg/scheduler/internal/cache:go_default_library",
8587
"//pkg/scheduler/internal/cache/fake:go_default_library",

pkg/scheduler/algorithm_factory.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ import (
3232
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
3333
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
3434
schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
35+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins"
36+
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodelabel"
3537
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
3638
schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers"
3739
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
@@ -259,9 +261,10 @@ func RegisterFitPredicateFactory(name string, predicateFactory FitPredicateFacto
259261

260262
// RegisterCustomFitPredicate registers a custom fit predicate with the algorithm registry.
261263
// Returns the name, with which the predicate was registered.
262-
func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string {
264+
func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy, args *plugins.ConfigProducerArgs) string {
263265
var predicateFactory FitPredicateFactory
264266
var ok bool
267+
name := policy.Name
265268

266269
validatePredicateOrDie(policy)
267270

@@ -281,24 +284,31 @@ func RegisterCustomFitPredicate(policy schedulerapi.PredicatePolicy) string {
281284
return predicate
282285
}
283286
} else if policy.Argument.LabelsPresence != nil {
287+
// map LabelPresence policy to ConfigProducerArgs that's used to configure the NodeLabel plugin.
288+
args.NodeLabelArgs = &nodelabel.Args{
289+
Labels: policy.Argument.LabelsPresence.Labels,
290+
Presence: policy.Argument.LabelsPresence.Presence,
291+
}
284292
predicateFactory = func(args PluginFactoryArgs) predicates.FitPredicate {
285293
return predicates.NewNodeLabelPredicate(
286294
policy.Argument.LabelsPresence.Labels,
287295
policy.Argument.LabelsPresence.Presence,
288296
)
289297
}
298+
// We do not allow specifying the name for custom plugins, see #83472
299+
name = nodelabel.Name
290300
}
291301
} else if predicateFactory, ok = fitPredicateMap[policy.Name]; ok {
292302
// checking to see if a pre-defined predicate is requested
293303
klog.V(2).Infof("Predicate type %s already registered, reusing.", policy.Name)
294-
return policy.Name
304+
return name
295305
}
296306

297307
if predicateFactory == nil {
298308
klog.Fatalf("Invalid configuration: Predicate type not found for %s", policy.Name)
299309
}
300310

301-
return RegisterFitPredicateFactory(policy.Name, predicateFactory)
311+
return RegisterFitPredicateFactory(name, predicateFactory)
302312
}
303313

304314
// IsFitPredicateRegistered is useful for testing providers.

pkg/scheduler/api/compatibility/compatibility_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
9393
wantPredicates: sets.NewString(
9494
"PodFitsPorts",
9595
"TestServiceAffinity",
96-
"TestLabelsPresence",
9796
),
9897
wantPrioritizers: sets.NewString(
9998
"ServiceSpreadingPriority",
@@ -107,6 +106,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
107106
{Name: "NodeResourcesFit"},
108107
{Name: "VolumeRestrictions"},
109108
{Name: "TaintToleration"},
109+
{Name: "NodeLabel"},
110110
},
111111
"ScorePlugin": {
112112
{Name: "NodeResourcesLeastAllocated", Weight: 1},
@@ -139,7 +139,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
139139
}`,
140140
wantPredicates: sets.NewString(
141141
"TestServiceAffinity",
142-
"TestLabelsPresence",
143142
),
144143
wantPrioritizers: sets.NewString(
145144
"EqualPriority",
@@ -156,6 +155,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
156155
{Name: "NodeResourcesFit"},
157156
{Name: "VolumeRestrictions"},
158157
{Name: "TaintToleration"},
158+
{Name: "NodeLabel"},
159159
},
160160
"ScorePlugin": {
161161
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -195,7 +195,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
195195
}`,
196196
wantPredicates: sets.NewString(
197197
"TestServiceAffinity",
198-
"TestLabelsPresence",
199198
),
200199
wantPrioritizers: sets.NewString(
201200
"EqualPriority",
@@ -216,6 +215,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
216215
{Name: "GCEPDLimits"},
217216
{Name: "AzureDiskLimits"},
218217
{Name: "VolumeZone"},
218+
{Name: "NodeLabel"},
219219
},
220220
"ScorePlugin": {
221221
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -259,7 +259,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
259259
}`,
260260
wantPredicates: sets.NewString(
261261
"TestServiceAffinity",
262-
"TestLabelsPresence",
263262
),
264263
wantPrioritizers: sets.NewString(
265264
"EqualPriority",
@@ -280,6 +279,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
280279
{Name: "AzureDiskLimits"},
281280
{Name: "VolumeZone"},
282281
{Name: "InterPodAffinity"},
282+
{Name: "NodeLabel"},
283283
},
284284
"ScorePlugin": {
285285
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -326,7 +326,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
326326
}`,
327327
wantPredicates: sets.NewString(
328328
"TestServiceAffinity",
329-
"TestLabelsPresence",
330329
),
331330
wantPrioritizers: sets.NewString(
332331
"EqualPriority",
@@ -347,6 +346,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
347346
{Name: "AzureDiskLimits"},
348347
{Name: "VolumeZone"},
349348
{Name: "InterPodAffinity"},
349+
{Name: "NodeLabel"},
350350
},
351351
"ScorePlugin": {
352352
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -404,7 +404,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
404404
}`,
405405
wantPredicates: sets.NewString(
406406
"TestServiceAffinity",
407-
"TestLabelsPresence",
408407
),
409408
wantPrioritizers: sets.NewString(
410409
"EqualPriority",
@@ -425,6 +424,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
425424
{Name: "AzureDiskLimits"},
426425
{Name: "VolumeZone"},
427426
{Name: "InterPodAffinity"},
427+
{Name: "NodeLabel"},
428428
},
429429
"ScorePlugin": {
430430
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -493,7 +493,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
493493
}`,
494494
wantPredicates: sets.NewString(
495495
"TestServiceAffinity",
496-
"TestLabelsPresence",
497496
),
498497
wantPrioritizers: sets.NewString(
499498
"EqualPriority",
@@ -514,6 +513,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
514513
{Name: "AzureDiskLimits"},
515514
{Name: "VolumeZone"},
516515
{Name: "InterPodAffinity"},
516+
{Name: "NodeLabel"},
517517
},
518518
"ScorePlugin": {
519519
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -583,7 +583,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
583583
}`,
584584
wantPredicates: sets.NewString(
585585
"TestServiceAffinity",
586-
"TestLabelsPresence",
587586
),
588587
wantPrioritizers: sets.NewString(
589588
"EqualPriority",
@@ -605,6 +604,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
605604
{Name: "VolumeBinding"},
606605
{Name: "VolumeZone"},
607606
{Name: "InterPodAffinity"},
607+
{Name: "NodeLabel"},
608608
},
609609
"ScorePlugin": {
610610
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -677,7 +677,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
677677
}`,
678678
wantPredicates: sets.NewString(
679679
"TestServiceAffinity",
680-
"TestLabelsPresence",
681680
),
682681
wantPrioritizers: sets.NewString(
683682
"EqualPriority",
@@ -699,6 +698,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
699698
{Name: "VolumeBinding"},
700699
{Name: "VolumeZone"},
701700
{Name: "InterPodAffinity"},
701+
{Name: "NodeLabel"},
702702
},
703703
"ScorePlugin": {
704704
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -783,7 +783,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
783783
}`,
784784
wantPredicates: sets.NewString(
785785
"TestServiceAffinity",
786-
"TestLabelsPresence",
787786
),
788787
wantPrioritizers: sets.NewString(
789788
"EqualPriority",
@@ -806,6 +805,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
806805
{Name: "VolumeBinding"},
807806
{Name: "VolumeZone"},
808807
{Name: "InterPodAffinity"},
808+
{Name: "NodeLabel"},
809809
},
810810
"ScorePlugin": {
811811
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -891,7 +891,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
891891
}`,
892892
wantPredicates: sets.NewString(
893893
"TestServiceAffinity",
894-
"TestLabelsPresence",
895894
),
896895
wantPrioritizers: sets.NewString(
897896
"EqualPriority",
@@ -915,6 +914,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
915914
{Name: "VolumeBinding"},
916915
{Name: "VolumeZone"},
917916
{Name: "InterPodAffinity"},
917+
{Name: "NodeLabel"},
918918
},
919919
"ScorePlugin": {
920920
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -999,7 +999,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
999999
}`,
10001000
wantPredicates: sets.NewString(
10011001
"TestServiceAffinity",
1002-
"TestLabelsPresence",
10031002
),
10041003
wantPrioritizers: sets.NewString(
10051004
"EqualPriority",
@@ -1024,6 +1023,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
10241023
{Name: "VolumeBinding"},
10251024
{Name: "VolumeZone"},
10261025
{Name: "InterPodAffinity"},
1026+
{Name: "NodeLabel"},
10271027
},
10281028
"ScorePlugin": {
10291029
{Name: "NodeResourcesBalancedAllocation", Weight: 2},
@@ -1112,7 +1112,6 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
11121112
}`,
11131113
wantPredicates: sets.NewString(
11141114
"TestServiceAffinity",
1115-
"TestLabelsPresence",
11161115
),
11171116
wantPrioritizers: sets.NewString(
11181117
"EqualPriority",
@@ -1137,6 +1136,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
11371136
{Name: "VolumeBinding"},
11381137
{Name: "VolumeZone"},
11391138
{Name: "InterPodAffinity"},
1139+
{Name: "NodeLabel"},
11401140
},
11411141
"ScorePlugin": {
11421142
{Name: "NodeResourcesBalancedAllocation", Weight: 2},

0 commit comments

Comments
 (0)