Skip to content

Commit 8815a1d

Browse files
authored
Merge pull request kubernetes#91776 from farah/master
Split scheduler framework implementation into new runtime package
2 parents 2768716 + a22e115 commit 8815a1d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+661
-560
lines changed

build/visible_to/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ package_group(
429429
name = "vendor_githubcom_prometheus_CONSUMERS",
430430
packages = [
431431
"//cluster/images/etcd-version-monitor",
432-
"//pkg/scheduler/framework/v1alpha1",
432+
"//pkg/scheduler/framework/runtime",
433433
"//pkg/volume/util/operationexecutor",
434434
"//staging/src/k8s.io/apiserver/pkg/admission/metrics",
435435
"//staging/src/k8s.io/component-base/metrics/...",

cmd/kube-scheduler/app/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ go_library(
1616
"//pkg/api/legacyscheme:go_default_library",
1717
"//pkg/scheduler:go_default_library",
1818
"//pkg/scheduler/apis/config:go_default_library",
19-
"//pkg/scheduler/framework/v1alpha1:go_default_library",
19+
"//pkg/scheduler/framework/runtime:go_default_library",
2020
"//pkg/scheduler/metrics:go_default_library",
2121
"//pkg/scheduler/profile:go_default_library",
2222
"//staging/src/k8s.io/api/core/v1:go_default_library",

cmd/kube-scheduler/app/server.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ import (
5757
"k8s.io/kubernetes/pkg/api/legacyscheme"
5858
"k8s.io/kubernetes/pkg/scheduler"
5959
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
60-
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
60+
"k8s.io/kubernetes/pkg/scheduler/framework/runtime"
6161
"k8s.io/kubernetes/pkg/scheduler/metrics"
6262
"k8s.io/kubernetes/pkg/scheduler/profile"
6363
)
6464

6565
// Option configures a framework.Registry.
66-
type Option func(framework.Registry) error
66+
type Option func(runtime.Registry) error
6767

6868
// NewSchedulerCommand creates a *cobra.Command object with default parameters and registryOptions
6969
func NewSchedulerCommand(registryOptions ...Option) *cobra.Command {
@@ -299,8 +299,8 @@ func getRecorderFactory(cc *schedulerserverconfig.CompletedConfig) profile.Recor
299299

300300
// WithPlugin creates an Option based on plugin name and factory. Please don't remove this function: it is used to register out-of-tree plugins,
301301
// hence there are no references to it from the kubernetes scheduler code base.
302-
func WithPlugin(name string, factory framework.PluginFactory) Option {
303-
return func(registry framework.Registry) error {
302+
func WithPlugin(name string, factory runtime.PluginFactory) Option {
303+
return func(registry runtime.Registry) error {
304304
return registry.Register(name, factory)
305305
}
306306
}
@@ -319,7 +319,7 @@ func Setup(ctx context.Context, opts *options.Options, outOfTreeRegistryOptions
319319
// Get the completed config
320320
cc := c.Complete()
321321

322-
outOfTreeRegistry := make(framework.Registry)
322+
outOfTreeRegistry := make(runtime.Registry)
323323
for _, option := range outOfTreeRegistryOptions {
324324
if err := option(outOfTreeRegistry); err != nil {
325325
return nil, nil, err

pkg/scheduler/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ go_library(
2121
"//pkg/scheduler/framework/plugins/defaultbinder:go_default_library",
2222
"//pkg/scheduler/framework/plugins/noderesources:go_default_library",
2323
"//pkg/scheduler/framework/plugins/queuesort:go_default_library",
24+
"//pkg/scheduler/framework/runtime:go_default_library",
2425
"//pkg/scheduler/framework/v1alpha1:go_default_library",
2526
"//pkg/scheduler/internal/cache:go_default_library",
2627
"//pkg/scheduler/internal/cache/debugger:go_default_library",
@@ -71,6 +72,7 @@ go_test(
7172
"//pkg/scheduler/framework/plugins/queuesort:go_default_library",
7273
"//pkg/scheduler/framework/plugins/serviceaffinity:go_default_library",
7374
"//pkg/scheduler/framework/plugins/volumebinding:go_default_library",
75+
"//pkg/scheduler/framework/runtime:go_default_library",
7476
"//pkg/scheduler/framework/v1alpha1:go_default_library",
7577
"//pkg/scheduler/internal/cache:go_default_library",
7678
"//pkg/scheduler/internal/cache/fake:go_default_library",

pkg/scheduler/core/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ go_library(
1212
"//pkg/api/v1/pod:go_default_library",
1313
"//pkg/features:go_default_library",
1414
"//pkg/scheduler/apis/config:go_default_library",
15+
"//pkg/scheduler/framework/runtime:go_default_library",
1516
"//pkg/scheduler/framework/v1alpha1:go_default_library",
1617
"//pkg/scheduler/internal/cache:go_default_library",
1718
"//pkg/scheduler/internal/parallelize:go_default_library",
@@ -56,6 +57,7 @@ go_test(
5657
"//pkg/scheduler/framework/plugins/tainttoleration:go_default_library",
5758
"//pkg/scheduler/framework/plugins/volumerestrictions:go_default_library",
5859
"//pkg/scheduler/framework/plugins/volumezone:go_default_library",
60+
"//pkg/scheduler/framework/runtime:go_default_library",
5961
"//pkg/scheduler/framework/v1alpha1:go_default_library",
6062
"//pkg/scheduler/framework/v1alpha1/fake:go_default_library",
6163
"//pkg/scheduler/internal/cache:go_default_library",

pkg/scheduler/core/extender_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
3333
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder"
3434
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
35+
"k8s.io/kubernetes/pkg/scheduler/framework/runtime"
3536
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
3637
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
3738
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
@@ -269,7 +270,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
269270
}
270271
queue := internalqueue.NewSchedulingQueue(nil)
271272

272-
fwk, err := st.NewFramework(test.registerPlugins, framework.WithClientSet(client))
273+
fwk, err := st.NewFramework(test.registerPlugins, runtime.WithClientSet(client))
273274
if err != nil {
274275
t.Fatal(err)
275276
}

pkg/scheduler/core/generic_scheduler.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
extenderv1 "k8s.io/kube-scheduler/extender/v1"
3939
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
4040
kubefeatures "k8s.io/kubernetes/pkg/features"
41+
"k8s.io/kubernetes/pkg/scheduler/framework/runtime"
4142
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
4243
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
4344
"k8s.io/kubernetes/pkg/scheduler/internal/parallelize"
@@ -499,7 +500,7 @@ func (g *genericScheduler) findNodesThatPassFilters(ctx context.Context, prof *p
499500
// We record Filter extension point latency here instead of in framework.go because framework.RunFilterPlugins
500501
// function is called for each node, whereas we want to have an overall latency for all nodes per scheduling cycle.
501502
// Note that this latency also includes latency for `addNominatedPods`, which calls framework.RunPreFilterAddPod.
502-
metrics.FrameworkExtensionPointDuration.WithLabelValues(framework.Filter, statusCode.String()).Observe(metrics.SinceInSeconds(beginCheckNode))
503+
metrics.FrameworkExtensionPointDuration.WithLabelValues(runtime.Filter, statusCode.String()).Observe(metrics.SinceInSeconds(beginCheckNode))
503504
}()
504505

505506
// Stops searching for more nodes once the configured number of feasible nodes

pkg/scheduler/core/generic_scheduler_test.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import (
5454
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/tainttoleration"
5555
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions"
5656
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone"
57+
frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
5758
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
5859
fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake"
5960
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
@@ -89,7 +90,7 @@ func NewNoPodsFilterPlugin(_ runtime.Object, _ framework.FrameworkHandle) (frame
8990

9091
type numericMapPlugin struct{}
9192

92-
func newNumericMapPlugin() framework.PluginFactory {
93+
func newNumericMapPlugin() frameworkruntime.PluginFactory {
9394
return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) {
9495
return &numericMapPlugin{}, nil
9596
}
@@ -113,7 +114,7 @@ func (pl *numericMapPlugin) ScoreExtensions() framework.ScoreExtensions {
113114

114115
type reverseNumericMapPlugin struct{}
115116

116-
func newReverseNumericMapPlugin() framework.PluginFactory {
117+
func newReverseNumericMapPlugin() frameworkruntime.PluginFactory {
117118
return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) {
118119
return &reverseNumericMapPlugin{}, nil
119120
}
@@ -154,7 +155,7 @@ func (pl *reverseNumericMapPlugin) NormalizeScore(_ context.Context, _ *framewor
154155

155156
type trueMapPlugin struct{}
156157

157-
func newTrueMapPlugin() framework.PluginFactory {
158+
func newTrueMapPlugin() frameworkruntime.PluginFactory {
158159
return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) {
159160
return &trueMapPlugin{}, nil
160161
}
@@ -183,7 +184,7 @@ func (pl *trueMapPlugin) NormalizeScore(_ context.Context, _ *framework.CycleSta
183184

184185
type falseMapPlugin struct{}
185186

186-
func newFalseMapPlugin() framework.PluginFactory {
187+
func newFalseMapPlugin() frameworkruntime.PluginFactory {
187188
return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) {
188189
return &falseMapPlugin{}, nil
189190
}
@@ -705,7 +706,7 @@ func TestGenericScheduler(t *testing.T) {
705706
}
706707

707708
snapshot := internalcache.NewSnapshot(test.pods, nodes)
708-
fwk, err := st.NewFramework(test.registerPlugins, framework.WithSnapshotSharedLister(snapshot))
709+
fwk, err := st.NewFramework(test.registerPlugins, frameworkruntime.WithSnapshotSharedLister(snapshot))
709710
if err != nil {
710711
t.Fatal(err)
711712
}
@@ -1026,9 +1027,9 @@ func TestZeroRequest(t *testing.T) {
10261027
}
10271028
fwk, err := st.NewFramework(
10281029
pluginRegistrations,
1029-
framework.WithInformerFactory(informerFactory),
1030-
framework.WithSnapshotSharedLister(snapshot),
1031-
framework.WithClientSet(client),
1030+
frameworkruntime.WithInformerFactory(informerFactory),
1031+
frameworkruntime.WithSnapshotSharedLister(snapshot),
1032+
frameworkruntime.WithClientSet(client),
10321033
)
10331034
if err != nil {
10341035
t.Fatalf("error creating framework: %+v", err)
@@ -1538,7 +1539,7 @@ func TestSelectNodesForPreemption(t *testing.T) {
15381539
registerPlugins := append([]st.RegisterPluginFunc{registerFakeFilterFunc}, test.registerPlugins...)
15391540
// Use a real snapshot since it's needed in some Filter Plugin (e.g., PodAffinity)
15401541
snapshot := internalcache.NewSnapshot(test.pods, nodes)
1541-
fwk, err := st.NewFramework(registerPlugins, framework.WithSnapshotSharedLister(snapshot))
1542+
fwk, err := st.NewFramework(registerPlugins, frameworkruntime.WithSnapshotSharedLister(snapshot))
15421543
if err != nil {
15431544
t.Fatal(err)
15441545
}
@@ -1825,7 +1826,7 @@ func TestPickOneNodeForPreemption(t *testing.T) {
18251826
nodes = append(nodes, makeNode(n, schedutil.DefaultMilliCPURequest*5, schedutil.DefaultMemoryRequest*5))
18261827
}
18271828
snapshot := internalcache.NewSnapshot(test.pods, nodes)
1828-
fwk, err := st.NewFramework(test.registerPlugins, framework.WithSnapshotSharedLister(snapshot))
1829+
fwk, err := st.NewFramework(test.registerPlugins, frameworkruntime.WithSnapshotSharedLister(snapshot))
18291830
if err != nil {
18301831
t.Fatal(err)
18311832
}
@@ -2338,12 +2339,12 @@ func TestPreempt(t *testing.T) {
23382339
snapshot := internalcache.NewSnapshot(test.pods, nodes)
23392340
fwk, err := st.NewFramework(
23402341
test.registerPlugins,
2341-
framework.WithClientSet(client),
2342-
framework.WithEventRecorder(&events.FakeRecorder{}),
2343-
framework.WithExtenders(extenders),
2344-
framework.WithPodNominator(podNominator),
2345-
framework.WithSnapshotSharedLister(snapshot),
2346-
framework.WithInformerFactory(informers.NewSharedInformerFactory(client, 0)),
2342+
frameworkruntime.WithClientSet(client),
2343+
frameworkruntime.WithEventRecorder(&events.FakeRecorder{}),
2344+
frameworkruntime.WithExtenders(extenders),
2345+
frameworkruntime.WithPodNominator(podNominator),
2346+
frameworkruntime.WithSnapshotSharedLister(snapshot),
2347+
frameworkruntime.WithInformerFactory(informers.NewSharedInformerFactory(client, 0)),
23472348
)
23482349
if err != nil {
23492350
t.Fatal(err)

pkg/scheduler/factory.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import (
4444
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder"
4545
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources"
4646
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
47+
frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
4748
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
4849
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
4950
cachedebugger "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger"
@@ -86,23 +87,23 @@ type Configurator struct {
8687
podMaxBackoffSeconds int64
8788

8889
profiles []schedulerapi.KubeSchedulerProfile
89-
registry framework.Registry
90+
registry frameworkruntime.Registry
9091
nodeInfoSnapshot *internalcache.Snapshot
9192
extenders []schedulerapi.Extender
9293
frameworkCapturer FrameworkCapturer
9394
}
9495

95-
func (c *Configurator) buildFramework(p schedulerapi.KubeSchedulerProfile, opts ...framework.Option) (framework.Framework, error) {
96+
func (c *Configurator) buildFramework(p schedulerapi.KubeSchedulerProfile, opts ...frameworkruntime.Option) (framework.Framework, error) {
9697
if c.frameworkCapturer != nil {
9798
c.frameworkCapturer(p)
9899
}
99-
opts = append([]framework.Option{
100-
framework.WithClientSet(c.client),
101-
framework.WithInformerFactory(c.informerFactory),
102-
framework.WithSnapshotSharedLister(c.nodeInfoSnapshot),
103-
framework.WithRunAllFilters(c.alwaysCheckAllPredicates),
100+
opts = append([]frameworkruntime.Option{
101+
frameworkruntime.WithClientSet(c.client),
102+
frameworkruntime.WithInformerFactory(c.informerFactory),
103+
frameworkruntime.WithSnapshotSharedLister(c.nodeInfoSnapshot),
104+
frameworkruntime.WithRunAllFilters(c.alwaysCheckAllPredicates),
104105
}, opts...)
105-
return framework.NewFramework(
106+
return frameworkruntime.NewFramework(
106107
c.registry,
107108
p.Plugins,
108109
p.PluginConfig,
@@ -158,7 +159,7 @@ func (c *Configurator) create() (*Scheduler, error) {
158159
// The nominator will be passed all the way to framework instantiation.
159160
nominator := internalqueue.NewPodNominator()
160161
profiles, err := profile.NewMap(c.profiles, c.buildFramework, c.recorderFactory,
161-
framework.WithPodNominator(nominator))
162+
frameworkruntime.WithPodNominator(nominator))
162163
if err != nil {
163164
return nil, fmt.Errorf("initializing profiles: %v", err)
164165
}

pkg/scheduler/factory_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import (
4444
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodelabel"
4545
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
4646
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/serviceaffinity"
47+
frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
4748
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
4849
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
4950
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
@@ -445,7 +446,7 @@ func getPodFromPriorityQueue(queue *internalqueue.PriorityQueue, pod *v1.Pod) *v
445446

446447
func newConfigFactoryWithFrameworkRegistry(
447448
client clientset.Interface, stopCh <-chan struct{},
448-
registry framework.Registry) *Configurator {
449+
registry frameworkruntime.Registry) *Configurator {
449450
informerFactory := informers.NewSharedInformerFactory(client, 0)
450451
snapshot := internalcache.NewEmptySnapshot()
451452
recorderFactory := profile.NewRecorderFactory(events.NewBroadcaster(&events.EventSinkImpl{Interface: client.EventsV1beta1().Events("")}))

0 commit comments

Comments
 (0)