Multi-cluster
Un seul cluster Kubernetes présente des limites : couplage fort entre toutes les équipes, rayon d'explosion global en cas de problème, contraintes géographiques. Le multi-cluster répond à des besoins de résilience (active-active multi-région), d'isolation (prod/staging séparés), et de scalabilité organisationnelle.
Topologies multi-cluster
- Hub-and-spoke : un cluster de management (hub) qui orchestre des clusters worker (spokes). Pattern utilisé par Fleet, ArgoCD ApplicationSets, ACM (Red Hat).
- Fédération : clusters équivalents qui partagent des workloads. Plus complexe à opérer.
- Multi-région active-active : workloads dupliqués sur plusieurs régions, avec routage géographique du trafic.
Gestion des kubeconfigs
# Fusionner plusieurs kubeconfigs
KUBECONFIG=~/.kube/cluster-prod:~/.kube/cluster-staging kubectl config view --merge --flatten > ~/.kube/config
# Naviguer entre clusters
kubectl config get-contexts
kubectl config use-context prod-cluster
# ou avec kubectx (outil tiers)
kubectx prod-cluster
kubens productionCluster API
Cluster API (CAPI) est le projet Kubernetes pour provisionner et gérer des clusters via des objets Kubernetes. On crée des objets Cluster, MachineDeployment, MachinePool dans un cluster de management, et CAPI provisionne l'infrastructure (VMs, noeuds) via des providers (AWS, GCP, Azure, vSphere, Talos...).
# Initialiser un cluster de management
clusterctl init --infrastructure aws
# Créer un cluster workload
clusterctl generate cluster my-cluster --kubernetes-version v1.35.0 --control-plane-machine-count 3 --worker-machine-count 3 | kubectl apply -f -
kubectl get clusters
kubectl get machinedeploymentsArgoCD multi-cluster
ArgoCD gère nativement le déploiement sur plusieurs clusters. On enregistre les clusters cibles dans ArgoCD, puis les Applications pointent vers le cluster de destination.
argocd cluster add staging-context --name staging
argocd cluster add prod-context --name production
argocd cluster listapiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp
spec:
generators:
- clusters:
selector:
matchLabels:
env: production # Déploie sur tous les clusters taggés production
template:
spec:
destination:
server: "{{server}}"
namespace: myapp
source:
repoURL: https://github.com/myorg/k8s-manifests
path: "apps/myapp/{{name}}"Réseau inter-cluster
La communication entre pods de clusters différents nécessite une solution dédiée :
- Cilium Cluster Mesh : étend le réseau Cilium sur plusieurs clusters, service discovery et NetworkPolicies cross-cluster
- Submariner : tunnel IPsec entre clusters, résolution DNS cross-cluster via Lighthouse
- Istio multi-cluster : extension du service mesh sur plusieurs clusters (East-West gateway)