Skip to content

refactor(promClientController): split it into two prom client controllers#1821

Merged
k8s-ci-robot merged 5 commits intokubernetes-sigs:masterfrom
ingvagabund:prom-client-controllers
Feb 4, 2026
Merged

refactor(promClientController): split it into two prom client controllers#1821
k8s-ci-robot merged 5 commits intokubernetes-sigs:masterfrom
ingvagabund:prom-client-controllers

Conversation

@ingvagabund
Copy link
Copy Markdown
Contributor

@ingvagabund ingvagabund commented Feb 4, 2026

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:

  • Code Readability: Is the code easy to understand, well-structured, and consistent with project conventions?
  • Naming Conventions: Are variable, function, and structs descriptive and consistent?
  • Code Duplication: Is there any repeated code that should be refactored?
  • Function/Method Size: Are functions/methods short and focused on a single task?
  • Comments & Documentation: Are comments clear, useful, and not excessive? Were comments updated where necessary?
  • Error Handling: Are errors handled appropriately ?
  • Testing: Are there sufficient unit/integration tests?
  • Performance: Are there any obvious performance issues or unnecessary computations?
  • Dependencies: Are new dependencies justified ?
  • Logging & Monitoring: Is logging used appropriately (not too verbose, not too silent)?
  • Backward Compatibility: Does this change break any existing functionality or APIs?
  • Resource Management: Are resources (files, connections, memory) managed and released properly?
  • PR Description: Is the PR description clear, providing enough context and explaining the motivation for the change?
  • Documentation & Changelog: Are README and docs updated if necessary?

Copilot AI review requested due to automatic review settings February 4, 2026 14:10
@k8s-ci-robot k8s-ci-robot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 4, 2026
@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Feb 4, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 inClusterPromClientController and secretBasedPromClientController and 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.go to 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.

@ingvagabund ingvagabund force-pushed the prom-client-controllers branch 2 times, most recently from f7dd04c to c2f2ec1 Compare February 4, 2026 14:41
Copilot AI review requested due to automatic review settings February 4, 2026 14:41
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +744 to +745
if prometheusConfig != nil && configureSecretPromClientReconciler(prometheusConfig) {
namespacedSharedInformerFactory = informers.NewSharedInformerFactoryWithOptions(rs.Client, 0, informers.WithTransform(trimManagedFields), informers.WithNamespace(prometheusConfig.AuthToken.SecretReference.Namespace))
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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),
)

Copilot uses AI. Check for mistakes.
@ingvagabund ingvagabund force-pushed the prom-client-controllers branch 2 times, most recently from 1694b63 to f80d35f Compare February 4, 2026 15:08
Copilot AI review requested due to automatic review settings February 4, 2026 15:08
@ingvagabund ingvagabund changed the title wip: refactor(promClientController): split it into two prom client controllers refactor(promClientController): split it into two prom client controllers Feb 4, 2026
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 4, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

}

prometheusConfig := getPrometheusConfig(deschedulerPolicy.MetricsProviders)
if prometheusConfig != nil {
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
if prometheusConfig != nil {
if prometheusConfig != nil {
if prometheusConfig.URL == "" {
return nil, fmt.Errorf("prometheus metrics provider is configured but URL is empty")
}

Copilot uses AI. Check for mistakes.
Comment on lines +268 to +282
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)
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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)
}

Copilot uses AI. Check for mistakes.
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)
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
t.Fatalf("secrets did not propagate to the indexer: %v", err)
return nil, fmt.Errorf("secrets did not propagate to the indexer: %w", err)

Copilot uses AI. Check for mistakes.
@k8s-ci-robot k8s-ci-robot added size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. and removed size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Feb 4, 2026
@ingvagabund ingvagabund force-pushed the prom-client-controllers branch from 4c0864b to a2ec8aa Compare February 4, 2026 16:00
Copilot AI review requested due to automatic review settings February 4, 2026 16:00
@ingvagabund ingvagabund added lgtm "Looks good to me", indicates that a PR is ready to be merged. approved Indicates a PR has been approved by an approver from all required OWNERS files. labels Feb 4, 2026
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

