-
Notifications
You must be signed in to change notification settings - Fork 669
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Implement preferredDuringSchedulingIgnoredDuringExecution for RemovePodsViolatingNodeAffinity #1210
feat: Implement preferredDuringSchedulingIgnoredDuringExecution for RemovePodsViolatingNodeAffinity #1210
Conversation
…emovePodsViolatingNodeAffinity Now, the descheduler can detect and evict pods that are not optimally allocated according to the "preferred..." node affinity. It only evicts a pod if it can be scheduled on a node that scores higher in terms of preferred node affinity than the current one. This can be activated by enabling the RemovePodsViolatingNodeAffinity plugin and passing "preferredDuringSchedulingIgnoredDuringExecution" in the args. For example, imagine we have a pod that prefers nodes with label "key1: value1" with a weight of 10. If this pod is scheduled on a node that doesn't have "key1: value1" as label but there's another node that has this label and where this pod can potentially run, then the descheduler will evict the pod. Another effect of this commit is that the RemovePodsViolatingNodeAffinity plugin will not remove pods that don't fit in the current node but for other reasons than violating the node affinity. Before that, enabling this plugin could cause evictions on pods that were running on tainted nodes without the necessary tolerations. This commit also fixes the wording of some tests from node_affinity_test.go and some parameters and expectations of these tests, which were wrong.
Hi @jordipiqueselles. Thanks for your PR. I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
@a7i @ingvagabund Could you review this PR? Thanks! |
/ok-to-test |
pkg/framework/plugins/removepodsviolatingnodeaffinity/node_affinity.go
Outdated
Show resolved
Hide resolved
pkg/framework/plugins/removepodsviolatingnodeaffinity/node_affinity.go
Outdated
Show resolved
Hide resolved
/cc @knelasevero |
Before checking if a pod can be evicted or if it can be scheduled somewhere else, we first check if it has the corresponding nodeAffinity field defined. Otherwise, the pod is automatically discarded as a candidate. Apart from that, the method that calculates the weight that a pod gives to a node based on its preferred node affinity has been renamed to better reflect what it does.
Thank you @jordipiqueselles this is a great addition! /lgtm |
/label tide/merge-method-squash |
Thanks for this! /approve |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: knelasevero The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [descheduler](https://togithub.com/kubernetes-sigs/descheduler) | minor | `0.27.1` -> `0.28.0` | --- ### Release Notes <details> <summary>kubernetes-sigs/descheduler (descheduler)</summary> ### [`v0.28.0`](https://togithub.com/kubernetes-sigs/descheduler/releases/tag/v0.28.0): Descheduler v0.28.0 [Compare Source](https://togithub.com/kubernetes-sigs/descheduler/compare/v0.27.1...v0.28.0) #### What's Changed - add unit tests for version compatibility check by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1096](https://togithub.com/kubernetes-sigs/descheduler/pull/1096) - fix plugin arg conversion when using multiple profiles with same plugin by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1143](https://togithub.com/kubernetes-sigs/descheduler/pull/1143) - Use dl.k8s.io instead of kubernetes-release bucket by [@​ratnopamc](https://togithub.com/ratnopamc) in [https://github.com/kubernetes-sigs/descheduler/pull/1145](https://togithub.com/kubernetes-sigs/descheduler/pull/1145) - update deprecated sets.String to generic sets by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1146](https://togithub.com/kubernetes-sigs/descheduler/pull/1146) - helm: ability to override command and args. set args inline by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1151](https://togithub.com/kubernetes-sigs/descheduler/pull/1151) - fix: imagepullsecrets indentation for kind: Deployment by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1150](https://togithub.com/kubernetes-sigs/descheduler/pull/1150) - docs: supplement missing link by [@​mikutas](https://togithub.com/mikutas) in [https://github.com/kubernetes-sigs/descheduler/pull/1159](https://togithub.com/kubernetes-sigs/descheduler/pull/1159) - bump chart to v0.27.1 by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1160](https://togithub.com/kubernetes-sigs/descheduler/pull/1160) - Custom labels for ServiceMonitor resource by [@​nlamirault](https://togithub.com/nlamirault) in [https://github.com/kubernetes-sigs/descheduler/pull/1147](https://togithub.com/kubernetes-sigs/descheduler/pull/1147) - pod anti-affinity check among nodes by [@​10hin](https://togithub.com/10hin) in [https://github.com/kubernetes-sigs/descheduler/pull/1033](https://togithub.com/kubernetes-sigs/descheduler/pull/1033) - PodLifeTime: support CrashLoopBackOff container state by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1164](https://togithub.com/kubernetes-sigs/descheduler/pull/1164) - update pause image from 'kubernetes/pause' to 'registry.k8s.io/pause' by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1166](https://togithub.com/kubernetes-sigs/descheduler/pull/1166) - TooManyRestart: state filter for CrashLoopBackOff by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1165](https://togithub.com/kubernetes-sigs/descheduler/pull/1165) - Replace deprecated command with environment file by [@​jongwooo](https://togithub.com/jongwooo) in [https://github.com/kubernetes-sigs/descheduler/pull/1173](https://togithub.com/kubernetes-sigs/descheduler/pull/1173) - use pod informers for listing pods in removepodsviolatingtopologyspreadconstraint and removepodsviolatinginterpodantiaffinity by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1163](https://togithub.com/kubernetes-sigs/descheduler/pull/1163) - removepodsviolatingtopologyspreadconstraint: implement explicit constraints by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1148](https://togithub.com/kubernetes-sigs/descheduler/pull/1148) - FakeClientset: bump watch channel size by [@​ingvagabund](https://togithub.com/ingvagabund) in [https://github.com/kubernetes-sigs/descheduler/pull/1174](https://togithub.com/kubernetes-sigs/descheduler/pull/1174) - deschedule/balance order (continuation) by [@​ingvagabund](https://togithub.com/ingvagabund) in [https://github.com/kubernetes-sigs/descheduler/pull/1177](https://togithub.com/kubernetes-sigs/descheduler/pull/1177) - bump log level for processing info by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1141](https://togithub.com/kubernetes-sigs/descheduler/pull/1141) - fix priority threshold by name alone by [@​knelasevero](https://togithub.com/knelasevero) in [https://github.com/kubernetes-sigs/descheduler/pull/1186](https://togithub.com/kubernetes-sigs/descheduler/pull/1186) - feat: Enable open telemetry tracing by [@​harshanarayana](https://togithub.com/harshanarayana) in [https://github.com/kubernetes-sigs/descheduler/pull/1189](https://togithub.com/kubernetes-sigs/descheduler/pull/1189) - bump to k8s 1.28 beta.0 by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1201](https://togithub.com/kubernetes-sigs/descheduler/pull/1201) - nodefit: aggregate errors by [@​lucming](https://togithub.com/lucming) in [https://github.com/kubernetes-sigs/descheduler/pull/1203](https://togithub.com/kubernetes-sigs/descheduler/pull/1203) - fix: base configmap missing plugin RemoveDuplicates by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1207](https://togithub.com/kubernetes-sigs/descheduler/pull/1207) - feat: Implement preferredDuringSchedulingIgnoredDuringExecution for RemovePodsViolatingNodeAffinity by [@​jordipiqueselles](https://togithub.com/jordipiqueselles) in [https://github.com/kubernetes-sigs/descheduler/pull/1210](https://togithub.com/kubernetes-sigs/descheduler/pull/1210) - fix: descheduler_loop_duration_seconds has wrong value by [@​Abirdcfly](https://togithub.com/Abirdcfly) in [https://github.com/kubernetes-sigs/descheduler/pull/1215](https://togithub.com/kubernetes-sigs/descheduler/pull/1215) - .gitattribute to not pollute PRs or stats by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1202](https://togithub.com/kubernetes-sigs/descheduler/pull/1202) - Bump Kubernetes dependencies to v1.28.0 by [@​JaneLiuL](https://togithub.com/JaneLiuL) in [https://github.com/kubernetes-sigs/descheduler/pull/1216](https://togithub.com/kubernetes-sigs/descheduler/pull/1216) - profile: fix span attribute typo by [@​antoinedeschenes](https://togithub.com/antoinedeschenes) in [https://github.com/kubernetes-sigs/descheduler/pull/1221](https://togithub.com/kubernetes-sigs/descheduler/pull/1221) - k8s 1.28: update docs and go-version by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1224](https://togithub.com/kubernetes-sigs/descheduler/pull/1224) #### New Contributors - [@​ratnopamc](https://togithub.com/ratnopamc) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1145](https://togithub.com/kubernetes-sigs/descheduler/pull/1145) - [@​mikutas](https://togithub.com/mikutas) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1159](https://togithub.com/kubernetes-sigs/descheduler/pull/1159) - [@​nlamirault](https://togithub.com/nlamirault) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1147](https://togithub.com/kubernetes-sigs/descheduler/pull/1147) - [@​10hin](https://togithub.com/10hin) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1033](https://togithub.com/kubernetes-sigs/descheduler/pull/1033) - [@​jongwooo](https://togithub.com/jongwooo) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1173](https://togithub.com/kubernetes-sigs/descheduler/pull/1173) - [@​jordipiqueselles](https://togithub.com/jordipiqueselles) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1210](https://togithub.com/kubernetes-sigs/descheduler/pull/1210) - [@​Abirdcfly](https://togithub.com/Abirdcfly) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1215](https://togithub.com/kubernetes-sigs/descheduler/pull/1215) - [@​antoinedeschenes](https://togithub.com/antoinedeschenes) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1221](https://togithub.com/kubernetes-sigs/descheduler/pull/1221) **Full Changelog**: kubernetes-sigs/descheduler@v0.27.0...v0.28.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 becomes conflicted, 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://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi41Ny44IiwidXBkYXRlZEluVmVyIjoiMzYuNTcuOCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: repo-jeeves <106431701+repo-jeeves[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [descheduler](https://github.com/kubernetes-sigs/descheduler) | minor | `0.27.1` -> `0.28.0` | --- ### Release Notes <details> <summary>kubernetes-sigs/descheduler (descheduler)</summary> ### [`v0.28.0`](https://github.com/kubernetes-sigs/descheduler/releases/tag/v0.28.0): Descheduler v0.28.0 [Compare Source](kubernetes-sigs/descheduler@v0.27.1...v0.28.0) #### What's Changed - add unit tests for version compatibility check by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1096 - fix plugin arg conversion when using multiple profiles with same plugin by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1143 - Use dl.k8s.io instead of kubernetes-release bucket by [@​ratnopamc](https://github.com/ratnopamc) in kubernetes-sigs/descheduler#1145 - update deprecated sets.String to generic sets by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1146 - helm: ability to override command and args. set args inline by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1151 - fix: imagepullsecrets indentation for kind: Deployment by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1150 - docs: supplement missing link by [@​mikutas](https://github.com/mikutas) in kubernetes-sigs/descheduler#1159 - bump chart to v0.27.1 by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1160 - Custom labels for ServiceMonitor resource by [@​nlamirault](https://github.com/nlamirault) in kubernetes-sigs/descheduler#1147 - pod anti-affinity check among nodes by [@​10hin](https://github.com/10hin) in kubernetes-sigs/descheduler#1033 - PodLifeTime: support CrashLoopBackOff container state by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1164 - update pause image from 'kubernetes/pause' to 'registry.k8s.io/pause' by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1166 - TooManyRestart: state filter for CrashLoopBackOff by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1165 - Replace deprecated command with environment file by [@​jongwooo](https://github.com/jongwooo) in kubernetes-sigs/descheduler#1173 - use pod informers for listing pods in removepodsviolatingtopologyspreadconstraint and removepodsviolatinginterpodantiaffinity by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1163 - removepodsviolatingtopologyspreadconstraint: implement explicit constraints by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1148 - FakeClientset: bump watch channel size by [@​ingvagabund](https://github.com/ingvagabund) in kubernetes-sigs/descheduler#1174 - deschedule/balance order (continuation) by [@​ingvagabund](https://github.com/ingvagabund) in kubernetes-sigs/descheduler#1177 - bump log level for processing info by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1141 - fix priority threshold by name alone by [@​knelasevero](https://github.com/knelasevero) in kubernetes-sigs/descheduler#1186 - feat: Enable open telemetry tracing by [@​harshanarayana](https://github.com/harshanarayana) in kubernetes-sigs/descheduler#1189 - bump to k8s 1.28 beta.0 by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1201 - nodefit: aggregate errors by [@​lucming](https://github.com/lucming) in kubernetes-sigs/descheduler#1203 - fix: base configmap missing plugin RemoveDuplicates by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1207 - feat: Implement preferredDuringSchedulingIgnoredDuringExecution for RemovePodsViolatingNodeAffinity by [@​jordipiqueselles](https://github.com/jordipiqueselles) in kubernetes-sigs/descheduler#1210 - fix: descheduler_loop_duration_seconds has wrong value by [@​Abirdcfly](https://github.com/Abirdcfly) in kubernetes-sigs/descheduler#1215 - .gitattribute to not pollute PRs or stats by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1202 - Bump Kubernetes dependencies to v1.28.0 by [@​JaneLiuL](https://github.com/JaneLiuL) in kubernetes-sigs/descheduler#1216 - profile: fix span attribute typo by [@​antoinedeschenes](https://github.com/antoinedeschenes) in kubernetes-sigs/descheduler#1221 - k8s 1.28: update docs and go-version by [@​a7i](https://github.com/a7i) in kubernetes-sigs/descheduler#1224 #### New Contributors - [@​ratnopamc](https://github.com/ratnopamc) made their first contribution in kubernetes-sigs/descheduler#1145 - [@​mikutas](https://github.com/mikutas) made their first contribution in kubernetes-sigs/descheduler#1159 - [@​nlamirault](https://github.com/nlamirault) made their first contribution in kubernetes-sigs/descheduler#1147 - [@​10hin](https://github.com/10hin) made their first contribution in kubernetes-sigs/descheduler#1033 - [@​jongwooo](https://github.com/jongwooo) made their first contribution in kubernetes-sigs/descheduler#1173 - [@​jordipiqueselles](https://github.com/jordipiqueselles) made their first contribution in kubernetes-sigs/descheduler#1210 - [@​Abirdcfly](https://github.com/Abirdcfly) made their first contribution in kubernetes-sigs/descheduler#1215 - [@​antoinedeschenes](https://github.com/antoinedeschenes) made their first contribution in kubernetes-sigs/descheduler#1221 **Full Changelog**: kubernetes-sigs/descheduler@v0.27.0...v0.28.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 becomes conflicted, 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:eyJjcmVhdGVkSW5WZXIiOiIzNi41Mi4yIiwidXBkYXRlZEluVmVyIjoiMzYuNTIuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Reviewed-on: https://git.devmem.ru/projects/infra/pulls/949 Co-authored-by: Renovate Bot <renovate@devmem.ru> Co-committed-by: Renovate Bot <renovate@devmem.ru>
…0.28.x (#538) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [descheduler](https://togithub.com/kubernetes-sigs/descheduler) | minor | `0.27.x` -> `0.28.x` | --- ### Release Notes <details> <summary>kubernetes-sigs/descheduler (descheduler)</summary> ### [`v0.28.0`](https://togithub.com/kubernetes-sigs/descheduler/releases/tag/v0.28.0): Descheduler v0.28.0 [Compare Source](https://togithub.com/kubernetes-sigs/descheduler/compare/v0.27.1...v0.28.0) #### What's Changed - add unit tests for version compatibility check by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1096](https://togithub.com/kubernetes-sigs/descheduler/pull/1096) - fix plugin arg conversion when using multiple profiles with same plugin by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1143](https://togithub.com/kubernetes-sigs/descheduler/pull/1143) - Use dl.k8s.io instead of kubernetes-release bucket by [@​ratnopamc](https://togithub.com/ratnopamc) in [https://github.com/kubernetes-sigs/descheduler/pull/1145](https://togithub.com/kubernetes-sigs/descheduler/pull/1145) - update deprecated sets.String to generic sets by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1146](https://togithub.com/kubernetes-sigs/descheduler/pull/1146) - helm: ability to override command and args. set args inline by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1151](https://togithub.com/kubernetes-sigs/descheduler/pull/1151) - fix: imagepullsecrets indentation for kind: Deployment by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1150](https://togithub.com/kubernetes-sigs/descheduler/pull/1150) - docs: supplement missing link by [@​mikutas](https://togithub.com/mikutas) in [https://github.com/kubernetes-sigs/descheduler/pull/1159](https://togithub.com/kubernetes-sigs/descheduler/pull/1159) - bump chart to v0.27.1 by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1160](https://togithub.com/kubernetes-sigs/descheduler/pull/1160) - Custom labels for ServiceMonitor resource by [@​nlamirault](https://togithub.com/nlamirault) in [https://github.com/kubernetes-sigs/descheduler/pull/1147](https://togithub.com/kubernetes-sigs/descheduler/pull/1147) - pod anti-affinity check among nodes by [@​10hin](https://togithub.com/10hin) in [https://github.com/kubernetes-sigs/descheduler/pull/1033](https://togithub.com/kubernetes-sigs/descheduler/pull/1033) - PodLifeTime: support CrashLoopBackOff container state by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1164](https://togithub.com/kubernetes-sigs/descheduler/pull/1164) - update pause image from 'kubernetes/pause' to 'registry.k8s.io/pause' by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1166](https://togithub.com/kubernetes-sigs/descheduler/pull/1166) - TooManyRestart: state filter for CrashLoopBackOff by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1165](https://togithub.com/kubernetes-sigs/descheduler/pull/1165) - Replace deprecated command with environment file by [@​jongwooo](https://togithub.com/jongwooo) in [https://github.com/kubernetes-sigs/descheduler/pull/1173](https://togithub.com/kubernetes-sigs/descheduler/pull/1173) - use pod informers for listing pods in removepodsviolatingtopologyspreadconstraint and removepodsviolatinginterpodantiaffinity by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1163](https://togithub.com/kubernetes-sigs/descheduler/pull/1163) - removepodsviolatingtopologyspreadconstraint: implement explicit constraints by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1148](https://togithub.com/kubernetes-sigs/descheduler/pull/1148) - FakeClientset: bump watch channel size by [@​ingvagabund](https://togithub.com/ingvagabund) in [https://github.com/kubernetes-sigs/descheduler/pull/1174](https://togithub.com/kubernetes-sigs/descheduler/pull/1174) - deschedule/balance order (continuation) by [@​ingvagabund](https://togithub.com/ingvagabund) in [https://github.com/kubernetes-sigs/descheduler/pull/1177](https://togithub.com/kubernetes-sigs/descheduler/pull/1177) - bump log level for processing info by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1141](https://togithub.com/kubernetes-sigs/descheduler/pull/1141) - fix priority threshold by name alone by [@​knelasevero](https://togithub.com/knelasevero) in [https://github.com/kubernetes-sigs/descheduler/pull/1186](https://togithub.com/kubernetes-sigs/descheduler/pull/1186) - feat: Enable open telemetry tracing by [@​harshanarayana](https://togithub.com/harshanarayana) in [https://github.com/kubernetes-sigs/descheduler/pull/1189](https://togithub.com/kubernetes-sigs/descheduler/pull/1189) - bump to k8s 1.28 beta.0 by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1201](https://togithub.com/kubernetes-sigs/descheduler/pull/1201) - nodefit: aggregate errors by [@​lucming](https://togithub.com/lucming) in [https://github.com/kubernetes-sigs/descheduler/pull/1203](https://togithub.com/kubernetes-sigs/descheduler/pull/1203) - fix: base configmap missing plugin RemoveDuplicates by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1207](https://togithub.com/kubernetes-sigs/descheduler/pull/1207) - feat: Implement preferredDuringSchedulingIgnoredDuringExecution for RemovePodsViolatingNodeAffinity by [@​jordipiqueselles](https://togithub.com/jordipiqueselles) in [https://github.com/kubernetes-sigs/descheduler/pull/1210](https://togithub.com/kubernetes-sigs/descheduler/pull/1210) - fix: descheduler_loop_duration_seconds has wrong value by [@​Abirdcfly](https://togithub.com/Abirdcfly) in [https://github.com/kubernetes-sigs/descheduler/pull/1215](https://togithub.com/kubernetes-sigs/descheduler/pull/1215) - .gitattribute to not pollute PRs or stats by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1202](https://togithub.com/kubernetes-sigs/descheduler/pull/1202) - Bump Kubernetes dependencies to v1.28.0 by [@​JaneLiuL](https://togithub.com/JaneLiuL) in [https://github.com/kubernetes-sigs/descheduler/pull/1216](https://togithub.com/kubernetes-sigs/descheduler/pull/1216) - profile: fix span attribute typo by [@​antoinedeschenes](https://togithub.com/antoinedeschenes) in [https://github.com/kubernetes-sigs/descheduler/pull/1221](https://togithub.com/kubernetes-sigs/descheduler/pull/1221) - k8s 1.28: update docs and go-version by [@​a7i](https://togithub.com/a7i) in [https://github.com/kubernetes-sigs/descheduler/pull/1224](https://togithub.com/kubernetes-sigs/descheduler/pull/1224) #### New Contributors - [@​ratnopamc](https://togithub.com/ratnopamc) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1145](https://togithub.com/kubernetes-sigs/descheduler/pull/1145) - [@​mikutas](https://togithub.com/mikutas) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1159](https://togithub.com/kubernetes-sigs/descheduler/pull/1159) - [@​nlamirault](https://togithub.com/nlamirault) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1147](https://togithub.com/kubernetes-sigs/descheduler/pull/1147) - [@​10hin](https://togithub.com/10hin) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1033](https://togithub.com/kubernetes-sigs/descheduler/pull/1033) - [@​jongwooo](https://togithub.com/jongwooo) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1173](https://togithub.com/kubernetes-sigs/descheduler/pull/1173) - [@​jordipiqueselles](https://togithub.com/jordipiqueselles) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1210](https://togithub.com/kubernetes-sigs/descheduler/pull/1210) - [@​Abirdcfly](https://togithub.com/Abirdcfly) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1215](https://togithub.com/kubernetes-sigs/descheduler/pull/1215) - [@​antoinedeschenes](https://togithub.com/antoinedeschenes) made their first contribution in [https://github.com/kubernetes-sigs/descheduler/pull/1221](https://togithub.com/kubernetes-sigs/descheduler/pull/1221) **Full Changelog**: kubernetes-sigs/descheduler@v0.27.0...v0.28.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, 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 [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/teutonet/teutonet-helm-charts). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuNjguMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Chris Werner Rau <cwr@teuto.net>
Now, the descheduler can detect and evict pods that are not optimally allocated according to the "preferred..." node affinity. It only evicts a pod if it can be scheduled on a node that scores higher in terms of preferred node affinity than the current one.
This can be activated by enabling the RemovePodsViolatingNodeAffinity plugin and passing "preferredDuringSchedulingIgnoredDuringExecution" in the args.
For example, imagine we have a pod that prefers nodes with label "key1: value1" with a weight of 10. If this pod is scheduled on a node that doesn't have "key1: value1" as label but there's another node that has this label and where this pod can potentially run, then the descheduler will evict the pod.
Another effect of this commit is that the
RemovePodsViolatingNodeAffinity plugin will not remove pods that don't fit in the current node but for other reasons than violating the node affinity. Before that, enabling this plugin could cause evictions on pods that were running on tainted nodes without the necessary tolerations.
This commit also fixes the wording of some tests from node_affinity_test.go and some parameters and expectations of these tests, which were wrong.