<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Helm on Osman Goni Nahid</title><link>https://osmangoninahid.github.io/tags/helm/</link><description>Recent content in Helm on Osman Goni Nahid</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0400</lastBuildDate><atom:link href="https://osmangoninahid.github.io/tags/helm/index.xml" rel="self" type="application/rss+xml"/><item><title>Shipping one platform to many clusters: release engineering for an AI platform</title><link>https://osmangoninahid.github.io/release-engineering-ai-platform-many-clusters/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0400</pubDate><guid>https://osmangoninahid.github.io/release-engineering-ai-platform-many-clusters/</guid><description>&lt;p&gt;A SaaS deploys one version to one place. A platform sold to enterprises deploys to every customer&amp;rsquo;s cluster, each on the version they last accepted, several with no internet. Release engineering is the part of platform engineering that makes that boring. This is how ours works, and the tickets that shaped it.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://osmangoninahid.github.io/images/release-migrations.gif" alt="A migration chain of preflight, database, object storage, Kubernetes entities and smoke test; before, a failing step did not stop the chain; after, it aborts and reports; three clusters on different versions walk the same steps" loading="lazy"&gt;&lt;/figure&gt;&#10;&#10;&lt;h2 id="the-shape-of-the-problem"&gt;The shape of the problem&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Around forty services, each its own repository and pipeline.&lt;/li&gt;&#10;&lt;li&gt;Two branch kinds everywhere: &lt;code&gt;main&lt;/code&gt; and &lt;code&gt;release-X.Y.Z&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Thirty-plus Helm charts in one monorepo, from the application down to the message broker and the GPU exporters.&lt;/li&gt;&#10;&lt;li&gt;Customer clusters on 1.7, 1.10, 1.13 at the same time. Some pull from our registry; some get a mirrored registry inside their network and nothing else.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Every upgrade has to move three things that live in three places: the &lt;strong&gt;database schema&lt;/strong&gt;, the &lt;strong&gt;object-storage layout&lt;/strong&gt;, and &lt;strong&gt;Kubernetes objects&lt;/strong&gt; (labels, services, cluster records). Miss one and the platform comes up &amp;ldquo;healthy&amp;rdquo; and wrong.&lt;/p&gt;</description></item></channel></rss>