refactor(promClientController): split it into two prom client controllers#1821
Conversation
There was a problem hiding this comment.
Pull request overview
Refactors Prometheus client handling in the descheduler by splitting the previous single controller into two dedicated controllers (in-cluster SA token vs. secret-based token), and updates the test suite to reflect the new wiring.
Changes:
- Introduces
inClusterPromClientControllerandsecretBasedPromClientControllerand updates descheduler bootstrap/run logic to use the appropriate controller. - Adds helper functions (
getPrometheusConfig,configureSecretPromClientReconciler) to decide which Prometheus mode to configure and when to start namespaced informers/reconcilers. - Updates
descheduler_test.goto use the new controllers and adds secret informer propagation waiting for secret-based scenarios.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 8 comments.
| File | Description |
|---|---|
| pkg/descheduler/descheduler.go | Splits Prometheus client controller logic into in-cluster vs secret-based controllers and updates bootstrap/run paths accordingly. |
| pkg/descheduler/descheduler_test.go | Updates tests for the split controllers; adds secret propagation waiting helper for informer-backed secret reads. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
f7dd04c to
c2f2ec1
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if prometheusConfig != nil && configureSecretPromClientReconciler(prometheusConfig) { | ||
| namespacedSharedInformerFactory = informers.NewSharedInformerFactoryWithOptions(rs.Client, 0, informers.WithTransform(trimManagedFields), informers.WithNamespace(prometheusConfig.AuthToken.SecretReference.Namespace)) |
There was a problem hiding this comment.
configureSecretPromClientReconciler only checks AuthToken != nil, but the caller immediately dereferences prometheusConfig.AuthToken.SecretReference.Namespace. If AuthToken is set but SecretReference is nil/empty (possible in unit tests or if validation is bypassed), this will panic. Consider making configureSecretPromClientReconciler also require a non-nil SecretReference with a non-empty Namespace (and likely Name), or guard the dereference here and return a clear error instead.
| if prometheusConfig != nil && configureSecretPromClientReconciler(prometheusConfig) { | |
| namespacedSharedInformerFactory = informers.NewSharedInformerFactoryWithOptions(rs.Client, 0, informers.WithTransform(trimManagedFields), informers.WithNamespace(prometheusConfig.AuthToken.SecretReference.Namespace)) | |
| if prometheusConfig != nil && | |
| configureSecretPromClientReconciler(prometheusConfig) && | |
| prometheusConfig.AuthToken != nil && | |
| prometheusConfig.AuthToken.SecretReference != nil && | |
| prometheusConfig.AuthToken.SecretReference.Namespace != "" { | |
| namespacedSharedInformerFactory = informers.NewSharedInformerFactoryWithOptions( | |
| rs.Client, | |
| 0, | |
| informers.WithTransform(trimManagedFields), | |
| informers.WithNamespace(prometheusConfig.AuthToken.SecretReference.Namespace), | |
| ) |
1694b63 to
f80d35f
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
pkg/descheduler/descheduler.go
Outdated
| } | ||
|
|
||
| prometheusConfig := getPrometheusConfig(deschedulerPolicy.MetricsProviders) | ||
| if prometheusConfig != nil { |
There was a problem hiding this comment.
With the current branching, any non-nil Prometheus config that has URL=="" will fall into the in-cluster controller path, changing prior behavior (previously no reconciliation happened unless URL was set) and potentially causing reconcileInClusterSAToken() to attempt client creation with an empty URL. Consider gating both controller creations on prometheusConfig.URL != "" (and returning a validation error if Prometheus is configured but URL is empty).
| if prometheusConfig != nil { | |
| if prometheusConfig != nil { | |
| if prometheusConfig.URL == "" { | |
| return nil, fmt.Errorf("prometheus metrics provider is configured but URL is empty") | |
| } |
| return wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, 5*time.Second, true, func(ctx context.Context) (bool, error) { | ||
| for _, obj := range objects { | ||
| secret, ok := obj.(*v1.Secret) | ||
| if !ok { | ||
| continue | ||
| } | ||
| _, err := secretsLister.Get(secret.Name) | ||
| if err != nil { | ||
| if apierrors.IsNotFound(err) { | ||
| klog.Infof("Secret %s/%s has not propagated to the indexer", secret.Namespace, secret.Name) | ||
| return false, nil | ||
| } | ||
| return false, err | ||
| } | ||
| klog.Infof("Secret %s/%s has propagated to the indexer", secret.Namespace, secret.Name) |
There was a problem hiding this comment.
waitForSecretsPropagation logs at Info level on every 100ms poll iteration; on slow CI this can generate a lot of noisy output. Consider reducing verbosity (e.g., klog.V(n)) and/or only logging on state transition (first miss / first hit) instead of every retry.
| return wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, 5*time.Second, true, func(ctx context.Context) (bool, error) { | |
| for _, obj := range objects { | |
| secret, ok := obj.(*v1.Secret) | |
| if !ok { | |
| continue | |
| } | |
| _, err := secretsLister.Get(secret.Name) | |
| if err != nil { | |
| if apierrors.IsNotFound(err) { | |
| klog.Infof("Secret %s/%s has not propagated to the indexer", secret.Namespace, secret.Name) | |
| return false, nil | |
| } | |
| return false, err | |
| } | |
| klog.Infof("Secret %s/%s has propagated to the indexer", secret.Namespace, secret.Name) | |
| // Track logging state per secret so we only log on state transitions (first miss / first hit). | |
| firstMissLogged := make(map[string]bool) | |
| propagatedLogged := make(map[string]bool) | |
| return wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, 5*time.Second, true, func(ctx context.Context) (bool, error) { | |
| for _, obj := range objects { | |
| secret, ok := obj.(*v1.Secret) | |
| if !ok { | |
| continue | |
| } | |
| key := secret.Namespace + "/" + secret.Name | |
| _, err := secretsLister.Get(secret.Name) | |
| if err != nil { | |
| if apierrors.IsNotFound(err) { | |
| if !firstMissLogged[key] { | |
| firstMissLogged[key] = true | |
| klog.V(3).Infof("Secret %s has not propagated to the indexer", key) | |
| } | |
| return false, nil | |
| } | |
| return false, err | |
| } | |
| if !propagatedLogged[key] { | |
| propagatedLogged[key] = true | |
| klog.V(3).Infof("Secret %s has propagated to the indexer", key) | |
| } |
| defer cancel() | ||
| secretsLister := namespacedInformerFactory.Core().V1().Secrets().Lister().Secrets(namespace) | ||
| if err := waitForSecretsPropagation(ctx, secretsLister, objects); err != nil { | ||
| t.Fatalf("secrets did not propagate to the indexer: %v", err) |
There was a problem hiding this comment.
setupPromClientControllerTest returns an error but also calls t.Fatalf inside the helper when secret propagation times out. Mixing fatal test exits with error returns makes the helper harder to reuse and can surprise callers; prefer returning the propagation error and let the caller decide whether to fail the test.
| t.Fatalf("secrets did not propagate to the indexer: %v", err) | |
| return nil, fmt.Errorf("secrets did not propagate to the indexer: %w", err) |
4c0864b to
a2ec8aa
Compare
|
[APPROVALNOTIFIER] This PR is APPROVED Approval requirements bypassed by manually added approval. This pull-request has been approved by: The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…validation under newSecretBasedPromClientController
…rovider into newSecretBasedPromClientController
…e previous connection To avoid stalling connections that are not expected to be kept. E.g. when an invalid secret is provided.
a2ec8aa to
4b5be0a
Compare
|
New changes are detected. LGTM label has been removed. |
…about the target expectations
77929be to
d262c7a
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| t.Fatalf("secrets did not propagate to the indexer: %v", err) | ||
| } | ||
| } | ||
|
|
||
| return &promClientControllerTestSetup{ | ||
| fakeClient: fakeClient, | ||
| namespacedInformerFactory: namespacedInformerFactory, |
There was a problem hiding this comment.
setupPromClientControllerTest returns an error but also calls t.Fatalf when secrets fail to propagate. This makes the error return misleading/unusable for callers and can terminate tests unexpectedly. Prefer returning the propagation error (and let callers decide whether to Fatal) instead of calling t.Fatalf inside this helper.
| t.Fatalf("secrets did not propagate to the indexer: %v", err) | |
| } | |
| } | |
| return &promClientControllerTestSetup{ | |
| fakeClient: fakeClient, | |
| namespacedInformerFactory: namespacedInformerFactory, | |
| return nil, fmt.Errorf("secrets did not propagate to the indexer: %w", err) | |
| } | |
| } | |
| return &promClientControllerTestSetup{ | |
| fakeClient: fakeClient, | |
| namespacedSharedInformerFactory: namespacedInformerFactory, |
| // Override the fields needed for this test (no need for a mutex | ||
| // since reconcileInClusterSAToken gets to run later) |
There was a problem hiding this comment.
Comment has an unmatched parenthesis: "Override the fields needed for this test (no need for a mutex". Please close the parenthesis to avoid confusing readers.
| // Override the fields needed for this test (no need for a mutex | |
| // since reconcileInClusterSAToken gets to run later) | |
| // Override the fields needed for this test (no need for a mutex since | |
| // reconcileInClusterSAToken gets to run later). |
… (#4098) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [kubernetes-sigs/descheduler](https://github.com/kubernetes-sigs/descheduler) | minor | `0.34.0` → `v0.35.0` | --- ### Release Notes <details> <summary>kubernetes-sigs/descheduler (kubernetes-sigs/descheduler)</summary> ### [`v0.35.0`](https://github.com/kubernetes-sigs/descheduler/releases/tag/v0.35.0): Descheduler v0.35.0 [Compare Source](kubernetes-sigs/descheduler@v0.34.0...v0.35.0) #### What's Changed - feat: enable pod protection based on storage classes by [@​ricardomaraschini](https://github.com/ricardomaraschini) in [#​1752](kubernetes-sigs/descheduler#1752) - fix: pod resource calculation to consider native sidecars by [@​a7i](https://github.com/a7i) in [#​1771](kubernetes-sigs/descheduler#1771) - docs: fix incorrect gracePeriodSeconds default in README.md by [@​petersalas](https://github.com/petersalas) in [#​1773](kubernetes-sigs/descheduler#1773) - docs: fix README.md link to kubernetes bot commands by [@​Sycrosity](https://github.com/Sycrosity) in [#​1772](kubernetes-sigs/descheduler#1772) - Fix "Current requires cgo or $USER set in environment" error by [@​abelfodil](https://github.com/abelfodil) in [#​1764](kubernetes-sigs/descheduler#1764) - refactor(TestPodLifeTime): remove ineffective owner references assignments by [@​ingvagabund](https://github.com/ingvagabund) in [#​1781](kubernetes-sigs/descheduler#1781) - refactor(TestPodLifeTime): have a pod fully created through BuildTestPod without any edits by [@​ingvagabund](https://github.com/ingvagabund) in [#​1782](kubernetes-sigs/descheduler#1782) - refactor(TestPodLifeTime): consolidations, simplifications and node instance for each unit test by [@​ingvagabund](https://github.com/ingvagabund) in [#​1783](kubernetes-sigs/descheduler#1783) - refactor(TestPodLifeTime): inline pod creation in each unit test to avoid accidental pod spec updates by [@​ingvagabund](https://github.com/ingvagabund) in [#​1784](kubernetes-sigs/descheduler#1784) - refactor(TestPodLifeTime): update unit test names and simplify pod creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1785](kubernetes-sigs/descheduler#1785) - feat(TestPodLifeTime): check only expected pods are evicted by [@​ingvagabund](https://github.com/ingvagabund) in [#​1787](kubernetes-sigs/descheduler#1787) - feat(PodLifeTime): document the plugin with details that can be used for reasoning during reviews and design discussions by [@​ingvagabund](https://github.com/ingvagabund) in [#​1789](kubernetes-sigs/descheduler#1789) - refactor(TestPodLifeTime): split the unit tests into smaller semantically close groups by [@​ingvagabund](https://github.com/ingvagabund) in [#​1790](kubernetes-sigs/descheduler#1790) - refactor(TestFindDuplicatePods): have a pod fully created through BuildTestPod without any edits by [@​ingvagabund](https://github.com/ingvagabund) in [#​1791](kubernetes-sigs/descheduler#1791) - refactor(TestFindDuplicatePods): reduce duplicates and inline by [@​ingvagabund](https://github.com/ingvagabund) in [#​1792](kubernetes-sigs/descheduler#1792) - refactor(TestRemoveDuplicates): reduce test code duplication by [@​ingvagabund](https://github.com/ingvagabund) in [#​1793](kubernetes-sigs/descheduler#1793) - refactor(TestRemovePodsHavingTooManyRestarts): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1794](kubernetes-sigs/descheduler#1794) - refactor(TestPodAntiAffinity): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1795](kubernetes-sigs/descheduler#1795) - refactor(TestRemovePodsViolatingNodeAffinity): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1796](kubernetes-sigs/descheduler#1796) - refactor(TestDeletePodsViolatingNodeTaints): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1797](kubernetes-sigs/descheduler#1797) - doc: introduce contributing guidelines specific to the project by [@​ingvagabund](https://github.com/ingvagabund) in [#​1798](kubernetes-sigs/descheduler#1798) - refactor(TestDefaultEvictor): de-dup code and use helpers by [@​ingvagabund](https://github.com/ingvagabund) in [#​1803](kubernetes-sigs/descheduler#1803) - refactor(plugins): simplify the way pods are created by [@​ingvagabund](https://github.com/ingvagabund) in [#​1804](kubernetes-sigs/descheduler#1804) - fix(TestReadyNodesWithNodeSelector): make sure nodeLister.List always returns a non-empty list so the lister is always tested by [@​ingvagabund](https://github.com/ingvagabund) in [#​1800](kubernetes-sigs/descheduler#1800) - refactor(pkg/framework/profile): dedup unit test code by [@​ingvagabund](https://github.com/ingvagabund) in [#​1806](kubernetes-sigs/descheduler#1806) - doc(Design Decisions FAQ): Why doesn't the framework provide helpers for registering and retrieving indexers for plugins by [@​ingvagabund](https://github.com/ingvagabund) in [#​1807](kubernetes-sigs/descheduler#1807) - feat(profile): inject a plugin instance ID to each built plugin by [@​ingvagabund](https://github.com/ingvagabund) in [#​1808](kubernetes-sigs/descheduler#1808) - feat: register a node indexer for the global node selector instead of listing nodes with the selector by [@​ingvagabund](https://github.com/ingvagabund) in [#​1802](kubernetes-sigs/descheduler#1802) - chore(pkg/descheduler): make TestPodEvictorReset table driven by [@​ingvagabund](https://github.com/ingvagabund) in [#​1810](kubernetes-sigs/descheduler#1810) - refactor(pkg/operator): replace informerResource with a kubeClientSandbox by [@​ingvagabund](https://github.com/ingvagabund) in [#​1811](kubernetes-sigs/descheduler#1811) - refactor(pkg/descheduler): more handlers and dropping unused code by [@​ingvagabund](https://github.com/ingvagabund) in [#​1813](kubernetes-sigs/descheduler#1813) - refactor(pkg/descheduler): create fake shared informer factory only once by [@​ingvagabund](https://github.com/ingvagabund) in [#​1812](kubernetes-sigs/descheduler#1812) - fix(kubeClientSandbox): do not wait for pods in the fake indexers if they are already deleted by [@​ingvagabund](https://github.com/ingvagabund) in [#​1814](kubernetes-sigs/descheduler#1814) - test(pkg/descheduler): test a prometheus client update propagates to a plugin profile handle by [@​ingvagabund](https://github.com/ingvagabund) in [#​1816](kubernetes-sigs/descheduler#1816) - Add namespace label selector by [@​W1seKappa](https://github.com/W1seKappa) in [#​1786](kubernetes-sigs/descheduler#1786) - tests: Prom client testing by [@​ingvagabund](https://github.com/ingvagabund) in [#​1818](kubernetes-sigs/descheduler#1818) - Deduplicate descheduler initialization code so unit tests test more of the production code by [@​ingvagabund](https://github.com/ingvagabund) in [#​1819](kubernetes-sigs/descheduler#1819) - test(token reconciling): have tests initialize the prom client reconciling through the descheduler's bootstraping entry too by [@​ingvagabund](https://github.com/ingvagabund) in [#​1820](kubernetes-sigs/descheduler#1820) - refactor(promClientController): split it into two prom client controllers by [@​ingvagabund](https://github.com/ingvagabund) in [#​1821](kubernetes-sigs/descheduler#1821) - feat(pkg/descheduler): create profiles outside the descheduling cycle by [@​ingvagabund](https://github.com/ingvagabund) in [#​1815](kubernetes-sigs/descheduler#1815) - refactor: move prometheus client controller related code under a seperate file by [@​ingvagabund](https://github.com/ingvagabund) in [#​1823](kubernetes-sigs/descheduler#1823) - Update go dependecies to fix vulnerabilities by [@​sammedsingalkar09](https://github.com/sammedsingalkar09) in [#​1822](kubernetes-sigs/descheduler#1822) - chore: extend the list of supported Go versions by [@​ingvagabund](https://github.com/ingvagabund) in [#​1828](kubernetes-sigs/descheduler#1828) - bump(golangci-lint): update and migrate by [@​ingvagabund](https://github.com/ingvagabund) in [#​1829](kubernetes-sigs/descheduler#1829) - \[v0.35.0] bump to kubernetes 1.35 deps by [@​a7i](https://github.com/a7i) in [#​1827](kubernetes-sigs/descheduler#1827) - chore: upgrade github.com/gomarkdown/markdown to latest version by [@​a7i](https://github.com/a7i) in [#​1831](kubernetes-sigs/descheduler#1831) - \[v0.35.0] update docs and manifests by [@​a7i](https://github.com/a7i) in [#​1832](kubernetes-sigs/descheduler#1832) - Change annotations condition to deploymentAnnotations for Deployment object annotations by [@​davidandreoletti](https://github.com/davidandreoletti) in [#​1830](kubernetes-sigs/descheduler#1830) #### New Contributors - [@​petersalas](https://github.com/petersalas) made their first contribution in [#​1773](kubernetes-sigs/descheduler#1773) - [@​Sycrosity](https://github.com/Sycrosity) made their first contribution in [#​1772](kubernetes-sigs/descheduler#1772) - [@​abelfodil](https://github.com/abelfodil) made their first contribution in [#​1764](kubernetes-sigs/descheduler#1764) - [@​W1seKappa](https://github.com/W1seKappa) made their first contribution in [#​1786](kubernetes-sigs/descheduler#1786) - [@​sammedsingalkar09](https://github.com/sammedsingalkar09) made their first contribution in [#​1822](kubernetes-sigs/descheduler#1822) - [@​davidandreoletti](https://github.com/davidandreoletti) made their first contribution in [#​1830](kubernetes-sigs/descheduler#1830) **Full Changelog**: <kubernetes-sigs/descheduler@v0.34.0...v0.35.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS43IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4098 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [descheduler](https://github.com/kubernetes-sigs/descheduler) | minor | `0.34.0` → `0.35.0` | --- ### Release Notes <details> <summary>kubernetes-sigs/descheduler (descheduler)</summary> ### [`v0.35.0`](https://github.com/kubernetes-sigs/descheduler/releases/tag/v0.35.0): Descheduler v0.35.0 [Compare Source](kubernetes-sigs/descheduler@v0.34.0...v0.35.0) ##### What's Changed - feat: enable pod protection based on storage classes by [@​ricardomaraschini](https://github.com/ricardomaraschini) in [#​1752](kubernetes-sigs/descheduler#1752) - fix: pod resource calculation to consider native sidecars by [@​a7i](https://github.com/a7i) in [#​1771](kubernetes-sigs/descheduler#1771) - docs: fix incorrect gracePeriodSeconds default in README.md by [@​petersalas](https://github.com/petersalas) in [#​1773](kubernetes-sigs/descheduler#1773) - docs: fix README.md link to kubernetes bot commands by [@​Sycrosity](https://github.com/Sycrosity) in [#​1772](kubernetes-sigs/descheduler#1772) - Fix "Current requires cgo or $USER set in environment" error by [@​abelfodil](https://github.com/abelfodil) in [#​1764](kubernetes-sigs/descheduler#1764) - refactor(TestPodLifeTime): remove ineffective owner references assignments by [@​ingvagabund](https://github.com/ingvagabund) in [#​1781](kubernetes-sigs/descheduler#1781) - refactor(TestPodLifeTime): have a pod fully created through BuildTestPod without any edits by [@​ingvagabund](https://github.com/ingvagabund) in [#​1782](kubernetes-sigs/descheduler#1782) - refactor(TestPodLifeTime): consolidations, simplifications and node instance for each unit test by [@​ingvagabund](https://github.com/ingvagabund) in [#​1783](kubernetes-sigs/descheduler#1783) - refactor(TestPodLifeTime): inline pod creation in each unit test to avoid accidental pod spec updates by [@​ingvagabund](https://github.com/ingvagabund) in [#​1784](kubernetes-sigs/descheduler#1784) - refactor(TestPodLifeTime): update unit test names and simplify pod creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1785](kubernetes-sigs/descheduler#1785) - feat(TestPodLifeTime): check only expected pods are evicted by [@​ingvagabund](https://github.com/ingvagabund) in [#​1787](kubernetes-sigs/descheduler#1787) - feat(PodLifeTime): document the plugin with details that can be used for reasoning during reviews and design discussions by [@​ingvagabund](https://github.com/ingvagabund) in [#​1789](kubernetes-sigs/descheduler#1789) - refactor(TestPodLifeTime): split the unit tests into smaller semantically close groups by [@​ingvagabund](https://github.com/ingvagabund) in [#​1790](kubernetes-sigs/descheduler#1790) - refactor(TestFindDuplicatePods): have a pod fully created through BuildTestPod without any edits by [@​ingvagabund](https://github.com/ingvagabund) in [#​1791](kubernetes-sigs/descheduler#1791) - refactor(TestFindDuplicatePods): reduce duplicates and inline by [@​ingvagabund](https://github.com/ingvagabund) in [#​1792](kubernetes-sigs/descheduler#1792) - refactor(TestRemoveDuplicates): reduce test code duplication by [@​ingvagabund](https://github.com/ingvagabund) in [#​1793](kubernetes-sigs/descheduler#1793) - refactor(TestRemovePodsHavingTooManyRestarts): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1794](kubernetes-sigs/descheduler#1794) - refactor(TestPodAntiAffinity): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1795](kubernetes-sigs/descheduler#1795) - refactor(TestRemovePodsViolatingNodeAffinity): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1796](kubernetes-sigs/descheduler#1796) - refactor(TestDeletePodsViolatingNodeTaints): inline object creation by [@​ingvagabund](https://github.com/ingvagabund) in [#​1797](kubernetes-sigs/descheduler#1797) - doc: introduce contributing guidelines specific to the project by [@​ingvagabund](https://github.com/ingvagabund) in [#​1798](kubernetes-sigs/descheduler#1798) - refactor(TestDefaultEvictor): de-dup code and use helpers by [@​ingvagabund](https://github.com/ingvagabund) in [#​1803](kubernetes-sigs/descheduler#1803) - refactor(plugins): simplify the way pods are created by [@​ingvagabund](https://github.com/ingvagabund) in [#​1804](kubernetes-sigs/descheduler#1804) - fix(TestReadyNodesWithNodeSelector): make sure nodeLister.List always returns a non-empty list so the lister is always tested by [@​ingvagabund](https://github.com/ingvagabund) in [#​1800](kubernetes-sigs/descheduler#1800) - refactor(pkg/framework/profile): dedup unit test code by [@​ingvagabund](https://github.com/ingvagabund) in [#​1806](kubernetes-sigs/descheduler#1806) - doc(Design Decisions FAQ): Why doesn't the framework provide helpers for registering and retrieving indexers for plugins by [@​ingvagabund](https://github.com/ingvagabund) in [#​1807](kubernetes-sigs/descheduler#1807) - feat(profile): inject a plugin instance ID to each built plugin by [@​ingvagabund](https://github.com/ingvagabund) in [#​1808](kubernetes-sigs/descheduler#1808) - feat: register a node indexer for the global node selector instead of listing nodes with the selector by [@​ingvagabund](https://github.com/ingvagabund) in [#​1802](kubernetes-sigs/descheduler#1802) - chore(pkg/descheduler): make TestPodEvictorReset table driven by [@​ingvagabund](https://github.com/ingvagabund) in [#​1810](kubernetes-sigs/descheduler#1810) - refactor(pkg/operator): replace informerResource with a kubeClientSandbox by [@​ingvagabund](https://github.com/ingvagabund) in [#​1811](kubernetes-sigs/descheduler#1811) - refactor(pkg/descheduler): more handlers and dropping unused code by [@​ingvagabund](https://github.com/ingvagabund) in [#​1813](kubernetes-sigs/descheduler#1813) - refactor(pkg/descheduler): create fake shared informer factory only once by [@​ingvagabund](https://github.com/ingvagabund) in [#​1812](kubernetes-sigs/descheduler#1812) - fix(kubeClientSandbox): do not wait for pods in the fake indexers if they are already deleted by [@​ingvagabund](https://github.com/ingvagabund) in [#​1814](kubernetes-sigs/descheduler#1814) - test(pkg/descheduler): test a prometheus client update propagates to a plugin profile handle by [@​ingvagabund](https://github.com/ingvagabund) in [#​1816](kubernetes-sigs/descheduler#1816) - Add namespace label selector by [@​W1seKappa](https://github.com/W1seKappa) in [#​1786](kubernetes-sigs/descheduler#1786) - tests: Prom client testing by [@​ingvagabund](https://github.com/ingvagabund) in [#​1818](kubernetes-sigs/descheduler#1818) - Deduplicate descheduler initialization code so unit tests test more of the production code by [@​ingvagabund](https://github.com/ingvagabund) in [#​1819](kubernetes-sigs/descheduler#1819) - test(token reconciling): have tests initialize the prom client reconciling through the descheduler's bootstraping entry too by [@​ingvagabund](https://github.com/ingvagabund) in [#​1820](kubernetes-sigs/descheduler#1820) - refactor(promClientController): split it into two prom client controllers by [@​ingvagabund](https://github.com/ingvagabund) in [#​1821](kubernetes-sigs/descheduler#1821) - feat(pkg/descheduler): create profiles outside the descheduling cycle by [@​ingvagabund](https://github.com/ingvagabund) in [#​1815](kubernetes-sigs/descheduler#1815) - refactor: move prometheus client controller related code under a seperate file by [@​ingvagabund](https://github.com/ingvagabund) in [#​1823](kubernetes-sigs/descheduler#1823) - Update go dependecies to fix vulnerabilities by [@​sammedsingalkar09](https://github.com/sammedsingalkar09) in [#​1822](kubernetes-sigs/descheduler#1822) - chore: extend the list of supported Go versions by [@​ingvagabund](https://github.com/ingvagabund) in [#​1828](kubernetes-sigs/descheduler#1828) - bump(golangci-lint): update and migrate by [@​ingvagabund](https://github.com/ingvagabund) in [#​1829](kubernetes-sigs/descheduler#1829) - \[v0.35.0] bump to kubernetes 1.35 deps by [@​a7i](https://github.com/a7i) in [#​1827](kubernetes-sigs/descheduler#1827) - chore: upgrade github.com/gomarkdown/markdown to latest version by [@​a7i](https://github.com/a7i) in [#​1831](kubernetes-sigs/descheduler#1831) - \[v0.35.0] update docs and manifests by [@​a7i](https://github.com/a7i) in [#​1832](kubernetes-sigs/descheduler#1832) - Change annotations condition to deploymentAnnotations for Deployment object annotations by [@​davidandreoletti](https://github.com/davidandreoletti) in [#​1830](kubernetes-sigs/descheduler#1830) ##### New Contributors - [@​petersalas](https://github.com/petersalas) made their first contribution in [#​1773](kubernetes-sigs/descheduler#1773) - [@​Sycrosity](https://github.com/Sycrosity) made their first contribution in [#​1772](kubernetes-sigs/descheduler#1772) - [@​abelfodil](https://github.com/abelfodil) made their first contribution in [#​1764](kubernetes-sigs/descheduler#1764) - [@​W1seKappa](https://github.com/W1seKappa) made their first contribution in [#​1786](kubernetes-sigs/descheduler#1786) - [@​sammedsingalkar09](https://github.com/sammedsingalkar09) made their first contribution in [#​1822](kubernetes-sigs/descheduler#1822) - [@​davidandreoletti](https://github.com/davidandreoletti) made their first contribution in [#​1830](kubernetes-sigs/descheduler#1830) **Full Changelog**: <kubernetes-sigs/descheduler@v0.34.0...v0.35.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS43IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhcnQiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4099 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Description
The current prometheus client reconciler is serving two purposes which are not cleanly similar. E.g. secret based reconciliation is async, in cluster reconciliation sync. Also, secret reconciler requires more validation and more complex initialization. By dividing it into two both the testing and the overall interpretation of it gets simplified.
Checklist
Please ensure your pull request meets the following criteria before submitting
for review, these items will be used by reviewers to assess the quality and
completeness of your changes: