Merge pull request #85151 from hypnoglow/scheduler-default-algo-source

scheduler: make algorithm source an option
This commit is contained in:
Kubernetes Prow Robot 2019-11-13 13:04:09 -08:00 committed by GitHub
commit 7d1580270a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 30 additions and 43 deletions

View File

@ -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),

View File

@ -1239,8 +1239,8 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
informerFactory,
informerFactory.Core().V1().Pods(),
nil,
algorithmSrc,
make(chan struct{}),
scheduler.WithAlgorithmSource(algorithmSrc),
)
if err != nil {

View File

@ -134,6 +134,7 @@ func (sched *Scheduler) Cache() internalcache.Cache {
type schedulerOptions struct {
schedulerName string
schedulerAlgorithmSource schedulerapi.SchedulerAlgorithmSource
hardPodAffinitySymmetricWeight int32
disablePreemption bool
percentageOfNodesToScore int32
@ -159,6 +160,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) {
@ -238,7 +246,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,
@ -262,7 +273,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) {
@ -325,7 +335,7 @@ func New(client clientset.Interface,
}
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
}

View File

@ -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),
)

View File

@ -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",

View File

@ -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 {

View File

@ -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))

View File

@ -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...,
)

View File

@ -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",

View File

@ -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,
)
}

View File

@ -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",

View File

@ -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,
)
}