diff --git a/cmd/kube-scheduler/app/BUILD b/cmd/kube-scheduler/app/BUILD index e22bde4bd13..b6f53ecc125 100644 --- a/cmd/kube-scheduler/app/BUILD +++ b/cmd/kube-scheduler/app/BUILD @@ -16,6 +16,7 @@ go_library( "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library", "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//pkg/util/configz:go_default_library", diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index f2a6f36c3d6..05cb13bafa4 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -49,6 +49,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" + plugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/metrics" "k8s.io/kubernetes/pkg/util/configz" @@ -158,7 +159,7 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}, regis // To help debugging, immediately log version klog.V(1).Infof("Starting Kubernetes Scheduler version %+v", version.Get()) - registry := framework.NewRegistry() + registry := plugins.NewDefaultRegistry() for _, option := range registryOptions { if err := option(registry); err != nil { return err diff --git a/pkg/scheduler/factory/BUILD b/pkg/scheduler/factory/BUILD index 7435994be91..c0d989727a1 100644 --- a/pkg/scheduler/factory/BUILD +++ b/pkg/scheduler/factory/BUILD @@ -64,7 +64,7 @@ go_test( "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/api/latest:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", diff --git a/pkg/scheduler/factory/factory_test.go b/pkg/scheduler/factory/factory_test.go index 21e2efd391f..3abb27dc121 100644 --- a/pkg/scheduler/factory/factory_test.go +++ b/pkg/scheduler/factory/factory_test.go @@ -40,7 +40,7 @@ import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" "k8s.io/kubernetes/pkg/scheduler/apis/config" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + plugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" @@ -496,7 +496,7 @@ func newConfigFactory(client clientset.Interface, hardPodAffinitySymmetricWeight schedulerapi.DefaultPercentageOfNodesToScore, bindTimeoutSeconds, stopCh, - framework.NewRegistry(), + plugins.NewDefaultRegistry(), nil, []config.PluginConfig{}, }) diff --git a/pkg/scheduler/framework/BUILD b/pkg/scheduler/framework/BUILD index 40805ad2570..cc7ff21bbc8 100644 --- a/pkg/scheduler/framework/BUILD +++ b/pkg/scheduler/framework/BUILD @@ -9,7 +9,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/scheduler/framework/plugins/examples:all-srcs", + "//pkg/scheduler/framework/plugins:all-srcs", "//pkg/scheduler/framework/v1alpha1:all-srcs", ], tags = ["automanaged"], diff --git a/pkg/scheduler/framework/plugins/BUILD b/pkg/scheduler/framework/plugins/BUILD new file mode 100644 index 00000000000..90321c01b8e --- /dev/null +++ b/pkg/scheduler/framework/plugins/BUILD @@ -0,0 +1,30 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["default_registry.go"], + importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins", + visibility = ["//visibility:public"], + deps = [ + "//pkg/scheduler/framework/plugins/noop:go_default_library", + "//pkg/scheduler/framework/v1alpha1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/scheduler/framework/plugins/examples:all-srcs", + "//pkg/scheduler/framework/plugins/noop:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/scheduler/framework/plugins/default_registry.go b/pkg/scheduler/framework/plugins/default_registry.go new file mode 100644 index 00000000000..8fab18b2122 --- /dev/null +++ b/pkg/scheduler/framework/plugins/default_registry.go @@ -0,0 +1,33 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package plugins + +import ( + noop "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noop" + framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" +) + +// NewDefaultRegistry builds a default registry with all the default plugins. +// This is the registry that Kubernetes default scheduler uses. A scheduler that +// runs custom plugins, can pass a different Registry when initializing the scheduler. +func NewDefaultRegistry() framework.Registry { + return framework.Registry{ + // This is just a test plugin to showcase the setup, it should be deleted once + // we have at least one legitimate plugin here. + noop.Name: noop.New, + } +} diff --git a/pkg/scheduler/framework/plugins/noop/BUILD b/pkg/scheduler/framework/plugins/noop/BUILD new file mode 100644 index 00000000000..c28a009d26c --- /dev/null +++ b/pkg/scheduler/framework/plugins/noop/BUILD @@ -0,0 +1,27 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["noop.go"], + importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noop", + visibility = ["//visibility:public"], + deps = [ + "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/scheduler/framework/plugins/noop/noop.go b/pkg/scheduler/framework/plugins/noop/noop.go new file mode 100644 index 00000000000..6048ad4a19c --- /dev/null +++ b/pkg/scheduler/framework/plugins/noop/noop.go @@ -0,0 +1,49 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package prebind + +import ( + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + + framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" +) + +// NoOpFilter is a plugin that implements the filter plugin and always returns Success. +// This is just to make sure that all code dependencies are properly addressed while +// working on legitimate plugins. +type NoOpFilter struct{} + +var _ = framework.FilterPlugin(NoOpFilter{}) + +// Name is the name of the plugin used in Registry and configurations. +const Name = "noop-filter" + +// Name returns name of the plugin. It is used in logs, etc. +func (n NoOpFilter) Name() string { + return Name +} + +// Filter invoked at the filter extension point. +func (n NoOpFilter) Filter(pc *framework.PluginContext, pod *v1.Pod, nodeName string) *framework.Status { + return nil +} + +// New initializes a new plugin and returns it. +func New(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { + return &NoOpFilter{}, nil +} diff --git a/pkg/scheduler/framework/v1alpha1/registry.go b/pkg/scheduler/framework/v1alpha1/registry.go index c25c3baf23d..ea7d43ce9e7 100644 --- a/pkg/scheduler/framework/v1alpha1/registry.go +++ b/pkg/scheduler/framework/v1alpha1/registry.go @@ -68,19 +68,3 @@ func (r Registry) Unregister(name string) error { delete(r, name) return nil } - -// NewRegistry builds a default registry with all the default plugins. -// This is the registry that Kubernetes default scheduler uses. A scheduler that -// runs custom plugins, can pass a different Registry and when initializing the -// scheduler. -func NewRegistry() Registry { - return Registry{ - // FactoryMap: - // New plugins are registered here. - // example: - // { - // stateful_plugin.Name: stateful.NewStatefulMultipointExample, - // fooplugin.Name: fooplugin.New, - // } - } -} diff --git a/test/integration/daemonset/BUILD b/test/integration/daemonset/BUILD index d112f944ba0..21691753fca 100644 --- a/test/integration/daemonset/BUILD +++ b/test/integration/daemonset/BUILD @@ -23,7 +23,7 @@ go_test( "//pkg/scheduler/algorithmprovider:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework/plugins: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 e62a995fc2d..6120ec8034d 100644 --- a/test/integration/daemonset/daemonset_test.go +++ b/test/integration/daemonset/daemonset_test.go @@ -51,7 +51,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" - schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/plugins" labelsutil "k8s.io/kubernetes/pkg/util/labels" "k8s.io/kubernetes/test/integration/framework" ) @@ -126,7 +126,7 @@ func setupScheduler( Provider: &defaultProviderName, }, stopCh, - schedulerframework.NewRegistry(), + schedulerframework.NewDefaultRegistry(), nil, []schedulerconfig.PluginConfig{}, ) diff --git a/test/integration/scheduler/BUILD b/test/integration/scheduler/BUILD index a251fd7b98c..6ced8ffbb55 100644 --- a/test/integration/scheduler/BUILD +++ b/test/integration/scheduler/BUILD @@ -32,6 +32,7 @@ go_test( "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/factory:go_default_library", + "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/testing:go_default_library", @@ -89,6 +90,7 @@ go_library( "//pkg/scheduler/api:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/factory:go_default_library", + "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/util/taints:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/test/integration/scheduler/scheduler_test.go b/test/integration/scheduler/scheduler_test.go index aa78b738c58..dd824c327c1 100644 --- a/test/integration/scheduler/scheduler_test.go +++ b/test/integration/scheduler/scheduler_test.go @@ -42,7 +42,7 @@ import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/factory" - schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + schedulerplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" "k8s.io/kubernetes/test/integration/framework" ) @@ -265,7 +265,7 @@ priorities: [] }, }, nil, - schedulerframework.NewRegistry(), + schedulerplugins.NewDefaultRegistry(), nil, []kubeschedulerconfig.PluginConfig{}, scheduler.WithName(v1.DefaultSchedulerName), @@ -336,7 +336,7 @@ func TestSchedulerCreationFromNonExistentConfigMap(t *testing.T) { }, }, nil, - schedulerframework.NewRegistry(), + schedulerplugins.NewDefaultRegistry(), nil, []kubeschedulerconfig.PluginConfig{}, scheduler.WithName(v1.DefaultSchedulerName), @@ -603,7 +603,7 @@ func TestMultiScheduler(t *testing.T) { stopCh := make(chan struct{}) defer close(stopCh) - schedulerConfigFactory2 := factory.NewConfigFactory(createConfiguratorArgsWithPodInformer(fooScheduler, clientSet2, podInformer2, informerFactory2, schedulerframework.NewRegistry(), + schedulerConfigFactory2 := factory.NewConfigFactory(createConfiguratorArgsWithPodInformer(fooScheduler, clientSet2, podInformer2, informerFactory2, schedulerplugins.NewDefaultRegistry(), nil, []kubeschedulerconfig.PluginConfig{}, stopCh)) schedulerConfig2, err := schedulerConfigFactory2.Create() if err != nil { diff --git a/test/integration/scheduler/util.go b/test/integration/scheduler/util.go index 2161298f5b9..afc41ce05ad 100644 --- a/test/integration/scheduler/util.go +++ b/test/integration/scheduler/util.go @@ -54,6 +54,7 @@ import ( _ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/scheduler/factory" + schedulerplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" taintutils "k8s.io/kubernetes/pkg/util/taints" "k8s.io/kubernetes/test/integration/framework" @@ -156,7 +157,7 @@ func initTestScheduler( policy *schedulerapi.Policy, ) *testContext { // Pod preemption is enabled by default scheduler configuration. - return initTestSchedulerWithOptions(t, context, setPodInformer, policy, schedulerframework.NewRegistry(), + return initTestSchedulerWithOptions(t, context, setPodInformer, policy, schedulerplugins.NewDefaultRegistry(), nil, []schedulerconfig.PluginConfig{}, false, time.Second) } @@ -284,7 +285,7 @@ func initTest(t *testing.T, nsPrefix string) *testContext { func initTestDisablePreemption(t *testing.T, nsPrefix string) *testContext { return initTestSchedulerWithOptions( t, initTestMaster(t, nsPrefix, nil), true, nil, - schedulerframework.NewRegistry(), nil, []schedulerconfig.PluginConfig{}, + schedulerplugins.NewDefaultRegistry(), nil, []schedulerconfig.PluginConfig{}, true, time.Second) } diff --git a/test/integration/util/BUILD b/test/integration/util/BUILD index 2f3f02634e7..4a55bef4625 100644 --- a/test/integration/util/BUILD +++ b/test/integration/util/BUILD @@ -17,7 +17,7 @@ go_library( "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework/plugins: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/kubernetes:go_default_library", diff --git a/test/integration/util/util.go b/test/integration/util/util.go index 3c24e882add..5f6e78061e8 100644 --- a/test/integration/util/util.go +++ b/test/integration/util/util.go @@ -31,7 +31,7 @@ import ( // import DefaultProvider _ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" - schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + schedulerplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" "k8s.io/kubernetes/test/integration/framework" ) @@ -124,7 +124,7 @@ func createScheduler( Provider: &defaultProviderName, }, stopCh, - schedulerframework.NewRegistry(), + schedulerplugins.NewDefaultRegistry(), nil, []schedulerconfig.PluginConfig{}, ) diff --git a/test/integration/volumescheduling/BUILD b/test/integration/volumescheduling/BUILD index e72b6dc4c9e..340db008507 100644 --- a/test/integration/volumescheduling/BUILD +++ b/test/integration/volumescheduling/BUILD @@ -63,6 +63,7 @@ go_library( "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library", "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/framework/v1alpha1: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", diff --git a/test/integration/volumescheduling/util.go b/test/integration/volumescheduling/util.go index 87c7a787ec8..a7333817e5a 100644 --- a/test/integration/volumescheduling/util.go +++ b/test/integration/volumescheduling/util.go @@ -37,6 +37,7 @@ import ( podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/scheduler" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" + schedulerplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/test/integration/framework" @@ -115,7 +116,7 @@ func initTestSchedulerWithOptions( var err error context.scheduler, err = createSchedulerWithPodInformer( - context.clientSet, podInformer, context.informerFactory, schedulerframework.NewRegistry(), nil, + context.clientSet, podInformer, context.informerFactory, schedulerplugins.NewDefaultRegistry(), nil, []schedulerconfig.PluginConfig{}, recorder, context.stopCh) if err != nil {