8 min left
Back to Series

The Stack > Article 52 | Intermediate | 8 min read

Article 52Intermediate8 min read

How should large infrastructure teams structure Kubernetes to cut operational overhead by 40%?

Practical patterns for structuring Kubernetes at scale—multi-account control planes, shared services, and managed clusters that cut ops overhead.


How should large infrastructure teams structure Kubernetes to cut operational overhead by 40%?

Large infrastructure teams often drown in operational complexity as their Kubernetes footprint grows. What begins as a single cluster serving a handful of applications becomes a tangled web of namespaces, RBAC policies, and custom tooling that demands constant firefighting. This article walks through proven architectural patterns that reduce operational overhead by 40% or more: multi-account control planes, centralized shared services, and the shift from self-managed to managed clusters that reclaims 75% of deployment friction.

Multi-account EKS architecture separates control planes from workloads

The single-account, multi-cluster pattern breaks down at scale. When dozens of Elastic Kubernetes Service (EKS) clusters live in one AWS account, you create a blast radius problem. A misconfigured policy or compromised credential cascades across every workload. The alternative is a multi-account architecture where each business unit or environment occupies its own AWS account, with control planes isolated from the workloads they orchestrate.

Think of accounts like rooms in a building. A single-account setup puts everyone in one giant open floor—noise travels, mistakes ripple, security boundaries blur. Multi-account architecture gives each team their own room with a locked door, shared hallways for common services, and fire walls that contain failures.

In practice, this means a hub-and-spoke model. A central platform account hosts shared services: CI/CD pipelines, observability stacks, policy enforcement tooling. Spoke accounts—development, staging, production, per-team sandboxes—each run their own EKS clusters. Cross-account IAM roles let the hub deploy and monitor without granting spoke teams carte blanche on the platform itself.

The operational win is immediate. When a developer experiments in their sandbox account and accidentally requests 500 nodes, only that account's quota takes the hit. Production keeps running. Security teams apply service control policies (SCPs) at the account level, blocking risky API calls before they reach Kubernetes. Billing becomes legible—each team's AWS spend maps cleanly to an account, no spreadsheet archaeology to allocate shared cluster costs.


Centralized shared services enforce policy without sacrificing autonomy

Autonomy and governance sound like opposing forces, but the right shared services layer makes them allies. The pattern: centralize the control plane for policy, observability, and secrets management, but decentralize the data plane so teams deploy on their own cadence.

A shared GitOps controller (like Flux or Argo CD) lives in the platform account and watches repositories across all spoke clusters. Teams commit Kubernetes manifests to their repos; the controller syncs changes automatically. The platform team defines admission policies using Open Policy Agent (OPA) or Kyverno, enforced at the cluster level—every pod must set resource limits, no privileged containers, images must come from approved registries. These policies apply uniformly, but teams still own their deployment pipelines and choose their own tools within those guardrails.

AspectCentralizedDecentralized
Policy enforcementOPA/Kyverno rules in platform repoApplied at admission time per cluster
Observability stackPrometheus, Grafana, Loki in shared accountMetrics scraped via federation from spoke clusters
Secrets managementExternal Secrets Operator syncing from central vaultTeams reference secrets, platform controls access
GitOps controllerFlux/Argo in platform accountTeams own their manifest repos

The shared observability stack is a force multiplier. Instead of each team spinning up their own Prometheus and wrestling with retention policies, a centralized Thanos or Cortex deployment aggregates metrics from all clusters. Dashboards in Grafana surface cross-cluster patterns—a spike in pod restarts across three unrelated services points to a shared node issue, not three separate bugs. On-call engineers spend less time context-switching between monitoring UIs and more time fixing root causes.

Centralized policy enforcement with decentralized execution lets teams move fast without breaking the platform—governance becomes infrastructure, not a ticketing bottleneck.

Secrets management follows the same blueprint. The platform account runs a Vault or AWS Secrets Manager instance. Spoke clusters use External Secrets Operator to sync secrets into their namespaces, but access is gated by IAM roles the platform team controls. Developers never touch production secrets directly—they request access via Terraform or a self-service portal, and the platform provisions just-in-time credentials. This cuts secret sprawl and makes rotation automatic.


Managed Kubernetes reduces deployment friction by 75%

Self-managed Kubernetes means owning the upgrade cycle, patching etcd, tuning kubelet flags, and debugging CNI failures at 2 a.m. Managed Kubernetes—EKS, GKE, AKS—offloads that undifferentiated heavy lifting to the cloud provider. The 75% friction reduction is not marketing spin; it represents the hours you reclaim when you stop babysitting control plane certificates and start shipping features.

