Skip to main content

Kubernetes Enters Its Boring Era: What Three Stability-First Releases Buy a Part-Time Platform Team

9 min readDora NodaDora Noda
Share
On this page

Upgrade season is the tax nobody budgets. If you run a small Cluster API fleet on machines you own, every Kubernetes minor release arrives as the same dreaded question: what broke, what got deprecated, and how many evenings will the upgrade eat? So when 2026 platform-engineering commentary predicted that releases 1.36 through 1.38 would be deliberately boring — incremental graduations, no new concepts to re-architect around — that was not an insult. It was the best news a part-time platform team has had in years.

Here is the ledger, up front, so you can decide in sixty seconds whether the "boring era" claim holds. This is what each release graduates into the hands of a small fleet operator, and what each graduation means for your next upgrade:

ReleaseShippedWhat went stable (or nearly)What it means for your runbook
1.36 "Haru"April 2026PSI metrics GA, User Namespaces GA, SELinux mount labeling GA, Volume Group Snapshots GA, DRA production-readyReal contention signals, rootless pods, faster pod starts on SELinux nodes, snapshottable stateful volumes, structured GPU scheduling
1.37 "Garhwal"August 2026metrics.k8s.io GA, HPA scale-to-zero beta (on by default), rootless kubelet beta, exactly one deprecationkubectl top and HPA metrics on a stable API, idle queue consumers that scale to zero with no add-on, and a deprecation list you can audit in an afternoon
1.38In flight (due around year-end)Stability cycle; audit at code freezeNo new concepts expected — the win is reading a short deprecation list before it ships, not after a kubelet refuses to rejoin

The rest of this post is the receipts: what "boring" actually shipped, what it concretely saves a two-person team, the maintenance bill that does not go away, and a boring-era upgrade runbook.

The receipts: what "boring" actually shipped​

Start with the counts, because "boring" is a claim about content, not vibes. Kubernetes 1.36 "Haru" landed in April 2026 with 70 tracked enhancements: 18 graduating to stable, 25 to beta, 25 entering alpha. Kubernetes 1.37 "Garhwal" followed on August 26 with 67 tracked changes: 16 to stable, 23 to beta, 27 to alpha — and exactly one deprecation. For a project that once shipped a new storage subsystem or networking model per release, a deprecation count you can hold up on one finger is the whole story.

The stable graduations read like a list of things operators have wanted finished for years. Pressure Stall Information (PSI) metrics on cgroup v2 went GA in 1.36, which finally gives the kubelet a kernel-level signal for contention — tasks stalled waiting for CPU, memory, or I/O — instead of the utilization percentages that keep saying "fine" while workloads queue. User Namespaces for pods went GA in the same release, so rootless tenant pods are a supported primitive rather than a feature-gated experiment. SELinux volume labeling went GA with mount-based labeling instead of the old recursive relabel pass that blocked pod startup on large volumes. Volume Group Snapshots went GA for anyone backing tenant data with CSI storage. And Dynamic Resource Allocation kept its long march toward production readiness, replacing the decade-old integer-count device-plugin hack with structured, claim-based GPU scheduling.

Then 1.37 graduated the single most relatable item on the list: the metrics.k8s.io API — the backbone of kubectl top and every HPA CPU/memory policy ever written — went stable after nine years in beta, out of Kubernetes' twelve years of public existence. The same release took HPA scale-to-zero to beta and enabled it by default, so an HPA on an object or external metric (queue lag, requests per second) can scale a deployment to zero pods and back with no add-on. Queue consumers, batch workers, and idle GPU workloads finally stop burning money while waiting.

Boring does not mean toothless, though. There is exactly one real deadline hiding in these releases, and it has teeth: 1.37 turns cgroup v1 into a kubelet start failure unless explicitly overridden, with kube-dns and IPVS mode also on the way out. If your node images still boot cgroup v1, "boring" will still ruin your week. That is precisely one checklist item instead of a dozen — which is the point — but it is not zero.

What boring saves a two-person platform team​

Translate the release notes into evenings saved.

First, the deprecation audit fits in an afternoon. The expensive part of upgrade season was never the upgrade itself; it was reading a deprecation list long enough to need a spreadsheet, then grepping every manifest, Helm chart, and controller for removed APIs. One deprecation per release turns that into a lookup, not a project. When nothing surprising lands in the API surface, chained upgrades — 1.35 to 1.36 to 1.37, one minor at a time, control plane before workers — become a repeatable motion instead of a fresh risk assessment each round.

