<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>kuberik – Kuberik</title><link>https://kuberik.com/</link><description>Recent content in Kuberik on kuberik</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://kuberik.com/index.xml" rel="self" type="application/rss+xml"/><item><title>v0.8.0</title><link>https://kuberik.com/blog/v0.8.0/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://kuberik.com/blog/v0.8.0/</guid><description>
&lt;p&gt;Three components ship in this release: rollout-controller v0.8.0, rollout-dashboard v0.8.0, and openkruise-controller v0.4.0.&lt;/p&gt;
&lt;h2&gt;rollout-dashboard v0.8.0&lt;span class="hx:absolute hx:-mt-20" id="rollout-dashboard-v080"&gt;&lt;/span&gt;
&lt;a href="#rollout-dashboard-v080" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The dashboard has been substantially reworked since v0.7.7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Multi-cluster support.&lt;/strong&gt; A hub dashboard now fans out to spoke dashboards running in remote clusters. All rollouts across all registered clusters are visible from a single URL. Spoke dashboards handle their own cluster&amp;rsquo;s API calls; the hub aggregates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OIDC authentication.&lt;/strong&gt; The dashboard integrates with oauth2-proxy&amp;rsquo;s extAuth mode. Traffic goes through an authenticating proxy and the dashboard receives the verified identity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Applications view.&lt;/strong&gt; A new &lt;code&gt;/apps&lt;/code&gt; page groups rollouts into logical applications and shows fleet-wide status at a glance. Drill into an application and you get a version lifecycle Gantt showing when each version was active across environments, with range presets (24h / 7d / 30d / all).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://kuberik.com/screenshots/dashboard/apps.png" alt="Apps view — fleet summary, status filters, per-app promotion flow" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Environments view.&lt;/strong&gt; &lt;code&gt;/envs&lt;/code&gt; shows all environments as stacked sections, each listing every rollout and its current state. Drills down to a per-environment activity timeline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Activity feed.&lt;/strong&gt; &lt;code&gt;/activity&lt;/code&gt; is a chronological deployment timeline across the whole fleet, filterable by environment, application, and status.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://kuberik.com/screenshots/dashboard/activity.png" alt="Activity feed — deployment timeline with status and version transitions" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Command palette.&lt;/strong&gt; &lt;code&gt;⌘K&lt;/code&gt; / &lt;code&gt;Ctrl+K&lt;/code&gt; opens a command palette for jumping to any rollout, application, environment, or namespace. It is wired site-wide and visible from every page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rollout overview redesign.&lt;/strong&gt; The main rollout view is the most-used page in the dashboard and it got a full overhaul. The deployment pipeline card shows each canary step with test results inline. Current version, bake status, and stuck detection sit at the top. Resources (pods, replicasets) and schedule status are surfaced without leaving the page. When the controller is holding a deployment after a failed health check, a warning banner appears with the option to retry or skip the failed step.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://kuberik.com/screenshots/dashboard/overview.png" alt="Rollout overview — deployment pipeline, bake status, resources" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datadog APM links.&lt;/strong&gt; Tests that emit a trace ID get a direct link to the Datadog APM trace viewer next to the existing Logs and CI buttons.&lt;/p&gt;
&lt;h2&gt;rollout-controller v0.8.0&lt;span class="hx:absolute hx:-mt-20" id="rollout-controller-v080"&gt;&lt;/span&gt;
&lt;a href="#rollout-controller-v080" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Retry modes.&lt;/strong&gt; Setting the &lt;code&gt;rollout.kuberik.com/retry&lt;/code&gt; annotation now accepts a mode value: &lt;code&gt;retry&lt;/code&gt; re-runs the failed step, &lt;code&gt;skip&lt;/code&gt; advances past it. Previously only retry was supported.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New conditions.&lt;/strong&gt; Two new conditions are set on rollouts in blocked states:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BakeFailureDisabled&lt;/code&gt; — set when bake failure detection has been explicitly disabled.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DeploymentBlocked&lt;/code&gt; — set when a deployment cannot proceed due to a gate or schedule constraint.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Better failure detection.&lt;/strong&gt; The controller now prefers &lt;code&gt;Stalled=True&lt;/code&gt; as the primary failure witness when evaluating health check conditions, falling back to the newest condition only when Stalled is absent. This reduces false negatives when a check briefly reports healthy before settling into a failed state.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Health status messages.&lt;/strong&gt; Status messages are enriched with more context. Bake time is now measured correctly in edge cases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kustomization health fix.&lt;/strong&gt; Resources that no longer exist are skipped during kustomization health evaluation rather than returning an error that blocked the reconciliation loop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Manual deployment requeue.&lt;/strong&gt; Manual deployments where &lt;code&gt;bakeStatus&lt;/code&gt; is &lt;code&gt;Deploying&lt;/code&gt; are now requeued correctly instead of being left waiting for an external event.&lt;/p&gt;
&lt;h2&gt;openkruise-controller v0.4.0&lt;span class="hx:absolute hx:-mt-20" id="openkruise-controller-v040"&gt;&lt;/span&gt;
&lt;a href="#openkruise-controller-v040" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Robust retries.&lt;/strong&gt; The retry mechanism has been rewritten to handle edge cases that caused the controller to get stuck. Retry side-effects are now applied unconditionally at the start of a retry cycle, and step-ready-at timestamps are preserved so bake time is measured from the right point.&lt;/p&gt;
&lt;p&gt;Additional fixes in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bake time is now respected when a rollout step has no tests.&lt;/li&gt;
&lt;li&gt;Test creation is blocked and running jobs are cancelled when &lt;code&gt;KuberikBakeHealthy=False&lt;/code&gt; is set.&lt;/li&gt;
&lt;li&gt;The same-second failure edge case in &lt;code&gt;stalledBefore&lt;/code&gt; is treated correctly as a pre-retry state.&lt;/li&gt;
&lt;li&gt;The timeout machinery is skipped entirely when a rollout step is already &lt;code&gt;Healthy&lt;/code&gt; or &lt;code&gt;Completed&lt;/code&gt;, preventing spurious requeues.&lt;/li&gt;
&lt;li&gt;Jobs are deleted asynchronously to avoid blocking the reconciliation loop.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;RolloutTest&lt;/code&gt; can no longer be cancelled after the rollout has already continued past its step.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Introducing Kuberik</title><link>https://kuberik.com/blog/introducing-kuberik/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://kuberik.com/blog/introducing-kuberik/</guid><description>
&lt;p&gt;After almost ten years of watching CD tooling change without the underlying model changing, I built Kuberik. It is a Kubernetes-native controller that runs inside your cluster and owns the full delivery journey as declarative, pluggable resources, from release detection through canary rollouts, health checks, environment promotions, and automatic rollback.&lt;/p&gt;
&lt;h2&gt;The state so far&lt;span class="hx:absolute hx:-mt-20" id="the-state-so-far"&gt;&lt;/span&gt;
&lt;a href="#the-state-so-far" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I have used Jenkins, GitLab CI, Drone, GitHub Actions over the years. Each generation brought better interfaces and tighter integrations. But the way teams implement continuous delivery stayed exactly the same: you write the steps yourself. The canary, the health checks, the rollback trigger, the promotion conditions. Each of those is bespoke code that lives in your pipeline, is tested by nobody, and fails in production in ways that are hard to trace.&lt;/p&gt;
&lt;p&gt;Pipelines also model only the happy path. When something goes wrong or you need to act outside the normal sequence, the pipeline has nothing for you. Roll back a single environment without touching others. Pin a version during an incident. Force a deploy past the gates. None of this is exceptional, it is routine, and it ends up as more bespoke code on top.&lt;/p&gt;
&lt;p&gt;GitOps with Flux or ArgoCD addresses part of this. They reconcile a desired state from git, but they do not orchestrate how that state gets there. A change merged to main syncs to every cluster at once. There is no built-in way to roll changes out progressively across environments. Argo Rollouts and Flagger handle the mechanics of a single rollout but nothing beyond. Teams end up stitching all of these together with CI pipeline glue, and the glue becomes the thing nobody wants to touch. There are more complete solutions, but they come with centralized infrastructure, external dependencies, and operational overhead that most teams would rather avoid.&lt;/p&gt;
&lt;h2&gt;How Kuberik works&lt;span class="hx:absolute hx:-mt-20" id="how-kuberik-works"&gt;&lt;/span&gt;
&lt;a href="#how-kuberik-works" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Kuberik is a delivery controller, not a stack of scripts. It watches your container registry for new image releases. When a new version appears, it takes over. It runs the canary, checks health, promotes across environments, and rolls back if something goes wrong. Every step is a declarative, pluggable Kubernetes resource. Canary rollouts, health checks, environment promotions, and rollback are not logic you write into a pipeline. They are resources you declare, the same way you would declare a Deployment or a Service. The controller takes it from there.&lt;/p&gt;
&lt;p&gt;The design encodes a set of behaviours that are easy to get wrong when you reimplement them in a script. Each environment is autonomous, so rollback is always a local operation. Kuberik will not roll out into an unhealthy environment. It will not undo a manual deployment made during an incident. It processes versions sequentially so every version gets properly verified. You can attach test hooks at any stage of the rollout. You can force deploy a specific version when you need to bypass the gates entirely. You can define deployment windows and Kuberik enforces them. Getting all of this right in a CI pipeline means writing and maintaining the logic yourself, in every pipeline, across every team. With Kuberik, the model scales across every service: written once, reused everywhere.&lt;/p&gt;
&lt;p&gt;Deploying to production should just work. Check out &lt;a href="https://kuberik.com/docs/what-is-kuberik/#you-release-kuberik-delivers"&gt;how Kuberik works&lt;/a&gt; and the &lt;a href="https://kuberik.com/docs/getting-started/"&gt;getting started guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the story behind Kuberik, see &lt;a href="https://littlechimera.com/posts/building-kuberik/"target="_blank" rel="noopener"&gt;Building Kuberik&lt;/a&gt; on my personal blog.&lt;/p&gt;</description></item></channel></rss>