The average enterprise runs 15 Kubernetes clusters. Some run hundreds. Dev, staging, production. Multi-region. Multi-cloud. Edge. GPU clusters for AI. Each one needs consistent policy, security, and observability.
Managing them individually does not scale. Here are the patterns that work.
Why Multi-Cluster
Single massive clusters seem simpler but fail in practice:
- Blast radius β one misconfigured admission webhook takes down everything
- Compliance boundaries β PCI, HIPAA, and GDPR data often cannot co-exist in one cluster
- Team isolation β namespace isolation is not enough for hostile multi-tenancy
- Performance β etcd degrades above ~5,000 nodes; API server latency increases with cluster size
- GPU specialization β AI workloads need different node types and scheduling policies
The industry standard: purpose-built clusters with centralized management.
Pattern 1: GitOps Fleet Management
Use a single Git repository as the source of truth for all clusters:
fleet-repo/
βββ base/ # Shared across all clusters
β βββ namespaces/
β βββ network-policies/
β βββ rbac/
β βββ monitoring/
βββ overlays/
β βββ production-eu/ # EU production overrides
β βββ production-us/ # US production overrides
β βββ staging/
β βββ gpu-cluster/ # AI workload specifics
βββ clusters/
βββ prod-eu-1.yaml # ArgoCD ApplicationSet target
βββ prod-us-1.yaml
βββ staging-1.yaml
βββ gpu-eu-1.yamlArgoCD ApplicationSets
Deploy the same app to all clusters with per-cluster customization:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: platform-base
spec:
generators:
- git:
repoURL: https://github.com/org/fleet-repo
revision: main
directories:
- path: clusters/*
template:
metadata:
name: '{{path.basename}}-platform'
spec:
project: platform
source:
repoURL: https://github.com/org/fleet-repo
targetRevision: main
path: 'overlays/{{path.basename}}'
destination:
server: '{{cluster.url}}'
namespace: platform
syncPolicy:
automated:
prune: true
selfHeal: trueOne commit, all clusters updated. Drift detected and corrected automatically.
Pattern 2: Cluster API (CAPI)
Manage cluster lifecycle β creation, upgrades, scaling β as Kubernetes resources:
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: prod-eu-2
spec:
clusterNetwork:
pods:
cidrBlocks: ["10.244.0.0/16"]
services:
cidrBlocks: ["10.96.0.0/12"]
controlPlaneRef:
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: KubeadmControlPlane
name: prod-eu-2-control-plane
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AzureCluster # or AWSCluster, GCPCluster, vSphereCluster
name: prod-eu-2Spin up a new cluster by committing a YAML file. Upgrade Kubernetes versions by changing a field. Delete a cluster by removing the resource.
Pattern 3: Rancher Fleet
Rancher provides a complete multi-cluster management UI with Fleet for GitOps:
- Cluster provisioning β create clusters on any infrastructure from one dashboard
- Fleet GitOps β declare desired state, Fleet reconciles across clusters
- Global RBAC β manage roles across all clusters from one place
- Monitoring stack β Prometheus + Grafana deployed consistently to every cluster
Best for organizations that want a management UI without building everything from scratch.
Cross-Cluster Networking
Services in one cluster calling services in another:
| Solution | Type | Complexity | Best For |
|---|---|---|---|
| Submariner | L3 tunnel | Medium | Hybrid cloud |
| Cilium ClusterMesh | eBPF | Medium | Same cloud provider |
| Istio Multi-Cluster | Service mesh | High | Full observability |
| Skupper | L7 virtual application network | Low | Simple cross-cluster services |
| DNS + Ingress | L7 | Low | Independent services |
Disaster Recovery
Multi-cluster enables active-active and active-passive DR:
Primary (EU) Secondary (US)
ββββββββββββββββ ββββββββββββββββ
β prod-eu-1 ββββββββββΆβ prod-us-1 β
β Active β Velero β Standby β
β Traffic: 100%β backups β Traffic: 0% β
ββββββββββββββββ ββββββββββββββββ
β β
Global LB (Cloudflare/Route53)
Failover: DNS-based or anycastVelero for backup and restore. External-DNS for automatic DNS failover. ArgoCD ensures the standby cluster is always deployment-ready.
Related Resources
- ArgoCD Cheat Sheet
- Kubernetes RBAC Guide
- Platform Engineering Metrics
- Backstage Developer Portal
- Kubernetes Gateway API
- Helm vs Kustomize
About the Author
I am Luca Berton, AI and Cloud Advisor. I design multi-cluster Kubernetes architectures for enterprises. Book a consultation.



