@@ -130,17 +130,26 @@ func newInClusterPromClientController(prometheusClient promapi.Client, prometheu
130130 }
131131}
132132
133- func newSecretBasedPromClientController (prometheusClient promapi.Client , prometheusConfig * api.Prometheus ) (* secretBasedPromClientController , error ) {
133+ func newSecretBasedPromClientController (prometheusClient promapi.Client , prometheusConfig * api.Prometheus , namespacedSharedInformerFactory informers. SharedInformerFactory ) (* secretBasedPromClientController , error ) {
134134 if prometheusConfig == nil || prometheusConfig .AuthToken == nil || prometheusConfig .AuthToken .SecretReference == nil {
135135 return nil , fmt .Errorf ("prometheus metrics source configuration is missing authentication token secret" )
136136 }
137+
138+ if namespacedSharedInformerFactory == nil {
139+ return nil , fmt .Errorf ("namespacedSharedInformerFactory not configured" )
140+ }
141+
137142 ctrl := & secretBasedPromClientController {
138143 promClient : prometheusClient ,
139144 queue : workqueue .NewRateLimitingQueueWithConfig (workqueue .DefaultControllerRateLimiter (), workqueue.RateLimitingQueueConfig {Name : "descheduler" }),
140145 prometheusConfig : prometheusConfig ,
141146 createPrometheusClient : client .CreatePrometheusClient ,
142147 }
143148
149+ authTokenSecret := ctrl .prometheusConfig .AuthToken .SecretReference
150+ namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Informer ().AddEventHandler (ctrl .eventHandler ())
151+ ctrl .namespacedSecretsLister = namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Lister ().Secrets (authTokenSecret .Namespace )
152+
144153 return ctrl , nil
145154}
146155
@@ -181,20 +190,6 @@ func metricsProviderListToMap(providersList []api.MetricsProvider) map[api.Metri
181190 return providersMap
182191}
183192
184- // setupPrometheusProvider sets up the prometheus provider on the descheduler if configured
185- func setupPrometheusProvider (ctrl * secretBasedPromClientController , namespacedSharedInformerFactory informers.SharedInformerFactory ) error {
186- if ctrl == nil {
187- return nil
188- }
189- if namespacedSharedInformerFactory == nil {
190- return fmt .Errorf ("namespacedSharedInformerFactory not configured" )
191- }
192- authTokenSecret := ctrl .prometheusConfig .AuthToken .SecretReference
193- namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Informer ().AddEventHandler (ctrl .eventHandler ())
194- ctrl .namespacedSecretsLister = namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Lister ().Secrets (authTokenSecret .Namespace )
195- return nil
196- }
197-
198193func getPrometheusConfig (providersList []api.MetricsProvider ) * api.Prometheus {
199194 prometheusProvider := metricsProviderListToMap (providersList )[api .PrometheusMetrics ]
200195 if prometheusProvider == nil {
@@ -207,7 +202,7 @@ func configureSecretPromClientReconciler(prometheusConfig *api.Prometheus) bool
207202 return prometheusConfig .URL != "" && prometheusConfig .AuthToken != nil
208203}
209204
210- func newDescheduler (ctx context.Context , rs * options.DeschedulerServer , deschedulerPolicy * api.DeschedulerPolicy , evictionPolicyGroupVersion string , eventRecorder events.EventRecorder , client clientset.Interface , sharedInformerFactory informers.SharedInformerFactory , kubeClientSandbox * kubeClientSandbox ) (* descheduler , error ) {
205+ func newDescheduler (ctx context.Context , rs * options.DeschedulerServer , deschedulerPolicy * api.DeschedulerPolicy , evictionPolicyGroupVersion string , eventRecorder events.EventRecorder , client clientset.Interface , sharedInformerFactory , namespacedSharedInformerFactory informers.SharedInformerFactory , kubeClientSandbox * kubeClientSandbox ) (* descheduler , error ) {
211206 podInformer := sharedInformerFactory .Core ().V1 ().Pods ().Informer ()
212207 // Temporarily register the PVC because it is used by the DefaultEvictor plugin during
213208 // the descheduling cycle, where informer registration is ignored.
@@ -253,7 +248,7 @@ func newDescheduler(ctx context.Context, rs *options.DeschedulerServer, deschedu
253248 if prometheusConfig != nil {
254249 if configureSecretPromClientReconciler (prometheusConfig ) {
255250 // Secret-based mode
256- ctrl , err := newSecretBasedPromClientController (rs .PrometheusClient , prometheusConfig )
251+ ctrl , err := newSecretBasedPromClientController (rs .PrometheusClient , prometheusConfig , namespacedSharedInformerFactory )
257252 if err != nil {
258253 return nil , err
259254 }
@@ -615,16 +610,11 @@ func bootstrapDescheduler(
615610 eventRecorder events.EventRecorder ,
616611) (* descheduler , runFncType , error ) {
617612 // Always create descheduler with real client/factory first to register all informers
618- descheduler , err := newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , rs .Client , sharedInformerFactory , nil )
613+ descheduler , err := newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , rs .Client , sharedInformerFactory , namespacedSharedInformerFactory , nil )
619614 if err != nil {
620615 return nil , nil , fmt .Errorf ("failed to create new descheduler: %v" , err )
621616 }
622617
623- // Setup Prometheus provider
624- if err := setupPrometheusProvider (descheduler .secretBasedPromClientCtrl , namespacedSharedInformerFactory ); err != nil {
625- return nil , nil , fmt .Errorf ("failed to setup Prometheus provider: %v" , err )
626- }
627-
628618 // If in dry run mode, replace the descheduler with one using fake client/factory
629619 if rs .DryRun {
630620 // Create sandbox with resources to mirror from real client
@@ -638,15 +628,10 @@ func bootstrapDescheduler(
638628 // TODO(ingvagabund): drop the previous queue
639629 // TODO(ingvagabund): stop the previous pod evictor
640630 // Replace descheduler with one using fake client/factory
641- descheduler , err = newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , kubeClientSandbox .fakeClient (), kubeClientSandbox .fakeSharedInformerFactory (), kubeClientSandbox )
631+ descheduler , err = newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , kubeClientSandbox .fakeClient (), kubeClientSandbox .fakeSharedInformerFactory (), namespacedSharedInformerFactory , kubeClientSandbox )
642632 if err != nil {
643633 return nil , nil , fmt .Errorf ("failed to create dry run descheduler: %v" , err )
644634 }
645-
646- // Setup Prometheus provider (with the real shared informer factory as the secret is only read)
647- if err := setupPrometheusProvider (descheduler .secretBasedPromClientCtrl , namespacedSharedInformerFactory ); err != nil {
648- return nil , nil , fmt .Errorf ("failed to setup Prometheus provider for the dry run descheduler: %v" , err )
649- }
650635 }
651636
652637 // init is responsible for starting all informer factories, metrics providers
0 commit comments