DevOps and Infrastructure

Maîtriser les stratégies de déploiement Kubernetes : du Rolling au Canary

Dans le domaine du DevOps moderne, la capacité de publier des mises à jour logicielles sans perturber les utilisateurs finaux n'est pas seulement une commodité, c'est une exigence. Kubernetes, la plateforme d'orchestration de conteneurs standard de l'industrie, offre une suite de stratégies de déploiement sophistiquées conçues pour atténuer les risques et garantir une haute disponibilité. Pour les développeurs intermédiaires et avancés, comprendre les nuances de ces stratégies est crucial pour construire une infrastructure résiliente. Cet article explore les modèles de déploiement Kubernetes les plus courants, leur mise en œuvre technique et quand utiliser chacun d'eux.

La valeur par défaut : les mises à jour progressives (Rolling Updates)

La stratégie RollingUpdate est le comportement par défaut dans Kubernetes. Elle fonctionne en remplaçant progressivement les anciens pods par de nouveaux. Le contrôleur s'assure qu'au moins un nombre spécifié de pods est disponible (minReadySeconds) avant de terminer les instances plus anciennes. Cette approche est excellente pour les déploiements standard car elle équilibre la vitesse et la disponibilité.

Considérez l'extrait de manifeste Deployment suivant. En définissant strategy.type sur RollingUpdate et en configurant maxSurge et maxUnavailable, vous contrôlez le rythme de la mise à jour :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: web-app
  template:
    spec:
      containers:
      - name: web
        image: my-app:1.1

Dans cet exemple, maxUnavailable: 0 garantit qu'aucune requête n'est perdue pendant la mise à jour, tandis que maxSurge: 1 permet la création temporaire d'un pod supplémentaire. Cela est idéal pour les applications sans état où l'adoption immédiate et à grande échelle de la nouvelle version est acceptable.

Contrôle avancé : Déploiements Canary

Bien que les mises à jour progressives soient fiables, elles impliquent souvent de promouvoir la nouvelle version à 100 % des utilisateurs immédiatement. Un déploiement Canary vous permet de diriger un petit pourcentage de trafic vers la nouvelle version, en surveillant les erreurs ou les problèmes de performance avant un déploiement complet. Cette stratégie réduit considérablement l'impact d'une mauvaise version.

La mise en œuvre de déploiements Canary dans Kubernetes implique généralement la création de deux déploiements distincts partageant la même étiquette de service mais avec des nombres de réplicas différents. Le façonnage du trafic est souvent géré par un contrôleur Ingress (comme Nginx ou Traefik) ou un maillage de services comme Istio. Cependant, une mise en œuvre de base pourrait ressembler à ceci :

# Déploiement Canary (20 % des utilisateurs)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app-canary
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: web
        image: my-app:1.2

# Déploiement Stable (80 % des utilisateurs)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app-stable
spec:
  replicas: 4
  template:
    spec:
      containers:
      - name: web
        image: my-app:1.1

Pour obtenir un partage de trafic réel, vous utiliseriez un Service avec des points de terminaison pondérés ou vous configureriez vos règles Ingress pour router 20 % des requêtes entrantes vers le service canary et 80 % vers le service stable.

Basculement sans interruption : Déploiements Blue-Green

Dans un déploiement Blue-Green, vous maintenez deux environnements de production identiques : Blue (servant actuellement le trafic en direct) et Green (où la nouvelle version est déployée). Une fois que l'environnement Green a passé tous les contrôles de santé, vous basculez le répartiteur de charge pour qu'il pointe vers Green. Cela offre une capacité de retour arrière instantanée : si Green échoue, vous basculez simplement le trafic vers Blue.

Le défi des déploiements Blue-Green dans Kubernetes réside dans la gestion de deux ensembles de ressources (Services, Déploiements, Volumes Persistants). Cela nécessite une planification minutieuse, surtout si l'état de votre application ne peut pas être facilement synchronisé entre les deux environnements. Cette stratégie est mieux adaptée aux applications avec des migrations de base de données complexes ou un état partagé difficile à partager simultanément.

Choisir la bonne stratégie

Le choix de la bonne stratégie dépend de vos contraintes spécifiques. Utilisez des mises à jour progressives (Rolling Updates) pour les microservices simples et sans état où la vitesse de déploiement est primordiale. Optez pour des déploiements Canary lorsque vous devez valider de nouvelles fonctionnalités auprès d'un sous-ensemble d'utilisateurs ou surveiller de près la consommation des ressources. Enfin, réservez le Blue-Green pour les mises à jour critiques où un retour arrière immédiat est non négociable et que les coûts d'infrastructure sont moins une préoccupation.

Conclusion

Kubernetes fournit des outils puissants pour gérer les cycles de vie des applications, mais la plateforme elle-même n'impose pas une seule méthode de livraison. En comprenant les compromis entre les stratégies Rolling, Canary et Blue-Green, les ingénieurs DevOps peuvent concevoir des pipelines de déploiement qui s'alignent sur les exigences de fiabilité de leurs applications. À mesure que vous vous orientez vers le GitOps et les pipelines CI/CD automatisés, l'intégration de ces stratégies garantit que votre infrastructure reste robuste, évolutive et capable de gérer le rythme rapide du développement logiciel moderne.

Share: