1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-28 14:41:10 +01:00

Compare commits

..

85 Commits

Author SHA1 Message Date
Kubernetes Prow Robot
eca09d470a Merge pull request #1427 from a7i/helm-v0.30.1-release
helm: upgrade to v0.30.1
2024-06-05 05:06:04 -07:00
Amir Alavi
ff2b9dc19f helm: upgrade to v0.30.1 2024-06-05 07:46:59 -04:00
Kubernetes Prow Robot
9f7e7fd5bb Merge pull request #1425 from a7i/automated-cherry-pick-of-#1378-#1390-#1412-#1413-#1416-#1395-upstream-release-1.30
Automated cherry pick of #1378: Fix the replicas type for the helm-chart
#1390: allow 'falsey' value in cmdOption
#1412: fix helm's default deschedulerPolicy
#1413: fix TOC location in Readme
#1416: use cmd context instead of using context.Background()
#1395: fix the issue that the pod anti-filtering rules are not
2024-06-05 02:43:20 -07:00
Hao Fan
7e85b79556 fix the issue that the pod anti-filtering rules are not taking effect 2024-06-05 00:03:33 -04:00
googs1025
8247f92fe0 use cmd context instead of using context.Background() 2024-06-05 00:03:33 -04:00
balazs.benyo
b1391edd2a fix TOC location in Readme 2024-06-05 00:03:32 -04:00
balazs.benyo
a861867022 fix helm's default deschedulerPolicy 2024-06-05 00:03:32 -04:00
Omer Aplatony
a09c4d2c61 Fixed options without value 2024-06-05 00:03:32 -04:00
Omer Aplatony
b33845c383 Added speaces 2024-06-05 00:03:31 -04:00
Omer Aplatony
6a930de272 allow 'falsey' value in cmdOption 2024-06-05 00:03:31 -04:00
Youqing Han
53a27209cf Convert the replicas value to int for comparision 2024-06-05 00:03:31 -04:00
Youqing Han
7182bcdc10 Fix the replicas type for the helm-chart 2024-06-05 00:03:31 -04:00
Kubernetes Prow Robot
79990946eb Merge pull request #1405 from a7i/kustomize-image-tags
[release 1.30] update kustomize image tags and helm versions
2024-05-20 06:36:42 -07:00
Amir Alavi
4671199be7 upgrade helm chart to v0.30.0 2024-05-20 07:23:30 -04:00
Kubernetes Prow Robot
a82fc7b4e4 Merge pull request #1408 from a7i/amir/bump-go-1.22.3
bump to to 1.22.3 to address CVE-2024-24788
2024-05-19 19:56:17 -07:00
Amir Alavi
2ac072e5da bump to to 1.22.3 to address CVE-2024-24788
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-05-19 20:27:28 -04:00
Amir Alavi
ee5bc6991d [release 1.30] update kustomize image tags
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-05-18 21:05:44 -04:00
Kubernetes Prow Robot
0ec8581964 Merge pull request #1400 from a7i/kube-1.30
[release 1.30] upgrade kubernetes version and docs
2024-05-18 13:29:22 -07:00
Amir Alavi
2f7544344b bump golangci lint to v1.58.1
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-05-18 10:23:38 -04:00
Amir Alavi
b08f1fa8b5 fix: code-gen scripts to use new flags
in recent kubernetes 1.30, the code-gen flags were changed. --output-file-base -> --output-file based on 144141734d\#diff-beaa4412ca0edb2451061daa9570ce25858ec41951938fc60f17e2370462ad8e

Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-05-18 10:01:23 -04:00
Amir Alavi
fca4a0970f [release 1.30] upgrade kubernetes version and docs
Signed-off-by: Amir Alavi <amir.alavi@zendesk.com>
2024-05-14 14:17:34 -04:00
Kubernetes Prow Robot
fda4c96937 Merge pull request #1396 from ingvagabund/keps-framework-update-diagram
KEP-753: Descheduling framework: update diagram
2024-05-13 06:03:17 -07:00
Jan Chaloupka
3ef05e9e7f KEP-753: Descheduling framework: update diagram
Update the profiles to reflect only Deschedule and Balance plugins are
run and the order of first Deschedule of all profiles then Balance of
all profiles.
2024-05-11 19:25:43 +02:00
Kubernetes Prow Robot
4bbafe7c19 Merge pull request #1372 from ingvagabund/kep-descheduling-framework
753 - Descheduling framework
2024-05-10 20:37:58 -07:00
Kubernetes Prow Robot
77ec804529 Merge pull request #1381 from yuanchen8911/exitcode
Add an extra parameter ExitCode to RemoveFailedPods
2024-05-02 20:27:52 -07:00
Yuan Chen
25b9edae3c Add an extra parameter ExitCode to RemoveFailedPod
Update README.md

Fix README and test files

Update README

Address a7i's comments

