Lakshya

Infrastructure & Reliability · Reliability, operations & platforms · Chapter 17 of 33

The Kubernetes ecosystem, layer by layer

The controller in half of all clusters that is now unmaintained, the licence story everyone reports wrongly, and the mesh adoption number that halved.

7 min read1 diagramAll 33 chapters

The core has become boring in the good way — the last four releases are stability work, not new APIs. The interesting decisions are all in the layers around it, and several of them changed materially in the last twelve months.

Version and support, which is stricter than people assume

Detail
CadenceThree minor releases a year, roughly every 3–4 months
SupportedThe most recent three minors only. Anything older gets no security fixes
Patch supportAbout a year per minor
The deprecation rule that bitesA beta API is supported for 9 months OR 3 minor releases, whichever is longer. At three releases a year, the second clause usually wins — so ~12 months, not 9
GA APIsMay be deprecated but not removed within a major version. This is why v1 never disappears

The pre-upgrade check almost nobody runs: since v1.19 the API server increments a counter for deprecated API requests and stamps a deprecation marker on audit events. Scrape that metric and you get a precise list of what will break, from your own traffic, rather than reading release notes and guessing.

And a subtlety worth knowing: because objects already written to storage must remain decodable, ‘removed’ and ‘gone from etcd’ are different things. The REST endpoint — the ordinary web interface the cluster exposes — can be switched off while the API server still understands persisted data.

Dockershim — the most-mangled fact in this area

“Kubernetes dropped Docker, so Docker images stopped working.” That is wrong, and it is still repeated.

Images are OCI images. Something built with docker build runs identically under containerd or CRI-O. Nothing about image format changed.

What was removed was the shim — the kubelet's built-in translation layer to the Docker daemon. Deprecated in v1.20 (December 2020), removed from the kubelet in v1.24 (May 2022). Dating it to 2020 quotes the deprecation, not the removal.

If you genuinely need Docker Engine as the runtime, cri-dockerd is the adapter — maintained by Mirantis, not a Kubernetes component.

containerd is now the near-universal default across the managed services and most distributions; CRI-O is effectively the OpenShift runtime.

Ingress: the change most clusters have not acted on

THE BIGGEST LIVE CHANGE IN THE ECOSYSTEM, AND MOST CLUSTERS HAVE NOT ACTED ON IT ingress-nginx was RETIRED in March 2026 No releases. No bug fixes. No security patches, of any kind, ever again. It ran in roughly half of all cloud-native environments — and was maintained by one or two people in their free time. GATEWAY API, THE REPLACEMENT PATH — PAST GA AND STILL MOVING v1.4Oct 2025BackendTLSPolicy — the first spec for encrypting the gateway-to-backend hopv1.5Feb 2026ListenerSet breaks the 64-listener ceiling; TLSRoute and ReferenceGrant to Standardv1.6Jun 2026TCPRoute and UDPRoute graduate to v1; experimental resources move to their own group Is Ingress deprecated? No Kubernetes page says so. But it is feature-frozen in practice and its flagship controller is dead. Treat Gateway API as the forward path and Ingress as legacy-but-working. Both halves of that sentence matter. And a naming trap that is causing real damage: NGINX Gateway Fabric is a different project from ingress-nginx — a different codebase implementing a different API. “We’ll move to NGINX Gateway Fabric, it’s the same thing” is wrong. What this episode actually tells you is what an ecosystem looks like when consumption vastly outruns contribution. It is the best available answer to “what does we run Kubernetes really mean?”
A component in roughly half of all clusters is now unmaintained. The box at the bottom is the part worth carrying into an interview.

The retirement statement is unusually blunt for the project: the component was maintained solely by one or two people working in their free time, with technical debt and design flaws judged unfixable even with new resources. Existing deployments keep running and artefacts stay available — but remaining on it, in the committees' own words, leaves you vulnerable.

Where people are going: Envoy Gateway (the Cloud Native Computing Foundation migrated its own internal cluster to it), kgateway, NGINX Gateway Fabric, or the Gateway API implementations built into Istio and Cilium.

The layers you must choose in

LayerThe real choiceThe honest read
PackagingHelm, Kustomize, Timoni, cdk8sHelm 4 (Nov 2025) replaced the three-way merge with Server-Side Apply, which fixes a large class of 'it didn't update the field' bugs. It still templates YAML as text, so indentation is semantic. Kustomize is right for your own manifests, wrong for redistributing to strangers — no parameter contract, no versioning
GitOpsArgo CD, FluxBoth are CNCF Graduated — the claim that one is incubating is wrong. Argo brings its own RBAC layer mapped to SSO; Flux impersonates Kubernetes ServiceAccounts, so there is only one authorization system. Argo if humans click sync; Flux if the platform is machine-driven
Service meshIstio, Linkerd, CiliumIstio's ambient mode (GA Nov 2024) removes the per-Pod sidecar — a node-level L4 proxy, with a separate L7 proxy only where you need L7. That is the mesh's answer to its own biggest complaint
CNICilium, CalicoCilium graduated in Oct 2023 and is the second most active CNCF project after Kubernetes itself
AutoscalingCluster Autoscaler, Karpenter, KEDACluster Autoscaler scales pre-defined node groups; Karpenter is groupless — it reads pending Pod constraints and provisions the cheapest instance that fits. KEDA is not an alternative to either: it scales Pods off external events and composes with them

Two facts almost everyone reports wrongly

1 — Linkerd did not go closed-source and did not change its licence. It is Apache 2.0 and CNCF Graduated, with copyright held by the project's authors. What changed in February 2024 is the release model: the open-source project stopped publishing stable release artefacts. Weekly edge releases continue from the open repository, and the vendor's enterprise distribution is free including production for organisations under fifty people. “You can't run Linkerd for free in production” is false.

2 — Karpenter is not a standalone CNCF project. Its vendor-neutral core was contributed to Kubernetes SIG Autoscaling, where it sits alongside Cluster Autoscaler. Saying “Karpenter is a CNCF project like Argo” is wrong, and it matters because governance is what people are actually asking about.

And what eBPF actually replaced, since this is the third one people fumble: kube-proxy and the iptables datapath, not the service mesh. Service load balancing becomes a kernel hash-map lookup — constant time regardless of cluster size — instead of sequential iptables rule evaluation that degrades as services multiply.

Service mesh adoption halved, and that is a correction rather than a failure

Survey data shows service mesh adoption falling from roughly 18% of developers to 8% over two years, while a large share of organisations report consolidating microservices back into bigger deployable units — which removes the premise for a mesh entirely.

The honest reading: the category over-sold itself to teams whose real problem was ‘we need mutual TLS and retries’, which a modern CNI and a decent HTTP client solve. You need a mesh if you need per-service layer-7 policy, multi-cluster identity, or regulated mTLS everywhere. Otherwise you need a CNI and a gateway. The drop is the market correcting, and sidecar-free designs may well reverse it.

Check yourself

How long is a Kubernetes release supported?The most recent three minors only, roughly a year of patches each. Beta APIs get 9 months or 3 minor releases, whichever is longer — usually about twelve months.
Did Kubernetes dropping Docker break Docker images?No. Images are OCI and run identically under containerd. What was removed was dockershim — deprecated in v1.20 and removed from the kubelet in v1.24.
Your cluster runs ingress-nginx. What now?Migrate. It was retired in March 2026 — no releases, no bug fixes, no security patches ever again — while running in roughly half of all clusters.
Is Linkerd still open source?Yes — Apache 2.0 and CNCF Graduated. What changed in 2024 was the release model: the open project stopped shipping stable artefacts. Edge releases continue.
What did eBPF replace in Kubernetes?kube-proxy and the iptables datapath. Service lookup becomes a constant-time kernel hash-map operation instead of sequential rule evaluation.
← AI in observability, honestlyManaged Kubernetes, and whether you should run it at all →