EKS handles control plane upgrades with a single API call. You pick a version, AWS rolls nodes, tests cluster health, and rolls back on failure. Compare that to self-managed: you snapshot etcd, upgrade the control plane manually, verify apiserver health, upgrade worker nodes in batches, and hope your CNI plugin survives the new kernel. The managed path takes minutes of wall time and zero on-call anxiety. The self-managed path takes hours and risks downtime if any step fails.

Managed Kubernetes also shrinks the surface area for operational surprises. EKS automatically patches the control plane for CVEs—no emergency midnight deploys to fix a kubelet vulnerability. Node groups integrate with AWS autoscaling and launch templates, so scaling and AMI updates happen through familiar AWS tooling, not bespoke scripts. The control plane SLA (99.95% for EKS) is backed by AWS credits, not your team's heroics.

The velocity gain compounds. Teams used to batch infrastructure changes—upgrade the cluster once a quarter, test exhaustively, cross fingers. With managed Kubernetes, upgrades become routine. You test in dev, roll to staging, apply to prod, all in a week. Faster feedback loops mean less drift between environments and fewer "works on my machine" production incidents.


North Star architecture prioritizes operational simplicity

The North Star is a platform that feels like a product. Application teams interact through declarative interfaces—Helm charts, Terraform modules, custom resource definitions (CRDs)—not Slack messages to the platform team. Self-service is the default, and the platform scales by multiplying what one engineer can manage, not by adding headcount.

Start with cluster lifecycle as code. Every EKS cluster is a Terraform module: standardized inputs (cluster name, instance types, node group sizes), standardized outputs (API endpoint, OIDC provider ARN). The platform team maintains the module in a monorepo; application teams instantiate clusters by committing a few lines of HCL. This removes the "I need a cluster" ticket queue and ensures every cluster is born with the same baseline: logging agents, network policies, admission controllers.

Next, codify operational runbooks. When a cluster needs an upgrade, the process is a GitHub Actions workflow: propose a version bump, run automated smoke tests, get approval, apply the change. No wiki pages titled "How to Upgrade EKS (updated 2022)." The runbook is the pipeline, and the pipeline is tested on every pull request.

The architecture should optimize for mean time to resolution (MTTR), not mean time between failures (MTBF). Failures will happen—nodes will crash, zones will go down, applications will leak memory. The platform's job is to make recovery obvious and fast. That means centralized logging with indexed fields for quick searches, pre-built dashboards that surface common failure modes, and alerting rules tuned to page humans only when automation exhausts its options.

Finally, instrument everything. Track deployment frequency, lead time, change failure rate, and MTTR across all teams. Publish these metrics in a shared dashboard. When one team's deployment frequency doubles after adopting a new CI pattern, that pattern becomes a blueprint for others. The platform improves through visible, data-driven feedback loops, not tribal knowledge.


What this means for builders

If you operate more than five clusters, the multi-account pattern should be on your roadmap. Start by splitting production and non-production into separate AWS accounts—this alone reduces the blast radius of experiments and simplifies compliance audits. Use AWS Organizations and Control Tower to automate account provisioning so creating a new environment is a Terraform apply, not a two-week ticket.

Invest in centralized observability before the pain becomes unbearable. A shared Prometheus and Grafana stack pays dividends from day one, and adding clusters later is incremental—each new cluster just exports metrics to the federation endpoint. Choose OpenTelemetry for instrumentation to avoid vendor lock-in and ensure compatibility as your monitoring stack evolves.

Managed Kubernetes is the right default unless you have a compelling reason to own the control plane. That reason is rarely "we want more flexibility." It is usually "our compliance framework forbids managed services" or "we run in an air-gapped environment." For everyone else, the opportunity cost of self-managing clusters is better spent on building features that differentiate your product.

As your platform matures, treat it like a product: gather feedback from application teams, prioritize features that unlock the most velocity, deprecate tooling that does not get used. The strongest platform teams have a product manager who translates infrastructure capabilities into user stories developers care about. When the platform becomes the easy path—not the mandated path—you have built something that scales.


Conclusion

Large infrastructure teams do not fail because Kubernetes is hard. They fail because they treat infrastructure like a construction project—build it once, maintain it forever—rather than a product that evolves with its users. The patterns here—multi-account isolation, centralized shared services, managed clusters, and operational simplicity as a design goal—cut overhead not by working harder, but by designing systems that require less constant intervention. The 40% reduction in operational load comes from making the right thing the easy thing, automating the toil that does not teach you anything, and reserving human attention for the problems that actually matter. When your platform team spends less time firefighting and more time building leverage, the entire organization moves faster.


the-stackintermediatekuberneteseksinfrastructuredevopsplatform-engineering

Up next in the series

Article 53Live

Does disabling telemetry break Claude Code's agent configuration?

Claude Code skips AGENTS.md when telemetry is off, forcing a choice between privacy and functionality—and what that means for tool design.

the-stackintermediateclaudeai-agents