Update README
2024-05-02 17:11:50 -07:00
Jan Chaloupka
8da68695e1 753 - Descheduling framework 2024-04-28 18:52:10 +02:00
Kubernetes Prow Robot
b95380641f Merge pull request #1379 from yuanchen8911/readme
Fix and improve the namespace filtering description in README
2024-04-18 17:55:45 -07:00
Yuan Chen
10d0ce0dfa Fix and improve the namespace filtering description in README 2024-04-18 17:03:32 -07:00
Angelos Mimidis
2c06a33d41 helm: Allow the use of existing policy configMap (#1376)
* Allow the use of existing policy configMap.

* Update charts/descheduler/templates/configmap.yaml

Co-authored-by: Amir Alavi <amiralavi7@gmail.com>

* Remove references to unused variable and update documentation regarding deschedulerPolicy

* Add missing newLine at EOF

* Update charts/descheduler/values.yaml

* remove trailing space

---------

Co-authored-by: Amir Alavi <amiralavi7@gmail.com>
2024-04-16 20:15:51 -07:00
Julian Lawrence
4bd348d9b7 bump to go 1.22.2 (#1374)
* bump to 1.22.2 for CVE-2023-45288

* updated gofmt update/verify versions

* doc update
2024-04-09 16:21:37 -07:00
Gabriel Tiossi
82559025b1 Allow eviction of DaemonSet pods (#1342)
* feat: evictDaemonSetPods flag for evictors

* test: evictDaemonSetPods unit and e2e

* docs: evictDaemonSetPods
2024-04-09 07:47:34 -07:00
Kubernetes Prow Robot
a2c88582fa Merge pull request #1373 from ingvagabund/bump-golangorg-x-net
bump(golang.org/x/net)=v0.23.0
2024-04-08 07:38:16 -07:00
Jan Chaloupka
a321a38328 bump(golang.org/x/net)=v0.23.0 2024-04-08 16:11:17 +02:00
Kubernetes Prow Robot
970b35d737 Merge pull request #1369 from fanhaouu/feat-avoid-defaultEvictorArgs-conversion-twice
avoid redundant type conversion of DefaultEvictorArgs parameter in DefaultEvictor
2024-04-03 18:58:17 -07:00
Kubernetes Prow Robot
364f467421 Merge pull request #1365 from ls-2018/master
`RemoveDuplicates`: reduce cycle times identifying duplicates
2024-04-03 18:58:10 -07:00
Amir Alavi
dd94f2ed93 use v1alpha2 api for helm chart default values (#1139) 2024-03-29 13:29:32 -07:00
Hao Fan
7f20b5c891 fix: avoid redundant type conversion of DefaultEvictorArgs parameters in DefaultEvictor
Signed-off-by: Hao Fan <hao.fan@shopee.com>
2024-03-28 15:25:42 +08:00
Kubernetes Prow Robot
e63e159c04 Merge pull request #1360 from etoster/remove-only-pods-violating-included-node-taints
Add argument to remove only pods violating allowlisted taints
2024-03-25 07:39:12 -07:00
etoster
b7697869f2 add argument to remove only pods violating specific node taints 2024-03-25 15:21:21 +01:00
acejilam
19ced3d630 reduce cycle times
Signed-off-by: acejilam <acejilam@gmail.com>
2024-03-14 22:43:20 +08:00
Kubernetes Prow Robot
82af9c6321 Merge pull request #1257 from a7i/minreplicas-evictor-threshold
skip eviction when replica count is below evictor `minReplicas` threshold setting
2024-03-13 06:46:54 -07:00
Amir Alavi
37df42df7c skip eviction when replica count is below evictor minReplicas threshold setting
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-03-13 09:29:27 -04:00
Pravar Agrawal
ed1efe436f Bump to k8s v0.30.0-alpha.3 (#1359)
* update go.mod for v0.30.0-alpha.3

* update vendor deps

* regenrate go.mod transitive dependencies

---------

Co-authored-by: Amir Alavi <amiralavi7@gmail.com>
2024-03-12 20:09:33 -07:00
Niki Manoledaki
749e81c51c Check whether pod matches the inter-pod anti-affinity of another Pod in a given Node in NodeFit() (#1356)
* Check if Pod matches inter-pod anti-affinity of other pod on node as part of NodeFit()

* Add unit tests for checking inter-pod anti-affinity match in NodeFit()
* Export setPodAntiAffinity() helper func to test utils

* Add docs for inter-pod anti-affinity in README

* Refactor logic for inter-pod anti-affinity to use in multiple pkgs
* Move logic for finding match between pods with antiaffinity out of framework to reuse in other pkgs
* Move interpod antiaffinity funcs to pkg/utils/predicates.go

* Add unit tests for inter-pod anti-affinity check
* Test logic in GroupByNodeName
* Test NodeFit() case where pods matches inter-pod anti-affinity
* Test for inter-pod anti-affinity pods  match terms, have label selector

* NodeFit inter-pod anti-affinity check returns early if affinity spec not set
2024-03-12 19:50:03 -07:00
Kubernetes Prow Robot
dc2cf723bc Merge pull request #1362 from jackfrancis/pod-fit-logs
Disambiguate node fit log messages
2024-03-08 20:21:38 -08:00
Jack Francis
d7c12c5f00 Disambiguate node fit log messages
Signed-off-by: Jack Francis <jackfrancis@gmail.com>
2024-03-06 13:59:14 -08:00
Kubernetes Prow Robot
a5f322521e Merge pull request #1358 from tioxy/fix_metrics_evictoptions
Fix node taint wrong EvictOption field
2024-03-04 05:40:44 -08:00
Gabriel Tiossi
52d226321b fix(plugins): node taint wrong option 2024-03-03 03:28:18 +00:00
Gabriel Tiossi
bb5930eb21 Improve PodEvictor observability through EvictOptions (#1349)
* feat: profile name for pods_evicted metric

Support new label "profile" for "pods_evicted" metric to allow
understand which profiles are evicting more pods, allowing better
observability

* refactor: evictoptions improved observability

Send profile and strategy names for EvictOptions, allowing Evictors to
access observability information

* cleanup: remove unnecessary evictoption reference

* feat: evictoptions for nodeutilzation

Explicit usage of options when invoking evictPods from the helper
function from nodeutilization for both highnodeutilization and
lownodeutilization
2024-03-02 12:06:05 -08:00
Kubernetes Prow Robot
6c865fdf32 Merge pull request #1348 from a7i/amir/toomanyrestarts-initcontainer
fix: `RemovePodsHavingTooManyRestarts` to include `InitContainerStatuses`
2024-02-07 05:36:34 -08:00
Kubernetes Prow Robot
af1ffe7a15 Merge pull request #1346 from a7i/amir/trim-managed-fields
trim managedFields in shared informer factory
2024-02-07 05:17:13 -08:00
Amir Alavi
97c0044a74 fix: RemovePodsHavingTooManyRestarts to include InitContainerStatuses
Signed-off-by: Amir Alavi <amir.alavi@zendesk.com>
2024-02-06 14:21:42 -05:00
Amir Alavi
c7f8670b11 trim managedFields in shared informer factory
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-02-01 09:58:44 -05:00
Kubernetes Prow Robot
99472b6223 Merge pull request #1343 from a7i/CVE-2023-48795
chore: update dependencies for security vulnerabilities (CVE-2023-48795)
2024-01-29 02:08:38 -08:00
Amir Alavi
492da1b8a9 chore: update dependencies for security vulnerabilities (CVE-2023-48795)
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-01-25 11:26:25 -05:00
Kubernetes Prow Robot
70f3619fad Merge pull request #1289 from UAntBou/master
feat: Add support for topologySpreadConstraints
2024-01-17 05:13:05 +01:00
Kubernetes Prow Robot
0d096edbee Merge pull request #1337 from a7i/v1alpha1-deprecate-notice
v1alpha1: log deprecation notice
2024-01-08 16:45:26 +01:00
dongjiang
e7980442ef PodLifeTime: update support pods with container status and pods reason (#1330)
* update support podlifetime status

Signed-off-by: dongjiang1989 <dongjiang1989@126.com>

* update verify gen

Signed-off-by: dongjiang1989 <dongjiang1989@126.com>

---------

Signed-off-by: dongjiang1989 <dongjiang1989@126.com>
2024-01-06 17:50:32 +01:00
Kubernetes Prow Robot
c2cf78a760 Merge pull request #1334 from xujihui1985/fix/correct-failed-unittest
fix(podlifetime): fix failed unittest
2024-01-05 20:17:55 +01:00
xujihui1985
5092595384 fix: filter pod with age greater than MaxPodLifeTimeSeconds
when the pod createtimestamp is greater than the current time (which is
not make sense in real life, but when doing test with such case,
it is possible), it will convert to a large number if we convert it
to uint, and though it can pass the test, but doesn't make sense.
2024-01-03 20:13:26 +08:00
Amir Alavi
d513c5d9d7 v1alpha1: log deprecation notice
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-01-02 20:41:21 -05:00
Kubernetes Prow Robot
4d47bd7f36 Merge pull request #1335 from a7i/helm-v0.29.0
v0.29.0: bump helm chart and update manifests/docs
2024-01-02 19:00:04 +01:00
Amir Alavi
96657caf60 v0.29.0: bump helm chart and update manifests/docs
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2024-01-02 09:34:34 -05:00
Kubernetes Prow Robot
3cf2c03f69 Merge pull request #1336 from dongjiang1989/update-verify-gen
chores(verify-gen): fix verify-gen check
2024-01-02 14:59:51 +01:00
dongjiang1989
1715f4ff81 update verify gen
Signed-off-by: dongjiang1989 <dongjiang1989@126.com>
2024-01-02 16:11:36 +08:00
xujihui1985
ae7467fb27 fix(podlifetime): fix failed unittest
1. correct desired pod creation time
2023-12-28 20:54:25 +08:00
Kubernetes Prow Robot
3a631a3287 Merge pull request #1333 from a7i/CVE-2023-48795
`CVE-2023-48795`: bump k8s deps
2023-12-23 20:08:01 +01:00
Amir Alavi
4ee0740a13 github action: install correct go-version 2023-12-22 09:33:52 -05:00
Amir Alavi
992483d0fe CVE-2023-48795: bump k8s deps
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2023-12-22 08:48:37 -05:00
Kubernetes Prow Robot
8dc250892b Merge pull request #1322 from a7i/k8s-1.29
kubernetes 1.29: update deps and go-version
2023-12-22 09:53:06 +01:00
Amir Alavi
08356fc9fa bump golangci-lint 2023-12-21 16:47:40 -05:00
Amir Alavi
e5e931d333 kubernetes 1.29: update deps and go-version
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2023-12-20 23:15:07 -05:00
Kubernetes Prow Robot
835c6c9fa1 Merge pull request #1318 from a7i/podlifetime-imagepullbackoff
`PodLifeTime`: consider pods with container status `ImagePullBackOff`
2023-12-20 19:46:03 +01:00
Amir Alavi
8a06ed32e2 PodLifeTime: consider pods with container status ImagePullBackOff
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2023-12-18 13:41:06 -05:00
Kubernetes Prow Robot
14b67000d6 Merge pull request #1317 from SataQiu/fix-log-20231212
fix: topologySpreadConstraint fields in structured logs
2023-12-15 17:14:15 +01:00
Kubernetes Prow Robot
dbfcd19713 Merge pull request #1314 from dongjiang1989/dualstack-support
helm: allow configuration of ipFamilyPolicy
2023-12-12 14:54:17 +01:00
SataQiu
f598b8909a fix a bug where the structured log is not displayed correctly 2023-12-12 16:45:50 +08:00
dongjiang1989
e6c9dfa05d allow configuration of ipFamilyPolicy
Signed-off-by: dongjiang1989 <dongjiang1989@126.com>
2023-12-10 09:47:54 +08:00
Victor Gonzalez
f0f7ebbe9a helm: ability to specify security context for pod (#1311)
* helm: ability to specify security context for pod

* Update charts/descheduler/templates/cronjob.yaml

Co-authored-by: Amir Alavi <amiralavi7@gmail.com>

* Update charts/descheduler/templates/deployment.yaml

Co-authored-by: Amir Alavi <amiralavi7@gmail.com>

---------

Co-authored-by: Amir Alavi <amiralavi7@gmail.com>
2023-12-05 04:40:39 +01:00
Kubernetes Prow Robot
4d37ec91a2 Merge pull request #1305 from a7i/helm-v0.28.1-master
release v0.28.1: bump helm chart and images
2023-11-28 18:13:52 +01:00
Amir Alavi
0286871a56 release v0.28.1: bump helm chart and images
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2023-11-28 09:10:03 -05:00
Kubernetes Prow Robot
b2965c0724 Merge pull request #1292 from a7i/amir/k8s-0.28.4
chore: upgrade libs to kubernetes 0.28.4 and matching go version
2023-11-27 20:04:02 +01:00
Amir Alavi
89c7ddbaab chore: upgrade libs to kubernetes 0.28.4 and matching go version
Signed-off-by: Amir Alavi <amiralavi7@gmail.com>
2023-11-27 10:09:04 -05:00
Antoine Boursin
b7a50fd772 feat: Add support for topologySpreadConstraints 2023-11-17 15:48:18 +01:00
1506 changed files with 108394 additions and 49194 deletions

View File

@@ -35,7 +35,7 @@ jobs:
- uses: actions/setup-go@v3
with:
go-version: '1.20.7'
go-version: '1.22.3'
- name: Set up chart-testing
uses: helm/chart-testing-action@v2.2.1

View File

@@ -5,10 +5,10 @@ on:
jobs:
deploy:
strategy:
strategy:
matrix:
k8s-version: ["v1.28.0"]
descheduler-version: ["v0.28.1"]
k8s-version: ["v1.30.0"]
descheduler-version: ["v0.30.0"]
descheduler-api: ["v1alpha1", "v1alpha2"]
manifest: ["deployment"]
runs-on: ubuntu-latest
@@ -21,6 +21,10 @@ jobs:
node_image: kindest/node:${{ matrix.k8s-version }}
kubectl_version: ${{ matrix.k8s-version }}
config: test/kind-config.yaml
- uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: Build image
run: |
VERSION="dev" make dev-image

View File

@@ -11,7 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
FROM golang:1.20.7
FROM golang:1.22.3
WORKDIR /go/src/sigs.k8s.io/descheduler
COPY . .

View File

@@ -26,7 +26,7 @@ ARCHS = amd64 arm arm64
LDFLAGS=-ldflags "-X ${LDFLAG_LOCATION}.version=${VERSION} -X ${LDFLAG_LOCATION}.buildDate=${BUILD} -X ${LDFLAG_LOCATION}.gitbranch=${BRANCH} -X ${LDFLAG_LOCATION}.gitsha1=${SHA1}"
GOLANGCI_VERSION := v1.52.1
GOLANGCI_VERSION := v1.58.1
HAS_GOLANGCI := $(shell ls _output/bin/golangci-lint 2> /dev/null)
GOFUMPT_VERSION := v0.4.0
@@ -134,7 +134,7 @@ gen:
./hack/update-docs.sh
gen-docker:
$(CONTAINER_ENGINE) run --entrypoint make -it -v $(CURRENT_DIR):/go/src/sigs.k8s.io/descheduler -w /go/src/sigs.k8s.io/descheduler golang:1.20.7 gen
$(CONTAINER_ENGINE) run --entrypoint make -it -v $(CURRENT_DIR):/go/src/sigs.k8s.io/descheduler -w /go/src/sigs.k8s.io/descheduler golang:1.22.3 gen
verify-gen:
./hack/verify-conversions.sh

View File

@@ -2,7 +2,7 @@
![Release Charts](https://github.com/kubernetes-sigs/descheduler/workflows/Release%20Charts/badge.svg)
<p align="left">
Click at the [bullet list icon] at the top left corner of the Readme visualization for the github generated table of contents.
↗️ Click at the [bullet list icon] at the top right corner of the Readme visualization for the github generated table of contents.
</p>
<p align="center">
@@ -38,6 +38,8 @@ that version's release branch, as listed below:
|Descheduler Version|Docs link|
|---|---|
|v0.30.x|[`release-1.30`](https://github.com/kubernetes-sigs/descheduler/blob/release-1.30/README.md)|
|v0.29.x|[`release-1.29`](https://github.com/kubernetes-sigs/descheduler/blob/release-1.29/README.md)|
|v0.28.x|[`release-1.28`](https://github.com/kubernetes-sigs/descheduler/blob/release-1.28/README.md)|
|v0.27.x|[`release-1.27`](https://github.com/kubernetes-sigs/descheduler/blob/release-1.27/README.md)|
|v0.26.x|[`release-1.26`](https://github.com/kubernetes-sigs/descheduler/blob/release-1.26/README.md)|
@@ -141,6 +143,7 @@ The Default Evictor Plugin is used by default for filtering pods before processi
|`labelSelector`|`metav1.LabelSelector`||(see [label filtering](#label-filtering))|
|`priorityThreshold`|`priorityThreshold`||(see [priority filtering](#priority-filtering))|
|`nodeFit`|`bool`|`false`|(see [node fit filtering](#node-fit-filtering))|
|`minReplicas`|`uint`|`0`| ignore eviction of pods where owner (e.g. `ReplicaSet`) replicas is below this threshold |
### Example policy
@@ -165,6 +168,7 @@ profiles:
evictFailedBarePods: true
evictLocalStoragePods: true
nodeFit: true
minReplicas: 2
plugins:
# DefaultEvictor is enabled for both `filter` and `preEvictionFilter`
# filter:
@@ -204,7 +208,7 @@ Balance Plugins: These plugins process all pods, or groups of pods, and determin
| [RemovePodsViolatingTopologySpreadConstraint](#removepodsviolatingtopologyspreadconstraint) |Balance|Evicts pods violating TopologySpreadConstraints|
| [RemovePodsHavingTooManyRestarts](#removepodshavingtoomanyrestarts) |Deschedule|Evicts pods having too many restarts|
| [PodLifeTime](#podlifetime) |Deschedule|Evicts pods that have exceeded a specified age limit|
| [RemoveFailedPods](#removefailedpods) |Deschedule|Evicts pods with certain failed reasons|
| [RemoveFailedPods](#removefailedpods) |Deschedule|Evicts pods with certain failed reasons and exit codes|
### RemoveDuplicates
@@ -499,18 +503,22 @@ key=value matches an excludedTaints entry, the taint will be ignored.
For example, excludedTaints entry "dedicated" would match all taints with key "dedicated", regardless of value.
excludedTaints entry "dedicated=special-user" would match taints with key "dedicated" and value "special-user".
If a list of includedTaints is provided, a taint will be considered if and only if it matches an included key **or** key=value from the list. Otherwise it will be ignored. Leaving includedTaints unset will include any taint by default.
**Parameters:**
|Name|Type|
|---|---|
|`excludedTaints`|list(string)|
|`includedTaints`|list(string)|
|`includePreferNoSchedule`|bool|
|`namespaces`|(see [namespace filtering](#namespace-filtering))|
|`labelSelector`|(see [label filtering](#label-filtering))|
**Example:**
````yaml
Setting `excludedTaints`
```yaml
apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
@@ -525,7 +533,25 @@ profiles:
deschedule:
enabled:
- "RemovePodsViolatingNodeTaints"
````
```
Setting `includedTaints`
```yaml
apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
- name: ProfileName
pluginConfig:
- name: "RemovePodsViolatingNodeTaints"
args:
includedTaints:
- decommissioned=end-of-life # include only taints with key "decommissioned" and value "end-of-life"
- reserved # include all taints with key "reserved"
plugins:
deschedule:
enabled:
- "RemovePodsViolatingNodeTaints"
```
### RemovePodsViolatingTopologySpreadConstraint
@@ -636,8 +662,9 @@ profiles:
This strategy evicts pods that are older than `maxPodLifeTimeSeconds`.
You can also specify `states` parameter to **only** evict pods matching the following conditions:
- [Pod Phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) status of: `Running`, `Pending`
- [Container State Waiting](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-state-waiting) condition of: `PodInitializing`, `ContainerCreating`
- [Pod Phase](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) status of: `Running`, `Pending`, `Unknown`
- [Pod Reason](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions) reasons of: `NodeAffinity`, `NodeLost`, `Shutdown`, `UnexpectedAdmissionError`
- [Container State Waiting](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-state-waiting) condition of: `PodInitializing`, `ContainerCreating`, `ImagePullBackOff`, `CrashLoopBackOff`, `CreateContainerConfigError`, `ErrImagePull`, `ImagePullBackOff`, `CreateContainerError`, `InvalidImageName`
If a value for `states` or `podStatusPhases` is not specified,
Pods in any state (even `Running`) are considered for eviction.
@@ -672,10 +699,8 @@ profiles:
```
### RemoveFailedPods
This strategy evicts pods that are in failed status phase.
You can provide an optional parameter to filter by failed `reasons`.
`reasons` can be expanded to include reasons of InitContainers as well by setting the optional parameter `includingInitContainers` to `true`.
You can provide optional parameters to filter by failed pods' and containters' `reasons`. and `exitCodes`. `exitCodes` apply to failed pods' containers with `terminated` state only. `reasons` and `exitCodes` can be expanded to include those of InitContainers as well by setting the optional parameter `includingInitContainers` to `true`.
You can specify an optional parameter `minPodLifetimeSeconds` to evict pods that are older than specified seconds.
Lastly, you can specify the optional parameter `excludeOwnerKinds` and if a pod
has any of these `Kind`s listed as an `OwnerRef`, that pod will not be considered for eviction.
@@ -687,6 +712,7 @@ has any of these `Kind`s listed as an `OwnerRef`, that pod will not be considere
|`minPodLifetimeSeconds`|uint|
|`excludeOwnerKinds`|list(string)|
|`reasons`|list(string)|
|`exitCodes`|list(int32)|
|`includingInitContainers`|bool|
|`namespaces`|(see [namespace filtering](#namespace-filtering))|
|`labelSelector`|(see [label filtering](#label-filtering))|
@@ -703,6 +729,8 @@ profiles:
args:
reasons:
- "NodeAffinity"
exitCodes:
- 1
includingInitContainers: true
excludeOwnerKinds:
- "Job"
@@ -717,7 +745,7 @@ profiles:
### Namespace filtering
The following strategies accept a `namespaces` parameter which allows to specify a list of including, resp. excluding namespaces:
The following strategies accept a `namespaces` parameter which allows to specify a list of including and excluding namespaces respectively:
* `PodLifeTime`
* `RemovePodsHavingTooManyRestarts`
* `RemovePodsViolatingNodeTaints`
@@ -727,11 +755,10 @@ The following strategies accept a `namespaces` parameter which allows to specify
* `RemovePodsViolatingTopologySpreadConstraint`
* `RemoveFailedPods`
The following strategies accept a `evictableNamespaces` parameter which allows to specify a list of excluding namespaces:
The following strategies accept an `evictableNamespaces` parameter which allows to specify a list of excluding namespaces:
* `LowNodeUtilization` and `HighNodeUtilization` (Only filtered right before eviction)
For example with PodLifeTime:
In the following example with `PodLifeTime`, `PodLifeTime` gets executed only over `namespace1` and `namespace2`.
```yaml
apiVersion: "descheduler/v1alpha2"
@@ -752,8 +779,7 @@ profiles:
- "PodLifeTime"
```
In the example `PodLifeTime` gets executed only over `namespace1` and `namespace2`.
The similar holds for `exclude` field:
The similar holds for `exclude` field. The strategy gets executed over all namespaces but `namespace1` and `namespace2` in the following example.
```yaml
apiVersion: "descheduler/v1alpha2"
@@ -774,9 +800,7 @@ profiles:
- "PodLifeTime"
```
The strategy gets executed over all namespaces but `namespace1` and `namespace2`.
It's not allowed to compute `include` with `exclude` field.
It's not allowed to combine `include` with `exclude` field.
### Priority filtering
@@ -879,6 +903,7 @@ profiles:
- `nodeAffinity` on the pod
- Resource `requests` made by the pod and the resources available on other nodes
- Whether any of the other nodes are marked as `unschedulable`
- Any `podAntiAffinity` between the pod and the pods on the other nodes
E.g.
@@ -900,7 +925,7 @@ profiles:
- "PodLifeTime"
```
Note that node fit filtering references the current pod spec, and not that of it's owner.
Note that node fit filtering references the current pod spec, and not that of its owner.
Thus, if the pod is owned by a ReplicationController (and that ReplicationController was modified recently),
the pod may be running with an outdated spec, which the descheduler will reference when determining node fit.
This is expected behavior as the descheduler is a "best-effort" mechanism.
@@ -914,7 +939,7 @@ When the descheduler decides to evict pods from a node, it employs the following
* [Critical pods](https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/) (with priorityClassName set to system-cluster-critical or system-node-critical) are never evicted (unless `evictSystemCriticalPods: true` is set).
* Pods (static or mirrored pods or standalone pods) not part of an ReplicationController, ReplicaSet(Deployment), StatefulSet, or Job are
never evicted because these pods won't be recreated. (Standalone pods in failed status phase can be evicted by setting `evictFailedBarePods: true`)
* Pods associated with DaemonSets are never evicted.
* Pods associated with DaemonSets are never evicted (unless `evictDaemonSetPods: true` is set).
* Pods with local storage are never evicted (unless `evictLocalStoragePods: true` is set).
* Pods with PVCs are evicted (unless `ignorePvcPods: true` is set).
* In `LowNodeUtilization` and `RemovePodsViolatingInterPodAntiAffinity`, pods are evicted by their priority from low to high, and if they have same priority,

View File

@@ -1,14 +1,14 @@
apiVersion: v1
name: descheduler
version: 0.28.1
appVersion: 0.28.1
version: 0.30.1
appVersion: 0.30.1
description: Descheduler for Kubernetes is used to rebalance clusters by evicting pods that can potentially be scheduled on better nodes. In the current implementation, descheduler does not schedule replacement of evicted pods but relies on the default scheduler for that.
keywords:
- kubernetes
- descheduler
- kube-scheduler
home: https://github.com/kubernetes-sigs/descheduler
icon: https://raw.githubusercontent.com/kubernetes-sigs/descheduler/master/assets/logo/descheduler-stacked-color.png
icon: https://kubernetes.io/images/favicon.png
sources:
- https://github.com/kubernetes-sigs/descheduler
maintainers:

View File

@@ -84,6 +84,7 @@ The following table lists the configurable parameters of the _descheduler_ chart
| `serviceMonitor.metricRelabelings` | MetricRelabelConfigs to apply to samples after scraping, but before ingestion | `[]` |
| `serviceMonitor.relabelings` | RelabelConfigs to apply to samples before scraping | `[]` |
| `affinity` | Node affinity to run the descheduler cronjob/deployment on specific nodes | `nil` |
| `topologySpreadConstraints` | Topology Spread Constraints to spread the descheduler cronjob/deployment across the cluster | `[]` |
| `tolerations` | tolerations to run the descheduler cronjob/deployment on specific nodes | `nil` |
| `suspend` | Set spec.suspend in descheduler cronjob | `false` |
| `commonLabels` | Labels to apply to all resources | `{}` |

View File

@@ -1,7 +1,7 @@
Descheduler installed as a {{ .Values.kind }}.
{{- if eq .Values.kind "Deployment" }}
{{- if eq .Values.replicas 1.0}}
{{- if eq (.Values.replicas | int) 1 }}
WARNING: You set replica count as 1 and workload kind as Deployment however leaderElection is not enabled. Consider enabling Leader Election for HA mode.
{{- end}}
{{- if .Values.leaderElection }}

View File

@@ -1,3 +1,4 @@
{{- if .Values.deschedulerPolicy }}
apiVersion: v1
kind: ConfigMap
metadata:
@@ -10,3 +11,4 @@ data:
apiVersion: "{{ .Values.deschedulerPolicyAPIVersion }}"
kind: "DeschedulerPolicy"
{{ toYaml .Values.deschedulerPolicy | trim | indent 4 }}
{{- end }}

View File

@@ -51,6 +51,10 @@ spec:
affinity:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.topologySpreadConstraints }}
topologySpreadConstraints:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- if .Values.dnsConfig }}
dnsConfig:
{{- .Values.dnsConfig | toYaml | nindent 12 }}
@@ -77,7 +81,11 @@ spec:
args:
- --policy-config-file=/policy-dir/policy.yaml
{{- range $key, $value := .Values.cmdOptions }}
- {{ printf "--%s" $key }}{{ if $value }}={{ $value }}{{ end }}
{{- if ne $value nil }}
- {{ printf "--%s=%s" $key (toString $value) }}
{{- else }}
- {{ printf "--%s" $key }}
{{- end }}
{{- end }}
livenessProbe:
{{- toYaml .Values.livenessProbe | nindent 16 }}
@@ -88,6 +96,10 @@ spec:
volumeMounts:
- mountPath: /policy-dir
name: policy-volume
{{- if .Values.podSecurityContext }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 12 }}
{{- end }}
volumes:
- name: policy-volume
configMap:

View File

@@ -7,7 +7,7 @@ metadata:
labels:
{{- include "descheduler.labels" . | nindent 4 }}
spec:
{{- if gt .Values.replicas 1.0}}
{{- if gt (.Values.replicas | int) 1 }}
{{- if not .Values.leaderElection.enabled }}
{{- fail "You must set leaderElection to use more than 1 replica"}}
{{- end}}
@@ -53,7 +53,11 @@ spec:
- --policy-config-file=/policy-dir/policy.yaml
- --descheduling-interval={{ required "deschedulingInterval required for running as Deployment" .Values.deschedulingInterval }}
{{- range $key, $value := .Values.cmdOptions }}
- {{ printf "--%s" $key }}{{ if $value }}={{ $value }}{{ end }}
{{- if ne $value nil }}
- {{ printf "--%s=%s" $key (toString $value) }}
{{- else }}
- {{ printf "--%s" $key }}
{{- end }}
{{- end }}
{{- include "descheduler.leaderElection" . | nindent 12 }}
ports:
@@ -68,6 +72,10 @@ spec:
volumeMounts:
- mountPath: /policy-dir
name: policy-volume
{{- if .Values.podSecurityContext }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
{{- end }}
volumes:
- name: policy-volume
configMap:
@@ -80,6 +88,10 @@ spec:
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.topologySpreadConstraints }}
topologySpreadConstraints:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}

View File

@@ -9,6 +9,12 @@ metadata:
namespace: {{ .Release.Namespace }}
spec:
clusterIP: None
{{- if .Values.service.ipFamilyPolicy }}
ipFamilyPolicy: {{ .Values.service.ipFamilyPolicy }}
{{- end }}
{{- if .Values.service.ipFamilies }}
ipFamilies: {{ toYaml .Values.service.ipFamilies | nindent 4 }}
{{- end }}
ports:
- name: http-metrics
port: 10258

View File

@@ -32,6 +32,10 @@ securityContext:
runAsNonRoot: true
runAsUser: 1000
# podSecurityContext -- [Security context for pod](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
podSecurityContext: {}
# fsGroup: 1000
nameOverride: ""
fullnameOverride: ""
@@ -75,14 +79,19 @@ cmdOptions:
v: 3
# Recommended to use the latest Policy API version supported by the Descheduler app version
deschedulerPolicyAPIVersion: "descheduler/v1alpha1"
deschedulerPolicyAPIVersion: "descheduler/v1alpha2"
# deschedulerPolicy contains the policies the descheduler will execute.
# To use policies stored in an existing configMap use:
# NOTE: The name of the cm should comply to {{ template "descheduler.fullname" . }}
# deschedulerPolicy: {}
deschedulerPolicy:
# nodeSelector: "key1=value1,key2=value2"
# maxNoOfPodsToEvictPerNode: 10
# maxNoOfPodsToEvictPerNamespace: 10
# ignorePvcPods: true
# evictLocalStoragePods: true
# evictDaemonSetPods: true
# tracing:
# collectorEndpoint: otel-collector.observability.svc.cluster.local:4317
# transportCert: ""
@@ -90,40 +99,47 @@ deschedulerPolicy:
# serviceNamespace: ""
# sampleRate: 1.0
# fallbackToNoOpProviderOnError: true
strategies:
RemoveDuplicates:
enabled: true
RemovePodsHavingTooManyRestarts:
enabled: true
params:
podsHavingTooManyRestarts:
podRestartThreshold: 100
includingInitContainers: true
RemovePodsViolatingNodeTaints:
enabled: true
RemovePodsViolatingNodeAffinity:
enabled: true
params:
nodeAffinityType:
- requiredDuringSchedulingIgnoredDuringExecution
RemovePodsViolatingInterPodAntiAffinity:
enabled: true
RemovePodsViolatingTopologySpreadConstraint:
enabled: true
params:
includeSoftConstraints: false
LowNodeUtilization:
enabled: true
params:
nodeResourceUtilizationThresholds:
thresholds:
cpu: 20
memory: 20
pods: 20
targetThresholds:
cpu: 50
memory: 50
pods: 50
profiles:
- name: default
pluginConfig:
- name: DefaultEvictor
args:
ignorePvcPods: true
evictLocalStoragePods: true
- name: RemoveDuplicates
- name: RemovePodsHavingTooManyRestarts
args:
podRestartThreshold: 100
includingInitContainers: true
- name: RemovePodsViolatingNodeAffinity
args:
nodeAffinityType:
- requiredDuringSchedulingIgnoredDuringExecution
- name: RemovePodsViolatingNodeTaints
- name: RemovePodsViolatingInterPodAntiAffinity
- name: RemovePodsViolatingTopologySpreadConstraint
- name: LowNodeUtilization
args:
thresholds:
cpu: 20
memory: 20
pods: 20
targetThresholds:
cpu: 50
memory: 50
pods: 50
plugins:
balance:
enabled:
- RemoveDuplicates
- RemovePodsViolatingTopologySpreadConstraint
- LowNodeUtilization
deschedule:
enabled:
- RemovePodsHavingTooManyRestarts
- RemovePodsViolatingNodeTaints
- RemovePodsViolatingNodeAffinity
- RemovePodsViolatingInterPodAntiAffinity
priorityClassName: system-cluster-critical
@@ -149,6 +165,13 @@ affinity: {}
# values:
# - descheduler
# topologyKey: "kubernetes.io/hostname"
topologySpreadConstraints: []
# - maxSkew: 1
# topologyKey: kubernetes.io/hostname
# whenUnsatisfiable: DoNotSchedule
# labelSelector:
# matchLabels:
# app.kubernetes.io/name: descheduler
tolerations: []
# - key: 'management'
# operator: 'Equal'
@@ -185,6 +208,16 @@ livenessProbe:
service:
enabled: false
# @param service.ipFamilyPolicy [string], support SingleStack, PreferDualStack and RequireDualStack
#
ipFamilyPolicy: ""
# @param service.ipFamilies [array] List of IP families (e.g. IPv4, IPv6) assigned to the service.
# Ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/
# E.g.
# ipFamilies:
# - IPv6
# - IPv4
ipFamilies: []
serviceMonitor:
enabled: false

View File

@@ -77,7 +77,7 @@ func NewDeschedulerCommand(out io.Writer) *cobra.Command {
secureServing.DisableHTTP2 = !s.EnableHTTP2
ctx, done := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
ctx, done := signal.NotifyContext(cmd.Context(), syscall.SIGINT, syscall.SIGTERM)
pathRecorderMux := mux.NewPathRecorderMux("descheduler")
if !s.DisableMetrics {

View File

@@ -35,6 +35,8 @@ descheduler [flags]
--log-flush-frequency duration Maximum number of seconds between log flushes (default 5s)
--log-json-info-buffer-size quantity [Alpha] In JSON format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). Enable the LoggingAlphaOptions feature gate to use this.
--log-json-split-stream [Alpha] In JSON format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. Enable the LoggingAlphaOptions feature gate to use this.
--log-text-info-buffer-size quantity [Alpha] In text format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). Enable the LoggingAlphaOptions feature gate to use this.
--log-text-split-stream [Alpha] In text format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. Enable the LoggingAlphaOptions feature gate to use this.
--logging-format string Sets the log format. Permitted formats: "json" (gated by LoggingBetaOptions), "text". (default "text")
--otel-collector-endpoint string Set this flag to the OpenTelemetry Collector Service Address
--otel-fallback-no-op-on-error Fallback to NoOp Tracer in case of error
@@ -48,8 +50,8 @@ descheduler [flags]
--secure-port int The port on which to serve HTTPS with authentication and authorization. If 0, don't serve HTTPS at all. (default 10258)
--tls-cert-file string File containing the default x509 Certificate for HTTPS. (CA cert, if any, concatenated after server cert). If HTTPS serving is enabled, and --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to the directory specified by --cert-dir.
--tls-cipher-suites strings Comma-separated list of cipher suites for the server. If omitted, the default Go cipher suites will be used.
Preferred values: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
Insecure values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA.
Preferred values: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256.
Insecure values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_RC4_128_SHA.
--tls-min-version string Minimum TLS version supported. Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13
--tls-private-key-file string File containing the default x509 private key matching --tls-cert-file.
--tls-sni-cert-key namedCertKey A pair of x509 certificate and private key file paths, optionally suffixed with a list of domain patterns which are fully qualified domain names, possibly with prefixed wildcard segments. The domain patterns also allow IP addresses, but IPs should only be used if the apiserver has visibility to the IP address requested by a client. If no domain patterns are provided, the names of the certificate are extracted. Non-wildcard matches trump over wildcard matches, explicit domain patterns trump over extracted names. For multiple key/certificate pairs, use the --tls-sni-cert-key multiple times. Examples: "example.crt,example.key" or "foo.crt,foo.key:*.foo.com,foo.com". (default [])

View File

@@ -109,17 +109,17 @@ See the [resources | Kustomize](https://kubectl.docs.kubernetes.io/references/ku
Run As A Job
```
kustomize build 'github.com/kubernetes-sigs/descheduler/kubernetes/job?ref=v0.28.1' | kubectl apply -f -
kustomize build 'github.com/kubernetes-sigs/descheduler/kubernetes/job?ref=v0.30.1' | kubectl apply -f -
```
Run As A CronJob
```
kustomize build 'github.com/kubernetes-sigs/descheduler/kubernetes/cronjob?ref=v0.28.1' | kubectl apply -f -
kustomize build 'github.com/kubernetes-sigs/descheduler/kubernetes/cronjob?ref=v0.30.1' | kubectl apply -f -
```
Run As A Deployment
```
kustomize build 'github.com/kubernetes-sigs/descheduler/kubernetes/deployment?ref=v0.28.1' | kubectl apply -f -
kustomize build 'github.com/kubernetes-sigs/descheduler/kubernetes/deployment?ref=v0.30.1' | kubectl apply -f -
```
## User Guide
@@ -135,6 +135,7 @@ The policy includes a common configuration that applies to all the strategies:
|------|---------------|-------------|
| `nodeSelector` | `nil` | limiting the nodes which are processed |
| `evictLocalStoragePods` | `false` | allows eviction of pods with local storage |
| `evictDaemonSetPods` | `false` | allows eviction of pods associated to DaemonSet resources |
| `evictSystemCriticalPods` | `false` | [Warning: Will evict Kubernetes system pods] allows eviction of pods with any priority, including system pods like kube-dns |
| `ignorePvcPods` | `false` | set whether PVC pods should be evicted or ignored |
| `maxNoOfPodsToEvictPerNode` | `nil` | maximum number of pods evicted from each node (summed through all strategies) |
@@ -152,6 +153,7 @@ kind: "DeschedulerPolicy"
nodeSelector: prod=dev
evictFailedBarePods: false
evictLocalStoragePods: true
evictDaemonSetPods: true
evictSystemCriticalPods: true
maxNoOfPodsToEvictPerNode: 40
ignorePvcPods: false

View File

@@ -4,6 +4,9 @@ Starting with descheduler release v0.10.0 container images are available in the
Descheduler Version | Container Image | Architectures |
------------------- |-------------------------------------------------|-------------------------|
v0.30.1 | registry.k8s.io/descheduler/descheduler:v0.30.1 | AMD64<br>ARM64<br>ARMv7 |
v0.30.0 | registry.k8s.io/descheduler/descheduler:v0.30.0 | AMD64<br>ARM64<br>ARMv7 |
v0.29.0 | registry.k8s.io/descheduler/descheduler:v0.29.0 | AMD64<br>ARM64<br>ARMv7 |
v0.28.1 | registry.k8s.io/descheduler/descheduler:v0.28.1 | AMD64<br>ARM64<br>ARMv7 |
v0.28.0 | registry.k8s.io/descheduler/descheduler:v0.28.0 | AMD64<br>ARM64<br>ARMv7 |
v0.27.1 | registry.k8s.io/descheduler/descheduler:v0.27.1 | AMD64<br>ARM64<br>ARMv7 |

105
go.mod
View File

@@ -1,27 +1,27 @@
module sigs.k8s.io/descheduler
go 1.20
go 1.22.3
require (
github.com/client9/misspell v0.3.4
github.com/google/go-cmp v0.6.0
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5
go.opentelemetry.io/otel v1.21.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0
go.opentelemetry.io/otel/sdk v1.21.0
go.opentelemetry.io/otel/trace v1.21.0
google.golang.org/grpc v1.59.0
k8s.io/api v0.28.4
k8s.io/apimachinery v0.28.4
k8s.io/apiserver v0.28.4
k8s.io/client-go v0.28.4
k8s.io/code-generator v0.28.4
k8s.io/component-base v0.28.4
k8s.io/component-helpers v0.28.4
k8s.io/klog/v2 v2.110.1
k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf
go.opentelemetry.io/otel v1.24.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0
go.opentelemetry.io/otel/sdk v1.24.0
go.opentelemetry.io/otel/trace v1.24.0
google.golang.org/grpc v1.62.0
k8s.io/api v0.30.0
k8s.io/apimachinery v0.30.0
k8s.io/apiserver v0.30.0
k8s.io/client-go v0.30.0
k8s.io/code-generator v0.30.0
k8s.io/component-base v0.30.0
k8s.io/component-helpers v0.30.0
k8s.io/klog/v2 v2.120.1
k8s.io/utils v0.0.0-20240310230437-4693a0247e57
sigs.k8s.io/mdtoc v1.1.0
)
@@ -38,26 +38,26 @@ require (
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-logr/logr v1.3.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-logr/zapr v1.2.3 // indirect
github.com/go-logr/zapr v1.3.0 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/gomarkdown/markdown v0.0.0-20210514010506-3b9f47219fe7 // indirect
github.com/google/cel-go v0.16.1 // indirect
github.com/google/cel-go v0.17.8 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/imdario/mergo v0.3.6 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
@@ -75,43 +75,42 @@ require (
github.com/prometheus/procfs v0.10.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/stoewer/go-strcase v1.2.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.9 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0 // indirect
go.opentelemetry.io/contrib/instrumen