Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scheduler: make algorithm source an option #85151

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/kube-scheduler/app/server.go
Expand Up @@ -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),
Expand Down
2 changes: 1 addition & 1 deletion pkg/scheduler/apis/config/testing/compatibility_test.go
Expand Up @@ -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 {
Expand Down
21 changes: 18 additions & 3 deletions pkg/scheduler/scheduler.go
Expand Up @@ -132,6 +132,7 @@ func (sched *Scheduler) Cache() internalcache.Cache {

type schedulerOptions struct {
schedulerName string
schedulerAlgorithmSource schedulerapi.SchedulerAlgorithmSource
hardPodAffinitySymmetricWeight int32
disablePreemption bool
percentageOfNodesToScore int32
Expand All @@ -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) {
Expand Down Expand Up @@ -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,
Expand All @@ -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) {

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -788,3 +798,8 @@ func (p *podPreemptorImpl) removeNominatedNodeName(pod *v1.Pod) error {
}
return p.setNominatedNodeName(pod, "")
}

func defaultAlgorithmSourceProviderName() *string {
provider := schedulerapi.SchedulerDefaultProviderName
return &provider
}
2 changes: 1 addition & 1 deletion pkg/scheduler/scheduler_test.go
Expand Up @@ -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),
)
Expand Down
1 change: 0 additions & 1 deletion test/integration/daemonset/BUILD
Expand Up @@ -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",
Expand Down
6 changes: 0 additions & 6 deletions test/integration/daemonset/daemonset_test.go
Expand Up @@ -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"
)
Expand Down Expand Up @@ -93,8 +92,6 @@ func setupScheduler(
Interface: cs.EventsV1beta1().Events(""),
})

defaultProviderName := schedulerconfig.SchedulerDefaultProviderName

sched, err := scheduler.New(
cs,
informerFactory,
Expand All @@ -103,9 +100,6 @@ func setupScheduler(
legacyscheme.Scheme,
v1.DefaultSchedulerName,
),
schedulerconfig.SchedulerAlgorithmSource{
Provider: &defaultProviderName,
},
ctx.Done(),
)
if err != nil {
Expand Down
16 changes: 8 additions & 8 deletions test/integration/scheduler/scheduler_test.go
Expand Up @@ -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),
)
Expand Down Expand Up @@ -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))

Expand Down
9 changes: 1 addition & 8 deletions test/integration/scheduler/util.go
Expand Up @@ -181,22 +181,15 @@ 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(
context.clientSet,
context.informerFactory,
podInformer,
recorder,
algorithmSrc,
context.ctx.Done(),
opts...,
)
Expand Down
1 change: 0 additions & 1 deletion test/integration/util/BUILD
Expand Up @@ -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",
Expand Down
6 changes: 0 additions & 6 deletions test/integration/util/util.go
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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,
)
}
1 change: 0 additions & 1 deletion test/integration/volumescheduling/BUILD
Expand Up @@ -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",
Expand Down
6 changes: 0 additions & 6 deletions test/integration/volumescheduling/util.go
Expand Up @@ -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
Expand Down Expand Up @@ -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,
)
}
Expand Down