Passer au contenu principal

Expertise (Kubernetes)

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 production

Cluster 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 machinedeployments

ArgoCD 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 list
apiVersion: 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)

Sources