diff --git a/pkg/scheduler/factory.go b/pkg/scheduler/factory.go index e2db4e43ad2..84510949ef3 100644 --- a/pkg/scheduler/factory.go +++ b/pkg/scheduler/factory.go @@ -38,7 +38,6 @@ import ( policylisters "k8s.io/client-go/listers/policy/v1beta1" "k8s.io/client-go/tools/cache" "k8s.io/klog/v2" - kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" diff --git a/pkg/scheduler/framework/v1alpha1/BUILD b/pkg/scheduler/framework/v1alpha1/BUILD index 7369d802759..cd12d2d800c 100644 --- a/pkg/scheduler/framework/v1alpha1/BUILD +++ b/pkg/scheduler/framework/v1alpha1/BUILD @@ -34,6 +34,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/tools/events:go_default_library", "//staging/src/k8s.io/component-base/metrics:go_default_library", "//staging/src/k8s.io/kube-scheduler/config/v1beta1:go_default_library", "//staging/src/k8s.io/kube-scheduler/extender/v1:go_default_library", diff --git a/pkg/scheduler/framework/v1alpha1/framework.go b/pkg/scheduler/framework/v1alpha1/framework.go index 343bcfb39bd..3857e3a5c4e 100644 --- a/pkg/scheduler/framework/v1alpha1/framework.go +++ b/pkg/scheduler/framework/v1alpha1/framework.go @@ -28,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" "k8s.io/kube-scheduler/config/v1beta1" "k8s.io/kubernetes/pkg/scheduler/apis/config" @@ -79,6 +80,7 @@ type framework struct { permitPlugins []PermitPlugin clientSet clientset.Interface + eventRecorder events.EventRecorder informerFactory informers.SharedInformerFactory metricsRecorder *metricsRecorder @@ -120,6 +122,7 @@ func (f *framework) getExtensionPoints(plugins *config.Plugins) []extensionPoint type frameworkOptions struct { clientSet clientset.Interface + eventRecorder events.EventRecorder informerFactory informers.SharedInformerFactory snapshotSharedLister SharedLister metricsRecorder *metricsRecorder @@ -138,6 +141,13 @@ func WithClientSet(clientSet clientset.Interface) Option { } } +// WithEventRecorder sets clientSet for the scheduling framework. +func WithEventRecorder(recorder events.EventRecorder) Option { + return func(o *frameworkOptions) { + o.eventRecorder = recorder + } +} + // WithInformerFactory sets informer factory for the scheduling framework. func WithInformerFactory(informerFactory informers.SharedInformerFactory) Option { return func(o *frameworkOptions) { @@ -214,6 +224,7 @@ func NewFramework(r Registry, plugins *config.Plugins, args []config.PluginConfi pluginNameToWeightMap: make(map[string]int), waitingPods: newWaitingPodsMap(), clientSet: options.clientSet, + eventRecorder: options.eventRecorder, informerFactory: options.informerFactory, metricsRecorder: options.metricsRecorder, runAllFilters: options.runAllFilters, @@ -962,6 +973,11 @@ func (f *framework) ClientSet() clientset.Interface { return f.clientSet } +// EventRecorder returns an event recorder. +func (f *framework) EventRecorder() events.EventRecorder { + return f.eventRecorder +} + // SharedInformerFactory returns a shared informer factory. func (f *framework) SharedInformerFactory() informers.SharedInformerFactory { return f.informerFactory diff --git a/pkg/scheduler/framework/v1alpha1/interface.go b/pkg/scheduler/framework/v1alpha1/interface.go index b1b97dbc1be..7089d25e48b 100644 --- a/pkg/scheduler/framework/v1alpha1/interface.go +++ b/pkg/scheduler/framework/v1alpha1/interface.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/events" "k8s.io/kubernetes/pkg/scheduler/apis/config" ) @@ -512,6 +513,9 @@ type FrameworkHandle interface { // ClientSet returns a kubernetes clientSet. ClientSet() clientset.Interface + // EventRecorder returns an event recorder. + EventRecorder() events.EventRecorder + SharedInformerFactory() informers.SharedInformerFactory // TODO: unroll the wrapped interfaces to FrameworkHandle. diff --git a/pkg/scheduler/profile/profile.go b/pkg/scheduler/profile/profile.go index 3e6f3d14e23..eb9ec8b7290 100644 --- a/pkg/scheduler/profile/profile.go +++ b/pkg/scheduler/profile/profile.go @@ -44,11 +44,11 @@ type Profile struct { // NewProfile builds a Profile for the given configuration. func NewProfile(cfg config.KubeSchedulerProfile, frameworkFact FrameworkFactory, recorderFact RecorderFactory, opts ...framework.Option) (*Profile, error) { - f, err := frameworkFact(cfg, opts...) + r := recorderFact(cfg.SchedulerName) + f, err := frameworkFact(cfg, append(opts, framework.WithEventRecorder(r))...) if err != nil { return nil, err } - r := recorderFact(cfg.SchedulerName) return &Profile{ Framework: f, Recorder: r,