[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

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@ingvagabund ingvagabund removed the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Feb 4, 2026
…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.
@ingvagabund ingvagabund force-pushed the prom-client-controllers branch from a2ec8aa to 4b5be0a Compare February 4, 2026 16:16
@ingvagabund ingvagabund added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Feb 4, 2026
Copilot AI review requested due to automatic review settings February 4, 2026 16:38
@k8s-ci-robot k8s-ci-robot removed the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Feb 4, 2026
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

New changes are detected. LGTM label has been removed.

@ingvagabund ingvagabund force-pushed the prom-client-controllers branch from 77929be to d262c7a Compare February 4, 2026 16:44
@ingvagabund ingvagabund added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Feb 4, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +1856 to 1862
t.Fatalf("secrets did not propagate to the indexer: %v", err)
}
}

return &promClientControllerTestSetup{
fakeClient: fakeClient,
namespacedInformerFactory: namespacedInformerFactory,
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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,

Copilot uses AI. Check for mistakes.
Comment on lines +2568 to +2569
// Override the fields needed for this test (no need for a mutex
// since reconcileInClusterSAToken gets to run later)
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
// 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).

Copilot uses AI. Check for mistakes.
@k8s-ci-robot k8s-ci-robot merged commit fc863ff into kubernetes-sigs:master Feb 4, 2026
9 checks passed
@ingvagabund ingvagabund deleted the prom-client-controllers branch February 4, 2026 17:21
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Feb 20, 2026
… (#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 [@&#8203;ricardomaraschini](https://github.com/ricardomaraschini) in [#&#8203;1752](kubernetes-sigs/descheduler#1752)
- fix: pod resource calculation to consider native sidecars by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1771](kubernetes-sigs/descheduler#1771)
- docs: fix incorrect gracePeriodSeconds default in README.md by [@&#8203;petersalas](https://github.com/petersalas) in [#&#8203;1773](kubernetes-sigs/descheduler#1773)
- docs: fix README.md link to kubernetes bot commands by [@&#8203;Sycrosity](https://github.com/Sycrosity) in [#&#8203;1772](kubernetes-sigs/descheduler#1772)
- Fix "Current requires cgo or $USER set in environment" error by [@&#8203;abelfodil](https://github.com/abelfodil) in [#&#8203;1764](kubernetes-sigs/descheduler#1764)
- refactor(TestPodLifeTime): remove ineffective owner references assignments by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1781](kubernetes-sigs/descheduler#1781)
- refactor(TestPodLifeTime): have a pod fully created through BuildTestPod without any edits by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1782](kubernetes-sigs/descheduler#1782)
- refactor(TestPodLifeTime): consolidations, simplifications and node instance for each unit test by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1783](kubernetes-sigs/descheduler#1783)
- refactor(TestPodLifeTime): inline pod creation in each unit test to avoid accidental pod spec updates by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1784](kubernetes-sigs/descheduler#1784)
- refactor(TestPodLifeTime): update unit test names and simplify pod creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1785](kubernetes-sigs/descheduler#1785)
- feat(TestPodLifeTime): check only expected pods are evicted by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1787](kubernetes-sigs/descheduler#1787)
- feat(PodLifeTime): document the plugin with details that can be used for reasoning during reviews and design discussions by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1789](kubernetes-sigs/descheduler#1789)
- refactor(TestPodLifeTime): split the unit tests into smaller semantically close groups by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1790](kubernetes-sigs/descheduler#1790)
- refactor(TestFindDuplicatePods): have a pod fully created through BuildTestPod without any edits by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1791](kubernetes-sigs/descheduler#1791)
- refactor(TestFindDuplicatePods): reduce duplicates and inline by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1792](kubernetes-sigs/descheduler#1792)
- refactor(TestRemoveDuplicates): reduce test code duplication by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1793](kubernetes-sigs/descheduler#1793)
- refactor(TestRemovePodsHavingTooManyRestarts): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1794](kubernetes-sigs/descheduler#1794)
- refactor(TestPodAntiAffinity): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1795](kubernetes-sigs/descheduler#1795)
- refactor(TestRemovePodsViolatingNodeAffinity): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1796](kubernetes-sigs/descheduler#1796)
- refactor(TestDeletePodsViolatingNodeTaints): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1797](kubernetes-sigs/descheduler#1797)
- doc: introduce contributing guidelines specific to the project by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1798](kubernetes-sigs/descheduler#1798)
- refactor(TestDefaultEvictor): de-dup code and use helpers by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1803](kubernetes-sigs/descheduler#1803)
- refactor(plugins): simplify the way pods are created by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1804](kubernetes-sigs/descheduler#1804)
- fix(TestReadyNodesWithNodeSelector): make sure nodeLister.List always returns a non-empty list so the lister is always tested by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1800](kubernetes-sigs/descheduler#1800)
- refactor(pkg/framework/profile): dedup unit test code by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1806](kubernetes-sigs/descheduler#1806)
- doc(Design Decisions FAQ): Why doesn't the framework provide helpers for registering and retrieving indexers for plugins by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1807](kubernetes-sigs/descheduler#1807)
- feat(profile): inject a plugin instance ID to each built plugin by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1808](kubernetes-sigs/descheduler#1808)
- feat: register a node indexer for the global node selector instead of listing nodes with the selector by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1802](kubernetes-sigs/descheduler#1802)
- chore(pkg/descheduler): make TestPodEvictorReset table driven by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1810](kubernetes-sigs/descheduler#1810)
- refactor(pkg/operator): replace informerResource with a kubeClientSandbox by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1811](kubernetes-sigs/descheduler#1811)
- refactor(pkg/descheduler): more handlers and dropping unused code by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1813](kubernetes-sigs/descheduler#1813)
- refactor(pkg/descheduler): create fake shared informer factory only once by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1812](kubernetes-sigs/descheduler#1812)
- fix(kubeClientSandbox): do not wait for pods in the fake indexers if they are already deleted by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1814](kubernetes-sigs/descheduler#1814)
- test(pkg/descheduler): test a prometheus client update propagates to a plugin profile handle by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1816](kubernetes-sigs/descheduler#1816)
- Add namespace label selector by [@&#8203;W1seKappa](https://github.com/W1seKappa) in [#&#8203;1786](kubernetes-sigs/descheduler#1786)
- tests: Prom client testing by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1818](kubernetes-sigs/descheduler#1818)
- Deduplicate descheduler initialization code so unit tests test more of the production code by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1819](kubernetes-sigs/descheduler#1819)
- test(token reconciling): have tests initialize the prom client reconciling through the descheduler's bootstraping entry too by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1820](kubernetes-sigs/descheduler#1820)
- refactor(promClientController): split it into two prom client controllers by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1821](kubernetes-sigs/descheduler#1821)
- feat(pkg/descheduler): create profiles outside the descheduling cycle by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1815](kubernetes-sigs/descheduler#1815)
- refactor: move prometheus client controller related code under a seperate file by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1823](kubernetes-sigs/descheduler#1823)
- Update go dependecies to fix vulnerabilities by [@&#8203;sammedsingalkar09](https://github.com/sammedsingalkar09) in [#&#8203;1822](kubernetes-sigs/descheduler#1822)
- chore: extend the list of supported Go versions by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1828](kubernetes-sigs/descheduler#1828)
- bump(golangci-lint): update and migrate by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1829](kubernetes-sigs/descheduler#1829)
- \[v0.35.0] bump to kubernetes 1.35 deps by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1827](kubernetes-sigs/descheduler#1827)
- chore: upgrade github.com/gomarkdown/markdown to latest version by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1831](kubernetes-sigs/descheduler#1831)
- \[v0.35.0] update docs and manifests by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1832](kubernetes-sigs/descheduler#1832)
- Change annotations condition to deploymentAnnotations for Deployment object annotations by [@&#8203;davidandreoletti](https://github.com/davidandreoletti) in [#&#8203;1830](kubernetes-sigs/descheduler#1830)

#### New Contributors

- [@&#8203;petersalas](https://github.com/petersalas) made their first contribution in [#&#8203;1773](kubernetes-sigs/descheduler#1773)
- [@&#8203;Sycrosity](https://github.com/Sycrosity) made their first contribution in [#&#8203;1772](kubernetes-sigs/descheduler#1772)
- [@&#8203;abelfodil](https://github.com/abelfodil) made their first contribution in [#&#8203;1764](kubernetes-sigs/descheduler#1764)
- [@&#8203;W1seKappa](https://github.com/W1seKappa) made their first contribution in [#&#8203;1786](kubernetes-sigs/descheduler#1786)
- [@&#8203;sammedsingalkar09](https://github.com/sammedsingalkar09) made their first contribution in [#&#8203;1822](kubernetes-sigs/descheduler#1822)
- [@&#8203;davidandreoletti](https://github.com/davidandreoletti) made their first contribution in [#&#8203;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>
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Feb 20, 2026
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 [@&#8203;ricardomaraschini](https://github.com/ricardomaraschini) in [#&#8203;1752](kubernetes-sigs/descheduler#1752)
- fix: pod resource calculation to consider native sidecars by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1771](kubernetes-sigs/descheduler#1771)
- docs: fix incorrect gracePeriodSeconds default in README.md by [@&#8203;petersalas](https://github.com/petersalas) in [#&#8203;1773](kubernetes-sigs/descheduler#1773)
- docs: fix README.md link to kubernetes bot commands by [@&#8203;Sycrosity](https://github.com/Sycrosity) in [#&#8203;1772](kubernetes-sigs/descheduler#1772)
- Fix "Current requires cgo or $USER set in environment" error by [@&#8203;abelfodil](https://github.com/abelfodil) in [#&#8203;1764](kubernetes-sigs/descheduler#1764)
- refactor(TestPodLifeTime): remove ineffective owner references assignments by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1781](kubernetes-sigs/descheduler#1781)
- refactor(TestPodLifeTime): have a pod fully created through BuildTestPod without any edits by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1782](kubernetes-sigs/descheduler#1782)
- refactor(TestPodLifeTime): consolidations, simplifications and node instance for each unit test by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1783](kubernetes-sigs/descheduler#1783)
- refactor(TestPodLifeTime): inline pod creation in each unit test to avoid accidental pod spec updates by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1784](kubernetes-sigs/descheduler#1784)
- refactor(TestPodLifeTime): update unit test names and simplify pod creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1785](kubernetes-sigs/descheduler#1785)
- feat(TestPodLifeTime): check only expected pods are evicted by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1787](kubernetes-sigs/descheduler#1787)
- feat(PodLifeTime): document the plugin with details that can be used for reasoning during reviews and design discussions by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1789](kubernetes-sigs/descheduler#1789)
- refactor(TestPodLifeTime): split the unit tests into smaller semantically close groups by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1790](kubernetes-sigs/descheduler#1790)
- refactor(TestFindDuplicatePods): have a pod fully created through BuildTestPod without any edits by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1791](kubernetes-sigs/descheduler#1791)
- refactor(TestFindDuplicatePods): reduce duplicates and inline by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1792](kubernetes-sigs/descheduler#1792)
- refactor(TestRemoveDuplicates): reduce test code duplication by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1793](kubernetes-sigs/descheduler#1793)
- refactor(TestRemovePodsHavingTooManyRestarts): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1794](kubernetes-sigs/descheduler#1794)
- refactor(TestPodAntiAffinity): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1795](kubernetes-sigs/descheduler#1795)
- refactor(TestRemovePodsViolatingNodeAffinity): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1796](kubernetes-sigs/descheduler#1796)
- refactor(TestDeletePodsViolatingNodeTaints): inline object creation by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1797](kubernetes-sigs/descheduler#1797)
- doc: introduce contributing guidelines specific to the project by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1798](kubernetes-sigs/descheduler#1798)
- refactor(TestDefaultEvictor): de-dup code and use helpers by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1803](kubernetes-sigs/descheduler#1803)
- refactor(plugins): simplify the way pods are created by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1804](kubernetes-sigs/descheduler#1804)
- fix(TestReadyNodesWithNodeSelector): make sure nodeLister.List always returns a non-empty list so the lister is always tested by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1800](kubernetes-sigs/descheduler#1800)
- refactor(pkg/framework/profile): dedup unit test code by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1806](kubernetes-sigs/descheduler#1806)
- doc(Design Decisions FAQ): Why doesn't the framework provide helpers for registering and retrieving indexers for plugins by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1807](kubernetes-sigs/descheduler#1807)
- feat(profile): inject a plugin instance ID to each built plugin by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1808](kubernetes-sigs/descheduler#1808)
- feat: register a node indexer for the global node selector instead of listing nodes with the selector by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1802](kubernetes-sigs/descheduler#1802)
- chore(pkg/descheduler): make TestPodEvictorReset table driven by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1810](kubernetes-sigs/descheduler#1810)
- refactor(pkg/operator): replace informerResource with a kubeClientSandbox by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1811](kubernetes-sigs/descheduler#1811)
- refactor(pkg/descheduler): more handlers and dropping unused code by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1813](kubernetes-sigs/descheduler#1813)
- refactor(pkg/descheduler): create fake shared informer factory only once by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1812](kubernetes-sigs/descheduler#1812)
- fix(kubeClientSandbox): do not wait for pods in the fake indexers if they are already deleted by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1814](kubernetes-sigs/descheduler#1814)
- test(pkg/descheduler): test a prometheus client update propagates to a plugin profile handle by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1816](kubernetes-sigs/descheduler#1816)
- Add namespace label selector by [@&#8203;W1seKappa](https://github.com/W1seKappa) in [#&#8203;1786](kubernetes-sigs/descheduler#1786)
- tests: Prom client testing by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1818](kubernetes-sigs/descheduler#1818)
- Deduplicate descheduler initialization code so unit tests test more of the production code by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1819](kubernetes-sigs/descheduler#1819)
- test(token reconciling): have tests initialize the prom client reconciling through the descheduler's bootstraping entry too by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1820](kubernetes-sigs/descheduler#1820)
- refactor(promClientController): split it into two prom client controllers by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1821](kubernetes-sigs/descheduler#1821)
- feat(pkg/descheduler): create profiles outside the descheduling cycle by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1815](kubernetes-sigs/descheduler#1815)
- refactor: move prometheus client controller related code under a seperate file by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1823](kubernetes-sigs/descheduler#1823)
- Update go dependecies to fix vulnerabilities by [@&#8203;sammedsingalkar09](https://github.com/sammedsingalkar09) in [#&#8203;1822](kubernetes-sigs/descheduler#1822)
- chore: extend the list of supported Go versions by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1828](kubernetes-sigs/descheduler#1828)
- bump(golangci-lint): update and migrate by [@&#8203;ingvagabund](https://github.com/ingvagabund) in [#&#8203;1829](kubernetes-sigs/descheduler#1829)
- \[v0.35.0] bump to kubernetes 1.35 deps by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1827](kubernetes-sigs/descheduler#1827)
- chore: upgrade github.com/gomarkdown/markdown to latest version by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1831](kubernetes-sigs/descheduler#1831)
- \[v0.35.0] update docs and manifests by [@&#8203;a7i](https://github.com/a7i) in [#&#8203;1832](kubernetes-sigs/descheduler#1832)
- Change annotations condition to deploymentAnnotations for Deployment object annotations by [@&#8203;davidandreoletti](https://github.com/davidandreoletti) in [#&#8203;1830](kubernetes-sigs/descheduler#1830)

##### New Contributors

- [@&#8203;petersalas](https://github.com/petersalas) made their first contribution in [#&#8203;1773](kubernetes-sigs/descheduler#1773)
- [@&#8203;Sycrosity](https://github.com/Sycrosity) made their first contribution in [#&#8203;1772](kubernetes-sigs/descheduler#1772)
- [@&#8203;abelfodil](https://github.com/abelfodil) made their first contribution in [#&#8203;1764](kubernetes-sigs/descheduler#1764)
- [@&#8203;W1seKappa](https://github.com/W1seKappa) made their first contribution in [#&#8203;1786](kubernetes-sigs/descheduler#1786)
- [@&#8203;sammedsingalkar09](https://github.com/sammedsingalkar09) made their first contribution in [#&#8203;1822](kubernetes-sigs/descheduler#1822)
- [@&#8203;davidandreoletti](https://github.com/davidandreoletti) made their first contribution in [#&#8203;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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. lgtm "Looks good to me", indicates that a PR is ready to be merged. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants