@@ -130,21 +130,29 @@ 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 }
137137 authTokenSecret := prometheusConfig .AuthToken .SecretReference
138138 if authTokenSecret .Name == "" || authTokenSecret .Namespace == "" {
139139 return nil , fmt .Errorf ("prometheus metrics source configuration is missing authentication token secret" )
140140 }
141+
142+ if namespacedSharedInformerFactory == nil {
143+ return nil , fmt .Errorf ("namespacedSharedInformerFactory not configured" )
144+ }
145+
141146 ctrl := & secretBasedPromClientController {
142147 promClient : prometheusClient ,
143148 queue : workqueue .NewRateLimitingQueueWithConfig (workqueue .DefaultControllerRateLimiter (), workqueue.RateLimitingQueueConfig {Name : "descheduler" }),
144149 prometheusConfig : prometheusConfig ,
145150 createPrometheusClient : client .CreatePrometheusClient ,
146151 }
147152
153+ namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Informer ().AddEventHandler (ctrl .eventHandler ())
154+ ctrl .namespacedSecretsLister = namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Lister ().Secrets (authTokenSecret .Namespace )
155+
148156 return ctrl , nil
149157}
150158
@@ -185,20 +193,6 @@ func metricsProviderListToMap(providersList []api.MetricsProvider) map[api.Metri
185193 return providersMap
186194}
187195
188- // setupPrometheusProvider sets up the prometheus provider on the descheduler if configured
189- func setupPrometheusProvider (ctrl * secretBasedPromClientController , namespacedSharedInformerFactory informers.SharedInformerFactory ) error {
190- if ctrl == nil {
191- return nil
192- }
193- if namespacedSharedInformerFactory == nil {
194- return fmt .Errorf ("namespacedSharedInformerFactory not configured" )
195- }
196- authTokenSecret := ctrl .prometheusConfig .AuthToken .SecretReference
197- namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Informer ().AddEventHandler (ctrl .eventHandler ())
198- ctrl .namespacedSecretsLister = namespacedSharedInformerFactory .Core ().V1 ().Secrets ().Lister ().Secrets (authTokenSecret .Namespace )
199- return nil
200- }
201-
202196func getPrometheusConfig (providersList []api.MetricsProvider ) * api.Prometheus {
203197 prometheusProvider := metricsProviderListToMap (providersList )[api .PrometheusMetrics ]
204198 if prometheusProvider == nil {
@@ -211,7 +205,7 @@ func configureSecretPromClientReconciler(prometheusConfig *api.Prometheus) bool
211205 return prometheusConfig .URL != "" && prometheusConfig .AuthToken != nil
212206}
213207
214- 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 ) {
208+ 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 ) {
215209 podInformer := sharedInformerFactory .Core ().V1 ().Pods ().Informer ()
216210 // Temporarily register the PVC because it is used by the DefaultEvictor plugin during
217211 // the descheduling cycle, where informer registration is ignored.
@@ -257,7 +251,7 @@ func newDescheduler(ctx context.Context, rs *options.DeschedulerServer, deschedu
257251 if prometheusConfig != nil && prometheusConfig .URL != "" {
258252 if configureSecretPromClientReconciler (prometheusConfig ) {
259253 // Secret-based mode
260- ctrl , err := newSecretBasedPromClientController (rs .PrometheusClient , prometheusConfig )
254+ ctrl , err := newSecretBasedPromClientController (rs .PrometheusClient , prometheusConfig , namespacedSharedInformerFactory )
261255 if err != nil {
262256 return nil , err
263257 }
@@ -619,16 +613,11 @@ func bootstrapDescheduler(
619613 eventRecorder events.EventRecorder ,
620614) (* descheduler , runFncType , error ) {
621615 // Always create descheduler with real client/factory first to register all informers
622- descheduler , err := newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , rs .Client , sharedInformerFactory , nil )
616+ descheduler , err := newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , rs .Client , sharedInformerFactory , namespacedSharedInformerFactory , nil )
623617 if err != nil {
624618 return nil , nil , fmt .Errorf ("failed to create new descheduler: %v" , err )
625619 }
626620
627- // Setup Prometheus provider
628- if err := setupPrometheusProvider (descheduler .secretBasedPromClientCtrl , namespacedSharedInformerFactory ); err != nil {
629- return nil , nil , fmt .Errorf ("failed to setup Prometheus provider: %v" , err )
630- }
631-
632621 // If in dry run mode, replace the descheduler with one using fake client/factory
633622 if rs .DryRun {
634623 // Create sandbox with resources to mirror from real client
@@ -642,15 +631,10 @@ func bootstrapDescheduler(
642631 // TODO(ingvagabund): drop the previous queue
643632 // TODO(ingvagabund): stop the previous pod evictor
644633 // Replace descheduler with one using fake client/factory
645- descheduler , err = newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , kubeClientSandbox .fakeClient (), kubeClientSandbox .fakeSharedInformerFactory (), kubeClientSandbox )
634+ descheduler , err = newDescheduler (ctx , rs , deschedulerPolicy , evictionPolicyGroupVersion , eventRecorder , kubeClientSandbox .fakeClient (), kubeClientSandbox .fakeSharedInformerFactory (), namespacedSharedInformerFactory , kubeClientSandbox )
646635 if err != nil {
647636 return nil , nil , fmt .Errorf ("failed to create dry run descheduler: %v" , err )
648637 }
649-
650- // Setup Prometheus provider (with the real shared informer factory as the secret is only read)
651- if err := setupPrometheusProvider (descheduler .secretBasedPromClientCtrl , namespacedSharedInformerFactory ); err != nil {
652- return nil , nil , fmt .Errorf ("failed to setup Prometheus provider for the dry run descheduler: %v" , err )
653- }
654638 }
655639
656640 // init is responsible for starting all informer factories, metrics providers
0 commit comments