🎉Announcement 🎉
GoKubeDownscaler is GA and has reached feature parity with py-kube-downscaler! Learn how to migrate from py-kube-downscaler here.
🚀 Release Notes 🚀
Over the past few months, we have been working hard to add several features we are thrilled to announce today.
- LoadBalancer Scaling: Kubernetes Services of type LoadBalancer, as well as Ingresses and Gateway API resources can now be scaled down along with all other resources! This new feature takes the cost optimization of the cluster to the next level. LoadBalancers from cloud providers are among the most expensive resources in a Kubernetes cluster, and they are often left idle during off-hours. An average LoadBalancer from a cloud provider costs around $20 per month. Considering a 40-hour work week, users can now save up to 70% of the cost of a single LoadBalancer by scaling it down during off-hours. We recommend combining GoKubeDownscaler with ExternalDNS to enable seamless scale-down automation while automatically handling DNS changes, so users don’t have to worry about restoring DNS records when LoadBalancers are scaled back up. You can find more information about the feature in the DNS Aware Load Balancing Scaling guide.
- Directional Timespan: this new timespan allows users to specify a target point in time relative to a specific timestamp, either before or after it. A common example would be
downscaler/downtime: from 2026-09-01T08:30:00Zordownscaler/exclude: until 2026-09-01T08:30:00Z - Improved Logging: the logging system has been improved to provide more detailed information about the scaling process. This includes information about the resources being scaled, the reason for scaling or exclusion, initial and final state of the resources, the scope that decided the scaling, and any errors that may occur during the process. Log levels have been restructured and rebalanced to provide more relevant information at each level. More information about the logging system can be found on the logging documentation page.
- New Resources: New resources have been added to the list of scalable resources, including Strimzi Kafka CRDs (
KafkaBridges,KafkaConnects,KafkaMirrorMakers),PostgreSQLsfrom Zalando, and Kruise CRDs (AdvancedCronJobs,AdvancedStatefulSets,AdvancedDaemonSets,CloneSets,BroadcastJobs,ImagePullJobs). As mentioned in the first bullet point alsoServices,Ingresses, andGateway APIresources can now be scaled down. - New Argument: added the possibility to specify a custom
--timeoutvalue for API calls made by GoKubeDownscaler. A default timeout of 30 seconds is used and applied to every API Call if no value is specified. To disable the timeout, users can set the value to0
Along with these features, we have also introduced several bug fixes and improvements to key behaviors:
- Fixed the
GetChildrenWorkloadsbehavior to correctly handle and identify child workloads. - Fixed the
DEFAULT_TIMEZONEconfiguration so the configured timezone is correctly applied. - Fixed scanner mode to avoid scaling KEDA
ScaledObjecttargets when the workload's TypeMeta is missing. - Fixed the algorithm to continue processing when a broken annotation is encountered instead of stopping.
- Updated owner-reference handling to consider owner references only for scalable resources.
- Updated the behavior of
downscaler/exclude-untilannotations. Past dates are no longer considered valid and will not be taken into account when populating scopes. - Fixed a bug that prevented
--json-logsfrom displaying debug level logs when--debugwas specified.
🏷️ What's Changed 🏷️
- chore(deps): bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #430
- chore(deps): bump ws from 8.20.1 to 8.21.0 in /website in the version-bump group across 1 directory by @dependabot[bot] in #462
- chore(deps): bump the version-bump group across 1 directory with 2 updates by @dependabot[bot] in #448
- chore(deps): bump actions/upload-pages-artifact from 4 to 5 by @dependabot[bot] in #466
- chore(deps): bump toshimaru/auto-author-assign from 3.0.2 to 3.0.3 in the version-bump group by @dependabot[bot] in #472
- chore(deps): bump the version-bump group across 1 directory with 8 updates by @dependabot[bot] in #473
- New Resource: zalando postgresql (
acid.zalan.do/v1) by @Art3mK in #469 - chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #478
- feat(scalable): add Strimzi KafkaConnect, KafkaMirrorMaker2, KafkaBridge support by @gaetanars in #434
- fix: don't skip ScaledObjects with undefined current replicas by @dakotaharden in #476
- chore(deps): bump the version-bump group across 1 directory with 6 updates by @dependabot[bot] in #481
- chore(deps): bump actions/setup-go from 6.4.0 to 6.5.0 in the version-bump group across 1 directory by @dependabot[bot] in #479
- chore(deps): bump strumwolf/delete-deployment-environment from 3 to 4 by @dependabot[bot] in #465
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #484
- chore(deps): bump the version-bump group in /website with 11 updates by @dependabot[bot] in #487
- chore(deps): bump the version-bump group across 1 directory with 14 updates by @dependabot[bot] in #470
- chore(deps): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #488
- chore(deps-dev): bump the version-bump group across 1 directory with 3 updates by @dependabot[bot] in #489
- chore(deps): bump ws from 8.21.0 to 8.21.1 in /website in the version-bump group by @dependabot[bot] in #490
- chore(deps): bump actions/setup-go from 6.5.0 to 7.0.0 by @dependabot[bot] in #491
- chore(deps): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #492
- chore(deps): bump github.com/argoproj/argo-rollouts from 1.9.0 to 1.9.1 in the version-bump group by @dependabot[bot] in #493
- chore(deps-dev): bump postcss from 8.5.19 to 8.5.20 in /website in the version-bump group across 1 directory by @dependabot[bot] in #494
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #496
- chore(deps): bump the version-bump group across 1 directory with 2 updates by @dependabot[bot] in #497
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #474
- Feat/Added DirectionalTimeSpan Logic (From/Until Timespan) by @samuel-esp in #439
- Fix/Avoid Scaling ScaledObject Targets When Workload TypeMeta Is Missing by @samuel-esp in #486
- Fix/Migration To Actions/Checkout V7 by @samuel-esp in #498
- Fix/Migrating ESLint For Pre-Commit 4.6.1 by @samuel-esp in #501
- chore(deps): bump the version-bump group across 1 directory with 3 updates by @dependabot[bot] in #500
- chore(deps): bump the version-bump group with 6 updates by @dependabot[bot] in #504
- Feat/Add Service, Ingress, Gateway Resources by @samuel-esp in #413
- Fix/Default Timezone Not Correctly Set by @samuel-esp in #503
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #509
- chore(deps): bump the version-bump group across 1 directory with 2 updates by @dependabot[bot] in #508
- fix: update dependencies to address security vulnerabilities in merma… by @JTaeuber in #505
- chore(deps-dev): bump postcss from 8.5.23 to 8.5.24 in /website in the version-bump group by @dependabot[bot] in #511
- chore(deps): bump the version-bump group with 2 updates by @dependabot[bot] in #510
- chore(deps): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #512
- Fix: GetChildrenWorkloads Behavior Logic by @samuel-esp in #507
- Feat/Ignore Stale Exclude-Until Annotations When Setting Scopes by @samuel-esp in #483
- chore(deps): bump docker/login-action from 4 to 4.5.2 in the version-bump group by @dependabot[bot] in #513
- chore(deps): bump docker/login-action from 4.5.2 to 4.6.0 in the version-bump group by @dependabot[bot] in #515
- chore(deps): bump github.com/kedacore/keda/v2 from 2.20.1 to 2.20.2 in the version-bump group by @dependabot[bot] in #516
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #519
- chore(deps-dev): bump postcss from 8.5.25 to 8.5.26 in /website in the version-bump group by @dependabot[bot] in #522
- chore(deps-dev): bump eslint from 10.8.0 to 10.8.1 in /website in the version-bump group by @dependabot[bot] in #523
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #525
- chore(deps): bump the version-bump group with 2 updates by @dependabot[bot] in #524
- chore(deps): bump toshimaru/auto-author-assign from 3.0.3 to 3.1.0 in the version-bump group by @dependabot[bot] in #526
- chore(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.0 in the version-bump group by @dependabot[bot] in #527
- chore(deps): bump github.com/stretchr/testify from 1.12.0 to 1.12.1 in the version-bump group by @dependabot[bot] in #528
- chore(deps): bump the version-bump group with 6 updates by @dependabot[bot] in #529
- chore(deps-dev): bump eslint from 10.8.1 to 10.9.0 in /website in the version-bump group by @dependabot[bot] in #530
- chore(deps-dev): bump the version-bump group in /website with 3 updates by @dependabot[bot] in #532
- chore(deps): bump github.com/argoproj/argo-rollouts from 1.9.1 to 1.10.0 in the version-bump group by @dependabot[bot] in #531
- chore(deps): bump the version-bump group with 5 updates by @dependabot[bot] in #533
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #535
- chore(deps-dev): bump the version-bump group in /website with 3 updates by @dependabot[bot] in #537
- chore(deps): bump the version-bump group with 3 updates by @dependabot[bot] in #536
- chore(deps-dev): bump eslint from 10.9.1 to 10.10.0 in /website in the version-bump group by @dependabot[bot] in #538
- chore(deps-dev): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #540
- Fix/Algorithm Stops When Broken Annotation Is Found by @samuel-esp in #521
- Fix/Consider OwnerReference Only For Scalable Resources by @samuel-esp in #518
- chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.2 by @dependabot[bot] in #541
- Feat/Add Kruise Resources (StatefulSet, CloneSet, AdvancedDaemonsets, AdvancedCronJobs, BroadcastJob) by @samuel-esp in #443
- chore(deps): bump the version-bump group with 3 updates by @dependabot[bot] in #543
- chore(deps): bump the version-bump group in /website with 2 updates by @dependabot[bot] in #544
- Chore/Pre Release Adjustments For Version 1.4.0 by @samuel-esp in #514
- chore(deps): bump sigs.k8s.io/controller-runtime from 0.25.0 to 0.25.1 in the version-bump group by @dependabot[bot] in #545
- chore(deps): bump github.com/zalando-incubator/stackset-controller from 1.4.141 to 1.4.142 in the version-bump group by @dependabot[bot] in #546
- chore(deps-dev): bump eslint from 10.10.0 to 10.11.0 in /website in the version-bump group by @dependabot[bot] in #547
- Refactor/Improve Logs by @samuel-esp in #542
- Feat/Add Timeout Argument For Client API Calls by @samuel-esp in #548
- Chore/Release 1.4.0 by @samuel-esp in #534
🎉 New Contributors 🎉
- @Art3mK made their first contribution in #469
- @dakotaharden made their first contribution in #476
Full Changelog: v1.3.4...v1.4.0