Second, Mixed Version Proxy keeps maturing, which makes the riskiest window of any upgrade — the hours when your control plane speaks two versions at once — meaningfully safer. A small team cannot afford a staging fleet that mirrors production; safer mixed-version skew is the next best thing to a second environment.

Third, the graduations above remove tools you were maintaining yourself. PSI metrics GA means the node-pressure eviction heuristics you hand-rolled (or, more likely, never got around to writing) get a kernel-backed replacement. HPA scale-to-zero beta means the "keep one pod warm to watch the queue" pattern — and the event-driven-autoscaling add-on many teams installed partly for that — becomes optional for the common cases. SELinux mount labeling GA deletes a whole class of "why is this pod stuck in ContainerCreating for six minutes" tickets on SELinux-enforcing node images. Each one is small. Together they are the difference between a platform that needs a dedicated SRE and one a backend engineer tends on Fridays.

The bill that doesn't go away​

Now the honest half, because "boring features" never meant "fewer upgrades." Kubernetes still ships three minors a year, still supports only the three most recent under its N-2 policy (roughly twelve months of patches plus a short grace period), and still cuts patch releases about weekly. Across every supported minor, plus Cluster API, plus your infrastructure provider, plus the container runtime, a small fleet owes on the order of hundreds of upstream patch releases a year. None of them stop being due because the features are incremental. A boring release train is still a train, and standing on the platform still ends the same way: 1.34 reaches end of life in late October 2026, and whatever you have not moved by then is yours to secure alone.

The runtime layer has its own calendar that Kubernetes releases do not control. Containerd 1.7's maintenance window ends in September 2026 — a support-policy deadline, not something Kubernetes enforces, which makes it easier to miss and no less real. And Cluster API itself has a sunset on the books that every CAPI fleet should already be tracking: the v1beta1 API, which every provider has shipped against for years, is deprecated and stops being served in CAPI v1.16 in April 2027. Migrating provider manifests to v1beta2 is exactly the kind of unglamorous, non-optional work the boring era does not excuse you from.

So the correct mental model is not "upgrades are over." It is "upgrades are now only the patch treadmill, with no re-architecture homework attached." That is a genuine, bankable improvement — but the treadmill keeps its speed.

A boring-era upgrade runbook for a part-time team​

Boring upstream rewards a boring process. Here is the whole runbook, tuned for a team with no spare capacity to surge through a botched upgrade:

  1. Track freeze calendars, not just GA dates. 1.37's code freeze landed weeks before its August 26 GA. A published freeze date is a concrete window to finish your pre-flight audit against a release's breaking changes before it ships. Put the next freeze on the calendar the day the release cycle starts.
  2. Pre-flight the deprecation list the week of code freeze. With one deprecation per release, this is a grep across your manifests and CRDs, not a project. Confirm your CAPI provider and CSI driver support the target minor before anything else.
  3. One minor at a time, control plane first. Kubernetes only supports +1 minor upgrades, and workers must follow the control plane. Chain them (1.35 → 1.36 → 1.37) rather than letting versions pile up into a multi-hop weekend.
  4. Check the node image before the cluster. The cgroup v1 enforcement in 1.37 is the sharp edge of the boring era: verify your node images boot cgroup v2, and confirm runtime versions against support windows (containerd 1.7's ends September 2026) while you are in there.
  5. Migrate CAPI APIs on their schedule, not yours. v1beta1 stops being served in April 2027. Treat the v1beta2 migration as a tracked upgrade item with a deadline, not background tech debt.
  6. Roll workers in waves and watch PSI, not just CPU percent. Post-upgrade, the newly GA stall metrics are the fastest way to catch noisy-neighbor regressions your old dashboards would have missed.

Six steps, no heroics. That is what boring buys you: a runbook short enough to actually follow.

Boring upstream is the permission slip​

Step back and the pattern is bigger than one team's evenings. "Kubernetes is boring now — and that is the point" has become the standard 2026 framing, from conference talks to best-practice guides, because boring infrastructure is infrastructure you can build on without flinching. A decade ago, running Kubernetes was a statement. In 2026 it is plumbing. And plumbing is exactly what a git-push PaaS needs underneath it: you cannot promise tenants uneventful deploys on top of an eventful orchestrator.

That is why the boring era matters beyond upgrade season. Every graduation above — stable metrics APIs, default-on scale-to-zero, rootless pods, structured GPU claims — is one fewer sharp edge between "push a git repo" and "get a running HTTPS service." The platform team that used to spend its Fridays absorbing upstream churn can spend them on tenant-facing work instead. Boring upstream is the precondition; uneventful Kubernetes for everyone else is the product.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Star the repo on GitHub or deploy your first app today.

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex