Multi-tenancy was a compromise. vCluster, CAPI, and better tooling have made the compromise unnecessary — and kept blast radius small.

For a decade the answer to “we have multiple teams and we want Kubernetes” was: share a cluster. Namespaces, RBAC, network policy, resource quotas. It worked. It was also a constant source of blast-radius arguments and noisy-neighbor incidents, and the team that wanted a CRD that conflicted with someone else’s CRD was always out of luck.

Cluster-per-team used to be operationally untenable. Provisioning a cluster took hours. Keeping fleets on the same Kubernetes version was a quarterly project. Observability was fragmented. That era is over.

CAPI makes cluster provisioning declarative and reconciled. Talos makes the nodes immutable and the API surface small. vCluster makes “a cluster” cheap enough that you can give every team one and still sleep at night. GitOps ties the fleet together: one repo, N cluster definitions, Argo or Flux does the rest.

The consequence is a different org shape. Platform teams stop negotiating namespace quotas and start operating a fleet. Application teams get a cluster they can actually own — upgrades, CRDs, the works — without the platform team being the bottleneck for every change.

The shared cluster is not dead. It is the right answer for some shapes of team and some shapes of workload. But it is no longer the default, and most of the orgs we work with are discovering they moved past it without announcing it.