From 7cfb90df100a85435b3e59f3c48f60b53c5701b2 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Wed, 8 Jan 2025 16:13:57 +0100 Subject: [PATCH] Fix cluster-autoscaler (#561) ## Summary by CodeRabbit - **New Features** - Updated Cluster Autoscaler to version 1.32.0 - Added new configuration options for more granular node scaling and management - Introduced custom patch for scaling behavior - **Improvements** - Upgraded Go build environment to version 1.23.4 - Switched to latest Cluster Autoscaler image tag - Enhanced node scaling flexibility with new command-line arguments - **Technical Updates** - Modified cluster autoscaler deployment configuration - Updated image references and build process --- .../apps/kubernetes/images/cluster-autoscaler.tag | 2 +- .../kubernetes/images/cluster-autoscaler/Dockerfile | 6 ++++-- .../images/cluster-autoscaler/fix-downscale.diff | 13 +++++++++++++ .../templates/cluster-autoscaler/deployment.yaml | 6 ++++++ 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 packages/apps/kubernetes/images/cluster-autoscaler/fix-downscale.diff diff --git a/packages/apps/kubernetes/images/cluster-autoscaler.tag b/packages/apps/kubernetes/images/cluster-autoscaler.tag index 2d60c1f0..fa28293c 100644 --- a/packages/apps/kubernetes/images/cluster-autoscaler.tag +++ b/packages/apps/kubernetes/images/cluster-autoscaler.tag @@ -1 +1 @@ -ghcr.io/aenix-io/cozystack/cluster-autoscaler:0.14.1@sha256:0ea139c71e08db5adb275d81a7efa9a0d8b8db61a1fc1a67167a33a347c07fd8 +ghcr.io/aenix-io/cozystack/cluster-autoscaler:latest@sha256:a8035edb5abee8e88c9153ea4f612d03f490c9bba757c2e57f61ae66cc6fe972 diff --git a/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile b/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile index 41b4c291..17a5e501 100644 --- a/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile +++ b/packages/apps/kubernetes/images/cluster-autoscaler/Dockerfile @@ -1,12 +1,14 @@ # Source: https://raw.githubusercontent.com/kubernetes/autoscaler/refs/heads/master/cluster-autoscaler/Dockerfile.amd64 -ARG builder_image=docker.io/library/golang:1.22.5 +ARG builder_image=docker.io/library/golang:1.23.4 ARG BASEIMAGE=gcr.io/distroless/static:nonroot-amd64 FROM ${builder_image} AS builder RUN git clone https://github.com/kubernetes/autoscaler /src/autoscaler \ && cd /src/autoscaler/cluster-autoscaler \ - && git checkout cluster-autoscaler-1.31.0 + && git checkout cluster-autoscaler-1.32.0 WORKDIR /src/autoscaler/cluster-autoscaler +COPY fix-downscale.diff /fix-downscale.diff +RUN git apply /fix-downscale.diff RUN make build FROM $BASEIMAGE diff --git a/packages/apps/kubernetes/images/cluster-autoscaler/fix-downscale.diff b/packages/apps/kubernetes/images/cluster-autoscaler/fix-downscale.diff new file mode 100644 index 00000000..94c680bc --- /dev/null +++ b/packages/apps/kubernetes/images/cluster-autoscaler/fix-downscale.diff @@ -0,0 +1,13 @@ +diff --git a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_unstructured.go b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_unstructured.go +index 4eec0e4bf..f28fd9241 100644 +--- a/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_unstructured.go ++++ b/cluster-autoscaler/cloudprovider/clusterapi/clusterapi_unstructured.go +@@ -106,8 +106,6 @@ func (r unstructuredScalableResource) Replicas() (int, error) { + + func (r unstructuredScalableResource) SetSize(nreplicas int) error { + switch { +- case nreplicas > r.maxSize: +- return fmt.Errorf("size increase too large - desired:%d max:%d", nreplicas, r.maxSize) + case nreplicas < r.minSize: + return fmt.Errorf("size decrease too large - desired:%d min:%d", nreplicas, r.minSize) + } diff --git a/packages/apps/kubernetes/templates/cluster-autoscaler/deployment.yaml b/packages/apps/kubernetes/templates/cluster-autoscaler/deployment.yaml index 4ec017af..6b31f53a 100644 --- a/packages/apps/kubernetes/templates/cluster-autoscaler/deployment.yaml +++ b/packages/apps/kubernetes/templates/cluster-autoscaler/deployment.yaml @@ -30,6 +30,12 @@ spec: - /cluster-autoscaler args: - --cloud-provider=clusterapi + - --enforce-node-group-min-size=true + - --ignore-daemonsets-utilization=true + - --ignore-mirror-pods-utilization=true + - --scale-down-unneeded-time=30s + - --scan-interval=25s + - --force-delete-unregistered-nodes=true - --kubeconfig=/etc/kubernetes/kubeconfig/super-admin.svc - --clusterapi-cloud-config-authoritative - --node-group-auto-discovery=clusterapi:namespace={{ .Release.Namespace }},clusterName={{ .Release.Name }}