diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index f615fbd8357..12d7908819c 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -189,9 +189,9 @@ func Run(ctx context.Context, cc schedulerserverconfig.CompletedConfig, outOfTre cc.InformerFactory, cc.PodInformer, cc.Recorder, - cc.ComponentConfig.AlgorithmSource, ctx.Done(), scheduler.WithName(cc.ComponentConfig.SchedulerName), + scheduler.WithAlgorithmSource(cc.ComponentConfig.AlgorithmSource), scheduler.WithHardPodAffinitySymmetricWeight(cc.ComponentConfig.HardPodAffinitySymmetricWeight), scheduler.WithPreemptionDisabled(cc.ComponentConfig.DisablePreemption), scheduler.WithPercentageOfNodesToScore(cc.ComponentConfig.PercentageOfNodesToScore), diff --git a/pkg/scheduler/apis/config/testing/compatibility_test.go b/pkg/scheduler/apis/config/testing/compatibility_test.go index 5fc6e1a39e7..443d795ea1c 100644 --- a/pkg/scheduler/apis/config/testing/compatibility_test.go +++ b/pkg/scheduler/apis/config/testing/compatibility_test.go @@ -1263,8 +1263,8 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { informerFactory, informerFactory.Core().V1().Pods(), nil, - algorithmSrc, make(chan struct{}), + scheduler.WithAlgorithmSource(algorithmSrc), ) if err != nil { diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index b2afd8d5154..726ba589178 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -132,6 +132,7 @@ func (sched *Scheduler) Cache() internalcache.Cache { type schedulerOptions struct { schedulerName string + schedulerAlgorithmSource schedulerapi.SchedulerAlgorithmSource hardPodAffinitySymmetricWeight int32 disablePreemption bool percentageOfNodesToScore int32 @@ -157,6 +158,13 @@ func WithName(schedulerName string) Option { } } +// WithAlgorithmSource sets schedulerAlgorithmSource for Scheduler, the default is a source with DefaultProvider. +func WithAlgorithmSource(source schedulerapi.SchedulerAlgorithmSource) Option { + return func(o *schedulerOptions) { + o.schedulerAlgorithmSource = source + } +} + // WithHardPodAffinitySymmetricWeight sets hardPodAffinitySymmetricWeight for Scheduler, the default value is 1 func WithHardPodAffinitySymmetricWeight(hardPodAffinitySymmetricWeight int32) Option { return func(o *schedulerOptions) { @@ -236,7 +244,10 @@ func WithPodMaxBackoffSeconds(podMaxBackoffSeconds int64) Option { } var defaultSchedulerOptions = schedulerOptions{ - schedulerName: v1.DefaultSchedulerName, + schedulerName: v1.DefaultSchedulerName, + schedulerAlgorithmSource: schedulerapi.SchedulerAlgorithmSource{ + Provider: defaultAlgorithmSourceProviderName(), + }, hardPodAffinitySymmetricWeight: v1.DefaultHardPodAffinitySymmetricWeight, disablePreemption: false, percentageOfNodesToScore: schedulerapi.DefaultPercentageOfNodesToScore, @@ -260,7 +271,6 @@ func New(client clientset.Interface, informerFactory informers.SharedInformerFactory, podInformer coreinformers.PodInformer, recorder events.EventRecorder, - schedulerAlgorithmSource schedulerapi.SchedulerAlgorithmSource, stopCh <-chan struct{}, opts ...Option) (*Scheduler, error) { @@ -326,7 +336,7 @@ func New(client clientset.Interface, PluginConfig: options.frameworkPluginConfig, }) var sched *Scheduler - source := schedulerAlgorithmSource + source := options.schedulerAlgorithmSource switch { case source.Provider != nil: // Create the config from a named algorithm provider. @@ -788,3 +798,8 @@ func (p *podPreemptorImpl) removeNominatedNodeName(pod *v1.Pod) error { } return p.setNominatedNodeName(pod, "") } + +func defaultAlgorithmSourceProviderName() *string { + provider := schedulerapi.SchedulerDefaultProviderName + return &provider +} diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index 9b4acb60ce6..d126204ada2 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -192,8 +192,8 @@ func TestSchedulerCreation(t *testing.T) { informerFactory, NewPodInformer(client, 0), eventBroadcaster.NewRecorder(scheme.Scheme, "scheduler"), - schedulerapi.SchedulerAlgorithmSource{Provider: &testSource}, stopCh, + WithAlgorithmSource(schedulerapi.SchedulerAlgorithmSource{Provider: &testSource}), WithPodInitialBackoffSeconds(1), WithPodMaxBackoffSeconds(10), ) diff --git a/test/integration/daemonset/BUILD b/test/integration/daemonset/BUILD index 9f3c55164f6..134bb5d8f39 100644 --- a/test/integration/daemonset/BUILD +++ b/test/integration/daemonset/BUILD @@ -21,7 +21,6 @@ go_test( "//pkg/controller/daemon:go_default_library", "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library", - "//pkg/scheduler/apis/config:go_default_library", "//pkg/util/labels:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/test/integration/daemonset/daemonset_test.go b/test/integration/daemonset/daemonset_test.go index 8841865e3b5..c8ce944ee45 100644 --- a/test/integration/daemonset/daemonset_test.go +++ b/test/integration/daemonset/daemonset_test.go @@ -47,7 +47,6 @@ import ( "k8s.io/kubernetes/pkg/controller/daemon" "k8s.io/kubernetes/pkg/scheduler" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" - schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" labelsutil "k8s.io/kubernetes/pkg/util/labels" "k8s.io/kubernetes/test/integration/framework" ) @@ -93,8 +92,6 @@ func setupScheduler( Interface: cs.EventsV1beta1().Events(""), }) - defaultProviderName := schedulerconfig.SchedulerDefaultProviderName - sched, err := scheduler.New( cs, informerFactory, @@ -103,9 +100,6 @@ func setupScheduler( legacyscheme.Scheme, v1.DefaultSchedulerName, ), - schedulerconfig.SchedulerAlgorithmSource{ - Provider: &defaultProviderName, - }, ctx.Done(), ) if err != nil { diff --git a/test/integration/scheduler/scheduler_test.go b/test/integration/scheduler/scheduler_test.go index f962c33a5fc..f24da7af021 100644 --- a/test/integration/scheduler/scheduler_test.go +++ b/test/integration/scheduler/scheduler_test.go @@ -272,16 +272,16 @@ priorities: [] informerFactory, scheduler.NewPodInformer(clientSet, 0), eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.DefaultSchedulerName), - kubeschedulerconfig.SchedulerAlgorithmSource{ + nil, + scheduler.WithName(v1.DefaultSchedulerName), + scheduler.WithAlgorithmSource(kubeschedulerconfig.SchedulerAlgorithmSource{ Policy: &kubeschedulerconfig.SchedulerPolicySource{ ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{ Namespace: policyConfigMap.Namespace, Name: policyConfigMap.Name, }, }, - }, - nil, - scheduler.WithName(v1.DefaultSchedulerName), + }), scheduler.WithHardPodAffinitySymmetricWeight(v1.DefaultHardPodAffinitySymmetricWeight), scheduler.WithBindTimeoutSeconds(defaultBindTimeout), ) @@ -335,16 +335,16 @@ func TestSchedulerCreationFromNonExistentConfigMap(t *testing.T) { informerFactory, scheduler.NewPodInformer(clientSet, 0), eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.DefaultSchedulerName), - kubeschedulerconfig.SchedulerAlgorithmSource{ + nil, + scheduler.WithName(v1.DefaultSchedulerName), + scheduler.WithAlgorithmSource(kubeschedulerconfig.SchedulerAlgorithmSource{ Policy: &kubeschedulerconfig.SchedulerPolicySource{ ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{ Namespace: "non-existent-config", Name: "non-existent-config", }, }, - }, - nil, - scheduler.WithName(v1.DefaultSchedulerName), + }), scheduler.WithHardPodAffinitySymmetricWeight(v1.DefaultHardPodAffinitySymmetricWeight), scheduler.WithBindTimeoutSeconds(defaultBindTimeout)) diff --git a/test/integration/scheduler/util.go b/test/integration/scheduler/util.go index 28b8fe46af5..68f44c89735 100644 --- a/test/integration/scheduler/util.go +++ b/test/integration/scheduler/util.go @@ -181,14 +181,8 @@ func initTestSchedulerWithOptions( legacyscheme.Scheme, v1.DefaultSchedulerName, ) - var algorithmSrc schedulerapi.SchedulerAlgorithmSource if policy != nil { - algorithmSrc = createAlgorithmSourceFromPolicy(policy, context.clientSet) - } else { - provider := schedulerapi.SchedulerDefaultProviderName - algorithmSrc = schedulerapi.SchedulerAlgorithmSource{ - Provider: &provider, - } + opts = append(opts, scheduler.WithAlgorithmSource(createAlgorithmSourceFromPolicy(policy, context.clientSet))) } opts = append([]scheduler.Option{scheduler.WithBindTimeoutSeconds(600)}, opts...) context.scheduler, err = scheduler.New( @@ -196,7 +190,6 @@ func initTestSchedulerWithOptions( context.informerFactory, podInformer, recorder, - algorithmSrc, context.ctx.Done(), opts..., ) diff --git a/test/integration/util/BUILD b/test/integration/util/BUILD index 5d045403012..57971e11b70 100644 --- a/test/integration/util/BUILD +++ b/test/integration/util/BUILD @@ -16,7 +16,6 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library", - "//pkg/scheduler/apis/config:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", diff --git a/test/integration/util/util.go b/test/integration/util/util.go index e274662eaac..bda61cb2a90 100644 --- a/test/integration/util/util.go +++ b/test/integration/util/util.go @@ -32,7 +32,6 @@ import ( // import DefaultProvider _ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults" - schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/test/integration/framework" ) @@ -99,16 +98,11 @@ func createScheduler( recorder events.EventRecorder, stopCh <-chan struct{}, ) (*scheduler.Scheduler, error) { - defaultProviderName := schedulerconfig.SchedulerDefaultProviderName - return scheduler.New( clientSet, informerFactory, podInformer, recorder, - schedulerconfig.SchedulerAlgorithmSource{ - Provider: &defaultProviderName, - }, stopCh, ) } diff --git a/test/integration/volumescheduling/BUILD b/test/integration/volumescheduling/BUILD index ce7ddf6405c..9df99b06142 100644 --- a/test/integration/volumescheduling/BUILD +++ b/test/integration/volumescheduling/BUILD @@ -59,7 +59,6 @@ go_library( "//pkg/api/v1/pod:go_default_library", "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library", - "//pkg/scheduler/apis/config: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", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/test/integration/volumescheduling/util.go b/test/integration/volumescheduling/util.go index 79c4935598e..2e32705fca3 100644 --- a/test/integration/volumescheduling/util.go +++ b/test/integration/volumescheduling/util.go @@ -37,7 +37,6 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/scheduler" - schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/test/integration/framework" // Install "DefaultProvider" algorithprovider @@ -142,16 +141,11 @@ func createSchedulerWithPodInformer( recorder events.EventRecorder, stopCh <-chan struct{}, ) (*scheduler.Scheduler, error) { - defaultProviderName := schedulerconfig.SchedulerDefaultProviderName - return scheduler.New( clientSet, informerFactory, podInformer, recorder, - schedulerconfig.SchedulerAlgorithmSource{ - Provider: &defaultProviderName, - }, stopCh, ) }