mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 15:05:27 +00:00
Merge pull request #85151 from hypnoglow/scheduler-default-algo-source
scheduler: make algorithm source an option
This commit is contained in:
commit
7d1580270a
@ -189,9 +189,9 @@ func Run(ctx context.Context, cc schedulerserverconfig.CompletedConfig, outOfTre
|
|||||||
cc.InformerFactory,
|
cc.InformerFactory,
|
||||||
cc.PodInformer,
|
cc.PodInformer,
|
||||||
cc.Recorder,
|
cc.Recorder,
|
||||||
cc.ComponentConfig.AlgorithmSource,
|
|
||||||
ctx.Done(),
|
ctx.Done(),
|
||||||
scheduler.WithName(cc.ComponentConfig.SchedulerName),
|
scheduler.WithName(cc.ComponentConfig.SchedulerName),
|
||||||
|
scheduler.WithAlgorithmSource(cc.ComponentConfig.AlgorithmSource),
|
||||||
scheduler.WithHardPodAffinitySymmetricWeight(cc.ComponentConfig.HardPodAffinitySymmetricWeight),
|
scheduler.WithHardPodAffinitySymmetricWeight(cc.ComponentConfig.HardPodAffinitySymmetricWeight),
|
||||||
scheduler.WithPreemptionDisabled(cc.ComponentConfig.DisablePreemption),
|
scheduler.WithPreemptionDisabled(cc.ComponentConfig.DisablePreemption),
|
||||||
scheduler.WithPercentageOfNodesToScore(cc.ComponentConfig.PercentageOfNodesToScore),
|
scheduler.WithPercentageOfNodesToScore(cc.ComponentConfig.PercentageOfNodesToScore),
|
||||||
|
@ -1239,8 +1239,8 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
|
|||||||
informerFactory,
|
informerFactory,
|
||||||
informerFactory.Core().V1().Pods(),
|
informerFactory.Core().V1().Pods(),
|
||||||
nil,
|
nil,
|
||||||
algorithmSrc,
|
|
||||||
make(chan struct{}),
|
make(chan struct{}),
|
||||||
|
scheduler.WithAlgorithmSource(algorithmSrc),
|
||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -134,6 +134,7 @@ func (sched *Scheduler) Cache() internalcache.Cache {
|
|||||||
|
|
||||||
type schedulerOptions struct {
|
type schedulerOptions struct {
|
||||||
schedulerName string
|
schedulerName string
|
||||||
|
schedulerAlgorithmSource schedulerapi.SchedulerAlgorithmSource
|
||||||
hardPodAffinitySymmetricWeight int32
|
hardPodAffinitySymmetricWeight int32
|
||||||
disablePreemption bool
|
disablePreemption bool
|
||||||
percentageOfNodesToScore int32
|
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
|
// WithHardPodAffinitySymmetricWeight sets hardPodAffinitySymmetricWeight for Scheduler, the default value is 1
|
||||||
func WithHardPodAffinitySymmetricWeight(hardPodAffinitySymmetricWeight int32) Option {
|
func WithHardPodAffinitySymmetricWeight(hardPodAffinitySymmetricWeight int32) Option {
|
||||||
return func(o *schedulerOptions) {
|
return func(o *schedulerOptions) {
|
||||||
@ -238,7 +246,10 @@ func WithPodMaxBackoffSeconds(podMaxBackoffSeconds int64) Option {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var defaultSchedulerOptions = schedulerOptions{
|
var defaultSchedulerOptions = schedulerOptions{
|
||||||
schedulerName: v1.DefaultSchedulerName,
|
schedulerName: v1.DefaultSchedulerName,
|
||||||
|
schedulerAlgorithmSource: schedulerapi.SchedulerAlgorithmSource{
|
||||||
|
Provider: defaultAlgorithmSourceProviderName(),
|
||||||
|
},
|
||||||
hardPodAffinitySymmetricWeight: v1.DefaultHardPodAffinitySymmetricWeight,
|
hardPodAffinitySymmetricWeight: v1.DefaultHardPodAffinitySymmetricWeight,
|
||||||
disablePreemption: false,
|
disablePreemption: false,
|
||||||
percentageOfNodesToScore: schedulerapi.DefaultPercentageOfNodesToScore,
|
percentageOfNodesToScore: schedulerapi.DefaultPercentageOfNodesToScore,
|
||||||
@ -262,7 +273,6 @@ func New(client clientset.Interface,
|
|||||||
informerFactory informers.SharedInformerFactory,
|
informerFactory informers.SharedInformerFactory,
|
||||||
podInformer coreinformers.PodInformer,
|
podInformer coreinformers.PodInformer,
|
||||||
recorder events.EventRecorder,
|
recorder events.EventRecorder,
|
||||||
schedulerAlgorithmSource schedulerapi.SchedulerAlgorithmSource,
|
|
||||||
stopCh <-chan struct{},
|
stopCh <-chan struct{},
|
||||||
opts ...Option) (*Scheduler, error) {
|
opts ...Option) (*Scheduler, error) {
|
||||||
|
|
||||||
@ -325,7 +335,7 @@ func New(client clientset.Interface,
|
|||||||
}
|
}
|
||||||
|
|
||||||
var sched *Scheduler
|
var sched *Scheduler
|
||||||
source := schedulerAlgorithmSource
|
source := options.schedulerAlgorithmSource
|
||||||
switch {
|
switch {
|
||||||
case source.Provider != nil:
|
case source.Provider != nil:
|
||||||
// Create the config from a named algorithm provider.
|
// Create the config from a named algorithm provider.
|
||||||
@ -788,3 +798,8 @@ func (p *podPreemptorImpl) removeNominatedNodeName(pod *v1.Pod) error {
|
|||||||
}
|
}
|
||||||
return p.setNominatedNodeName(pod, "")
|
return p.setNominatedNodeName(pod, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func defaultAlgorithmSourceProviderName() *string {
|
||||||
|
provider := schedulerapi.SchedulerDefaultProviderName
|
||||||
|
return &provider
|
||||||
|
}
|
||||||
|
@ -192,8 +192,8 @@ func TestSchedulerCreation(t *testing.T) {
|
|||||||
informerFactory,
|
informerFactory,
|
||||||
NewPodInformer(client, 0),
|
NewPodInformer(client, 0),
|
||||||
eventBroadcaster.NewRecorder(scheme.Scheme, "scheduler"),
|
eventBroadcaster.NewRecorder(scheme.Scheme, "scheduler"),
|
||||||
schedulerapi.SchedulerAlgorithmSource{Provider: &testSource},
|
|
||||||
stopCh,
|
stopCh,
|
||||||
|
WithAlgorithmSource(schedulerapi.SchedulerAlgorithmSource{Provider: &testSource}),
|
||||||
WithPodInitialBackoffSeconds(1),
|
WithPodInitialBackoffSeconds(1),
|
||||||
WithPodMaxBackoffSeconds(10),
|
WithPodMaxBackoffSeconds(10),
|
||||||
)
|
)
|
||||||
|
@ -21,7 +21,6 @@ go_test(
|
|||||||
"//pkg/controller/daemon:go_default_library",
|
"//pkg/controller/daemon:go_default_library",
|
||||||
"//pkg/scheduler:go_default_library",
|
"//pkg/scheduler:go_default_library",
|
||||||
"//pkg/scheduler/algorithmprovider:go_default_library",
|
"//pkg/scheduler/algorithmprovider:go_default_library",
|
||||||
"//pkg/scheduler/apis/config:go_default_library",
|
|
||||||
"//pkg/util/labels:go_default_library",
|
"//pkg/util/labels:go_default_library",
|
||||||
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
"//staging/src/k8s.io/api/apps/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
|
@ -47,7 +47,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/controller/daemon"
|
"k8s.io/kubernetes/pkg/controller/daemon"
|
||||||
"k8s.io/kubernetes/pkg/scheduler"
|
"k8s.io/kubernetes/pkg/scheduler"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
|
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
|
||||||
schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
|
||||||
labelsutil "k8s.io/kubernetes/pkg/util/labels"
|
labelsutil "k8s.io/kubernetes/pkg/util/labels"
|
||||||
"k8s.io/kubernetes/test/integration/framework"
|
"k8s.io/kubernetes/test/integration/framework"
|
||||||
)
|
)
|
||||||
@ -93,8 +92,6 @@ func setupScheduler(
|
|||||||
Interface: cs.EventsV1beta1().Events(""),
|
Interface: cs.EventsV1beta1().Events(""),
|
||||||
})
|
})
|
||||||
|
|
||||||
defaultProviderName := schedulerconfig.SchedulerDefaultProviderName
|
|
||||||
|
|
||||||
sched, err := scheduler.New(
|
sched, err := scheduler.New(
|
||||||
cs,
|
cs,
|
||||||
informerFactory,
|
informerFactory,
|
||||||
@ -103,9 +100,6 @@ func setupScheduler(
|
|||||||
legacyscheme.Scheme,
|
legacyscheme.Scheme,
|
||||||
v1.DefaultSchedulerName,
|
v1.DefaultSchedulerName,
|
||||||
),
|
),
|
||||||
schedulerconfig.SchedulerAlgorithmSource{
|
|
||||||
Provider: &defaultProviderName,
|
|
||||||
},
|
|
||||||
ctx.Done(),
|
ctx.Done(),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -272,16 +272,16 @@ priorities: []
|
|||||||
informerFactory,
|
informerFactory,
|
||||||
scheduler.NewPodInformer(clientSet, 0),
|
scheduler.NewPodInformer(clientSet, 0),
|
||||||
eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.DefaultSchedulerName),
|
eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.DefaultSchedulerName),
|
||||||
kubeschedulerconfig.SchedulerAlgorithmSource{
|
nil,
|
||||||
|
scheduler.WithName(v1.DefaultSchedulerName),
|
||||||
|
scheduler.WithAlgorithmSource(kubeschedulerconfig.SchedulerAlgorithmSource{
|
||||||
Policy: &kubeschedulerconfig.SchedulerPolicySource{
|
Policy: &kubeschedulerconfig.SchedulerPolicySource{
|
||||||
ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{
|
ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{
|
||||||
Namespace: policyConfigMap.Namespace,
|
Namespace: policyConfigMap.Namespace,
|
||||||
Name: policyConfigMap.Name,
|
Name: policyConfigMap.Name,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
}),
|
||||||
nil,
|
|
||||||
scheduler.WithName(v1.DefaultSchedulerName),
|
|
||||||
scheduler.WithHardPodAffinitySymmetricWeight(v1.DefaultHardPodAffinitySymmetricWeight),
|
scheduler.WithHardPodAffinitySymmetricWeight(v1.DefaultHardPodAffinitySymmetricWeight),
|
||||||
scheduler.WithBindTimeoutSeconds(defaultBindTimeout),
|
scheduler.WithBindTimeoutSeconds(defaultBindTimeout),
|
||||||
)
|
)
|
||||||
@ -335,16 +335,16 @@ func TestSchedulerCreationFromNonExistentConfigMap(t *testing.T) {
|
|||||||
informerFactory,
|
informerFactory,
|
||||||
scheduler.NewPodInformer(clientSet, 0),
|
scheduler.NewPodInformer(clientSet, 0),
|
||||||
eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.DefaultSchedulerName),
|
eventBroadcaster.NewRecorder(legacyscheme.Scheme, v1.DefaultSchedulerName),
|
||||||
kubeschedulerconfig.SchedulerAlgorithmSource{
|
nil,
|
||||||
|
scheduler.WithName(v1.DefaultSchedulerName),
|
||||||
|
scheduler.WithAlgorithmSource(kubeschedulerconfig.SchedulerAlgorithmSource{
|
||||||
Policy: &kubeschedulerconfig.SchedulerPolicySource{
|
Policy: &kubeschedulerconfig.SchedulerPolicySource{
|
||||||
ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{
|
ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{
|
||||||
Namespace: "non-existent-config",
|
Namespace: "non-existent-config",
|
||||||
Name: "non-existent-config",
|
Name: "non-existent-config",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
}),
|
||||||
nil,
|
|
||||||
scheduler.WithName(v1.DefaultSchedulerName),
|
|
||||||
scheduler.WithHardPodAffinitySymmetricWeight(v1.DefaultHardPodAffinitySymmetricWeight),
|
scheduler.WithHardPodAffinitySymmetricWeight(v1.DefaultHardPodAffinitySymmetricWeight),
|
||||||
scheduler.WithBindTimeoutSeconds(defaultBindTimeout))
|
scheduler.WithBindTimeoutSeconds(defaultBindTimeout))
|
||||||
|
|
||||||
|
@ -181,14 +181,8 @@ func initTestSchedulerWithOptions(
|
|||||||
legacyscheme.Scheme,
|
legacyscheme.Scheme,
|
||||||
v1.DefaultSchedulerName,
|
v1.DefaultSchedulerName,
|
||||||
)
|
)
|
||||||
var algorithmSrc schedulerapi.SchedulerAlgorithmSource
|
|
||||||
if policy != nil {
|
if policy != nil {
|
||||||
algorithmSrc = createAlgorithmSourceFromPolicy(policy, context.clientSet)
|
opts = append(opts, scheduler.WithAlgorithmSource(createAlgorithmSourceFromPolicy(policy, context.clientSet)))
|
||||||
} else {
|
|
||||||
provider := schedulerapi.SchedulerDefaultProviderName
|
|
||||||
algorithmSrc = schedulerapi.SchedulerAlgorithmSource{
|
|
||||||
Provider: &provider,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
opts = append([]scheduler.Option{scheduler.WithBindTimeoutSeconds(600)}, opts...)
|
opts = append([]scheduler.Option{scheduler.WithBindTimeoutSeconds(600)}, opts...)
|
||||||
context.scheduler, err = scheduler.New(
|
context.scheduler, err = scheduler.New(
|
||||||
@ -196,7 +190,6 @@ func initTestSchedulerWithOptions(
|
|||||||
context.informerFactory,
|
context.informerFactory,
|
||||||
podInformer,
|
podInformer,
|
||||||
recorder,
|
recorder,
|
||||||
algorithmSrc,
|
|
||||||
context.ctx.Done(),
|
context.ctx.Done(),
|
||||||
opts...,
|
opts...,
|
||||||
)
|
)
|
||||||
|
@ -16,7 +16,6 @@ go_library(
|
|||||||
"//pkg/api/legacyscheme:go_default_library",
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//pkg/scheduler:go_default_library",
|
"//pkg/scheduler:go_default_library",
|
||||||
"//pkg/scheduler/algorithmprovider/defaults: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/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/informers: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",
|
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
|
||||||
|
@ -32,7 +32,6 @@ import (
|
|||||||
|
|
||||||
// import DefaultProvider
|
// import DefaultProvider
|
||||||
_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults"
|
_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults"
|
||||||
schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
|
||||||
"k8s.io/kubernetes/test/integration/framework"
|
"k8s.io/kubernetes/test/integration/framework"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -99,16 +98,11 @@ func createScheduler(
|
|||||||
recorder events.EventRecorder,
|
recorder events.EventRecorder,
|
||||||
stopCh <-chan struct{},
|
stopCh <-chan struct{},
|
||||||
) (*scheduler.Scheduler, error) {
|
) (*scheduler.Scheduler, error) {
|
||||||
defaultProviderName := schedulerconfig.SchedulerDefaultProviderName
|
|
||||||
|
|
||||||
return scheduler.New(
|
return scheduler.New(
|
||||||
clientSet,
|
clientSet,
|
||||||
informerFactory,
|
informerFactory,
|
||||||
podInformer,
|
podInformer,
|
||||||
recorder,
|
recorder,
|
||||||
schedulerconfig.SchedulerAlgorithmSource{
|
|
||||||
Provider: &defaultProviderName,
|
|
||||||
},
|
|
||||||
stopCh,
|
stopCh,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,6 @@ go_library(
|
|||||||
"//pkg/api/v1/pod:go_default_library",
|
"//pkg/api/v1/pod:go_default_library",
|
||||||
"//pkg/scheduler:go_default_library",
|
"//pkg/scheduler:go_default_library",
|
||||||
"//pkg/scheduler/algorithmprovider/defaults: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/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/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",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||||
|
@ -37,7 +37,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/scheduler"
|
"k8s.io/kubernetes/pkg/scheduler"
|
||||||
schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
|
||||||
"k8s.io/kubernetes/test/integration/framework"
|
"k8s.io/kubernetes/test/integration/framework"
|
||||||
|
|
||||||
// Install "DefaultProvider" algorithprovider
|
// Install "DefaultProvider" algorithprovider
|
||||||
@ -142,16 +141,11 @@ func createSchedulerWithPodInformer(
|
|||||||
recorder events.EventRecorder,
|
recorder events.EventRecorder,
|
||||||
stopCh <-chan struct{},
|
stopCh <-chan struct{},
|
||||||
) (*scheduler.Scheduler, error) {
|
) (*scheduler.Scheduler, error) {
|
||||||
defaultProviderName := schedulerconfig.SchedulerDefaultProviderName
|
|
||||||
|
|
||||||
return scheduler.New(
|
return scheduler.New(
|
||||||
clientSet,
|
clientSet,
|
||||||
informerFactory,
|
informerFactory,
|
||||||
podInformer,
|
podInformer,
|
||||||
recorder,
|
recorder,
|
||||||
schedulerconfig.SchedulerAlgorithmSource{
|
|
||||||
Provider: &defaultProviderName,
|
|
||||||
},
|
|
||||||
stopCh,
|
stopCh,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user