<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>GoKubeDownscaler Blog</title>
        <link>https://kube-downscaler.io/blog</link>
        <description>GoKubeDownscaler Blog</description>
        <lastBuildDate>Mon, 02 Mar 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Announcing GoKubeDownscaler 1.3.0]]></title>
            <link>https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0</link>
            <guid>https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0</guid>
            <pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This blog post announces the release of GoKubeDownscaler version 1.3.0, highlighting new features, improvements, and bug fixes.]]></description>
            <content:encoded><![CDATA[<p>We are pleased to announce the release of version 1.3.0 of GoKubeDownscaler.
This release represents a significant milestone as it officially brings the project to GA
and brings it into feature parity with the original, popular PyKubeDownscaler written in Python.</p>
<!-- -->
<p>From now on, all development and new features will focus primarily on this project, with the goal of making it available
within the CNCF landscape.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features">New Features<a href="https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0#new-features" class="hash-link" aria-label="Direct link to New Features" title="Direct link to New Features" translate="no">​</a></h2>
<p>Over the past few months, in addition to adapting PyKubeDownscaler features within this new project,
we have been working hard to release as many new features and improvements as possible to make Kubernetes downscaling
and cost optimization workflows as effective as possible.
Among the new features are:</p>
<ul>
<li class=""><strong>Introduction of Metrics</strong>: Starting today, GoKubeDownscaler exposes a series of metrics that can be used for production alerts,
general statistics, and tracking of CPU and memory savings.
Metrics can be exposed using the <code>--metrics</code> argument.</li>
<li class=""><strong>Performance Optimizations</strong>: GoKubeDownscaler introduces new quality-of-life performance improvements.
API calls have been optimized and reduced,
multithreaded execution has been introduced, leveraging Go's native parallelism.
Resource usage has been minimized, especially during idle situations.</li>
<li class=""><strong>Webhook Introduction</strong>: An optional webhook has been introduced that can perform scaling during resource admission phases.
This is very useful for ensuring cluster compliance and avoiding unnecessary scale-ups that could occur if a resource is deployed
between two KubeDownscaler cycles.
The webhook can be installed via Helm Chart.</li>
<li class=""><strong>Regulated API Server Access</strong>: GoKubeDownscaler now natively supports and customizes QPS and Burst values to avoid saturating the API Server
during downscaling peaks.
The user can adjust these values using the <code>--qps</code> and <code>--burst</code> arguments.</li>
<li class=""><strong>Introducing JSON Logs</strong>: GoKubeDownscaler can now print logs in JSON format using the --json-logs argument.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-migrate-from-pykubedownscaler">How To Migrate From PyKubeDownscaler<a href="https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0#how-to-migrate-from-pykubedownscaler" class="hash-link" aria-label="Direct link to How To Migrate From PyKubeDownscaler" title="Direct link to How To Migrate From PyKubeDownscaler" translate="no">​</a></h2>
<p>To migrate from PyKubeDownscaler, you can follow the dedicated guide in our documentation at <a class="" href="https://kube-downscaler.io/guides/migrating">this link</a>.
We expect the migration to be quick and with only a few changes required.
We recommend reading the guide carefully to avoid missing any details.
The development team is available to answer any questions or address any issues within the "Issues" or "Discussions" sections
of the GitHub repository.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pykubedownscaler-set-in-maintenance-mode">PyKubeDownscaler Set In Maintenance Mode<a href="https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0#pykubedownscaler-set-in-maintenance-mode" class="hash-link" aria-label="Direct link to PyKubeDownscaler Set In Maintenance Mode" title="Direct link to PyKubeDownscaler Set In Maintenance Mode" translate="no">​</a></h2>
<p>For anyone wondering what will happen from now on to the PyKubeDownscaler project, our fork of the original KubeDownscaler
that we have maintained, evolved, and refined over the past two years, we assure you that we will continue to support the tool
with bug fixes, security patches, helm chart changes, and the introduction of any mandatory features.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adopters">Adopters<a href="https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0#adopters" class="hash-link" aria-label="Direct link to Adopters" title="Direct link to Adopters" translate="no">​</a></h2>
<p>If your company actively uses the GoKubeDownscaler, you can contact us through our <a href="https://inviter.co/kube-downscaler" target="_blank" rel="noopener noreferrer" class="">slack channel</a>
to add your logo to our showcase carousel in the homepage of our website.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusions">Conclusions<a href="https://kube-downscaler.io/blog/announcing-gokubedownscaler-1-3-0#conclusions" class="hash-link" aria-label="Direct link to Conclusions" title="Direct link to Conclusions" translate="no">​</a></h2>
<p>The development team sincerely thanks everyone who, over the past year and a half, supported the development of this new tool by
volunteering their time, offering ideas, suggestions, and pull requests.
In the coming months we expect to add as many features as possible
to make this project more and more attractive, stay tuned!</p>]]></content:encoded>
            <category>release</category>
            <category>1.3.0</category>
            <category>go-kube-downscaler</category>
            <category>kube-downscaler</category>
        </item>
        <item>
            <title><![CDATA[Why We Built the GoKubeDownscaler]]></title>
            <link>https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler</link>
            <guid>https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler</guid>
            <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[This blog shows the reasons for making the GoKubeDownscaler project and its design considerations.]]></description>
            <content:encoded><![CDATA[<p>The GoKubeDownscaler project is a big project and as such there had to have been good enough reasons to make it.
In the following blog we try to show our reasons for making this project, its design considerations and how we want to move forward.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-not-use-the-py-kube-downscaler">Why Not Use the Py-Kube-Downscaler<a href="https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler#why-not-use-the-py-kube-downscaler" class="hash-link" aria-label="Direct link to Why Not Use the Py-Kube-Downscaler" title="Direct link to Why Not Use the Py-Kube-Downscaler" translate="no">​</a></h2>
<p>The <a href="https://github.com/caas-team/py-kube-downscaler" target="_blank" rel="noopener noreferrer" class="">Py-Kube-Downscaler</a>
(or just known as the <a href="https://codeberg.org/hjacobs/kube-downscaler" target="_blank" rel="noopener noreferrer" class="">kube-downscaler</a> at the time)
was a popular tool for downscaling kubernetes workloads.
It had loads of configuration options and a big userbase.</p>
<p>Even with its many users and contributors
the project and its dependencies (like pykube) were over time all becoming unmaintained.
Additionally its codebase became cluttered over the years of being developed which made adding new features,
maintaining the repo and adding new resources hard to do and prone to introduce unwanted bugs.</p>
<p>With the py-kube-downscaler becoming unmaintained more and more bugs were slowly coming to the light of day.
At our company we also ran into some bugs which we tried to fix via a pr to the project.
However, since the project was no longer maintained our pr did not get merged.
After a few weeks we decided that we should maintain a fork of the project ourselves.
This also meant maintaining the <a href="https://github.com/caas-team/new-pykube" target="_blank" rel="noopener noreferrer" class="">pykube</a> (also known as pykube-ng and now new-pykube) dependency.</p>
<p>After we cleaned up the repo and fixed the bugs our prs were aiming to fix
we continued to maintain the project along with <a href="https://github.com/samuel-esp" target="_blank" rel="noopener noreferrer" class="">Samuel</a>.
As more work was done on the project the above points about it being hard to maintain became clear.
This led us to decide that it was necessary to rewrite the project since doing a big refactoring would basically involve the same.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-reason-for-choosing-golang">The Reason for Choosing Golang<a href="https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler#the-reason-for-choosing-golang" class="hash-link" aria-label="Direct link to The Reason for Choosing Golang" title="Direct link to The Reason for Choosing Golang" translate="no">​</a></h2>
<p>It soon became clear that rewriting the project in python would not be the best option,
as all native kubernetes libraries including ones for CRDs are either only available to <a href="https://go.dev/" target="_blank" rel="noopener noreferrer" class="">golang</a> or native to it.</p>
<p>Golang also has many other advantages compared to python like being statically typed making collaboration easier,
having faster execution times thanks to compilation as well as generally being more efficient with memory management and other resources.</p>
<p>Go's concurrency model is also one of the easiest to work with.
This allowed us to build the downscaler
to use concurrent operations wherever possible making scans complete much faster.</p>
<!-- -->
<p>In our team we were also already basically exclusively using golang for our other projects
which made it clear to us that using golang was the way to go.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="general-design-considerations">General Design Considerations<a href="https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler#general-design-considerations" class="hash-link" aria-label="Direct link to General Design Considerations" title="Direct link to General Design Considerations" translate="no">​</a></h2>
<p>As said above the design of the Downscaler is made to be based on go's great concurrency.
This also makes conflicts from workloads being modified
while they are being scanned less likely.</p>
<p>One of our main focuses is making this repo as easy to maintain and keep clean as possible.
To achieve this we are making use of <a href="https://github.com/caas-team/GoKubeDownscaler/tree/main/.pre-commit-config.yaml" target="_blank" rel="noopener noreferrer" class="">many strict linters</a>
and other tools like <a href="https://github.com/dependabot" target="_blank" rel="noopener noreferrer" class="">dependabot</a>.</p>
<p>We also want to make sure that adding new resources is as easy as possible,
which is why we are planning on making all resources data driven allowing anyone to add custom resources
or modify existing ones without touching or having any knowledge of the code.</p>
<p>It was also important to us that you can run the downscaler locally
which greatly simplifies testing new features while developing.
This is done by if applicable having a runtime configuration
to substitute these in-cluster sources of data (e.g. <code>-k</code> for setting the kubeconfig manually).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="outlook">Outlook<a href="https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook" translate="no">​</a></h2>
<p>We plan to continue maintaining, improving and adding new features to the project.
With the GoKubeDownscaler soon being stable and feature complete
we are planning on concentrating on further development of the project
while we step back from developing new features for the py-kube-downscaler.</p>
<p>What this means is that in the future the py-kube-downscaler project
will only be maintained by dependency updates, security fixes and bug fixes.
The GoKubeDownscaler project will be the official successor to the old kube-downscaler
and will likely be the only downscaler that gets new features and improvements.</p>
<p>Any changes to the repo will continue to be strictly reviewed and tested by us maintainers and code quality/security tools.
We will be adding more linters and general tools to make sure the project's code stays clean and its dependencies up-to-date</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://kube-downscaler.io/blog/why-we-built-the-gokubedownscaler#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In summary, the lack of good first party apis for python, go's efficiency
and the state of the py-kube-downscaler repo all led to rewriting the project in golang.
The kube-downscaler's rewrite is more efficient and can handle larger clusters thanks to go
and we will continue to make sure that the GoKubeDownscaler's repo stays clean and easily maintainable.</p>]]></content:encoded>
            <author>jonathan.mayer@telekom.de (Jonathan Mayer)</author>
            <category>origin</category>
            <category>project</category>
            <category>design</category>
            <category>go</category>
        </item>
    </channel>
</rss>