concept6 min de lecture

Canary Deployment sur Kubernetes : déploiement progressif expliqué

SFEIR Institute

Points clés

  • Canary deployment route 5-10% du trafic vers la nouvelle version avant rollout complet
  • Flagger automatise l'analyse et le rollback avec des seuils de succès configurables (error rate < 1%, latence P99)

Le canary deployment Kubernetes stratégie permet à tout ingénieur infrastructure Kubernetes de déployer de nouvelles versions en limitant l'exposition aux risques. Cette technique de déploiement progressif Kubernetes route un faible pourcentage du trafic vers la nouvelle version avant un rollout complet. Avec 82% des utilisateurs de containers exécutant Kubernetes en production, maîtriser cette stratégie devient indispensable.

TL;DR : Le canary deployment expose progressivement 5-10% du trafic à une nouvelle version, permet de valider les métriques en conditions réelles, puis augmente graduellement jusqu'à 100% ou rollback automatique.

Pour maîtriser ces compétences, découvrez la formation LFS458 Administration Kubernetes.

Qu'est-ce que le canary deployment pour l'ingénieur infrastructure Kubernetes ?

Le canary deployment est une stratégie de déploiement qui introduit une nouvelle version d'application auprès d'un sous-ensemble d'utilisateurs avant de l'étendre à l'ensemble du trafic. Le terme provient des canaris utilisés dans les mines pour détecter les gaz toxiques.

Cette approche se distingue du rolling update standard par son contrôle granulaire du trafic. Là où un rolling update remplace progressivement tous les pods, le canary maintient deux versions simultanément avec une répartition de trafic configurable.

À retenir : Le canary deployment valide une version en production réelle avec un blast radius minimal.

Si vous utilisez Kubernetes, le canary deployment représente une pratique essentielle pour minimiser les risques de déploiement.

Le guide déploiement et mise en production Kubernetes couvre les fondamentaux à connaître avant d'implémenter cette stratégie.

Comment fonctionne le déploiement progressif Kubernetes natif ?

Architecture de base avec deux Deployments

La méthode native utilise deux Deployments distincts pointant vers le même Service :

# deployment-stable.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-stable
spec:
  replicas: 9
  selector:
    matchLabels:
      app: myapp
      version: stable
  template:
    metadata:
      labels:
        app: myapp
        version: stable
    spec:
      containers:
      - name: myapp
        image: myapp:1.0.0
---
# deployment-canary.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-canary
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      version: canary
  template:
    metadata:
      labels:
        app: myapp
        version: canary
    spec:
      containers:
      - name: myapp
        image: myapp:1.1.0

Service unifié

Le Service sélectionne les pods des deux Deployments via le label commun :

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp  # Sélectionne stable ET canary
  ports:
  - port: 80
    targetPort: 8080

Avec 9 replicas stable et 1 replica canary, environ 10% du trafic atteint la nouvelle version.

Limitations de l'approche native

Cette méthode présente des contraintes :

  • Granularité limitée : la répartition dépend du ratio de pods
  • Pas de routage intelligent : impossible de cibler des utilisateurs spécifiques
  • Rollback manuel : nécessite une intervention pour supprimer le canary

Les stratégies de déploiement Kubernetes comparent cette approche aux alternatives.

Comment l'ingénieur infrastructure Kubernetes implémente le progressive delivery avec Istio ?

Configuration du traffic splitting

Istio permet un contrôle précis du routage via VirtualService :

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - myapp
  http:
  - route:
    - destination:
        host: myapp
        subset: stable
      weight: 95
    - destination:
        host: myapp
        subset: canary
      weight: 5

DestinationRule pour les subsets

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: myapp
spec:
  host: myapp
  subsets:
  - name: stable
    labels:
      version: stable
  - name: canary
    labels:
      version: canary

Routage basé sur les headers

Ciblez des utilisateurs spécifiques pour le testing :

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - myapp
  http:
  - match:
    - headers:
        x-canary:
          exact: "true"
    route:
    - destination:
        host: myapp
        subset: canary
  - route:
    - destination:
        host: myapp
        subset: stable
À retenir : Le progressive delivery Kubernetes Istio offre un contrôle granulaire impossible avec les Deployments natifs.

Le guide GitOps et Kubernetes explique comment automatiser ces configurations.

Automatiser le canary deployment avec Flagger

Installation et configuration

Flagger automatise l'analyse et la promotion des canary deployments :

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: myapp
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  service:
    port: 80
  analysis:
    interval: 1m
    threshold: 5
    maxWeight: 50
    stepWeight: 10
    metrics:
    - name: request-success-rate
      thresholdRange:
        min: 99
      interval: 1m
    - name: request-duration
      thresholdRange:
        max: 500
      interval: 1m

Workflow automatisé

Flagger exécute ce workflow :

  1. Détection : nouvelle image dans le Deployment
  2. Création : déploiement du canary avec 0% de trafic
  3. Analyse : incrémentation progressive (10% → 20% → ... → 50%)
  4. Validation : vérification des métriques à chaque étape
  5. Promotion : passage à 100% si succès, rollback si échec

Intégration Prometheus

Configurez les métriques personnalisées :

metrics:
- name: error-rate
  templateRef:
    name: error-rate
    namespace: flagger-system
  thresholdRange:
    max: 1
  interval: 1m

Le pipeline CI/CD pour Kubernetes détaille l'intégration de Flagger dans votre chaîne de déploiement.

Comparaison canary vs autres stratégies de déploiement

CritèreCanaryRolling UpdateBlue-Green
Risque d'expositionMinimal (5-10%)Progressif (par pod)Total (50% min)
RollbackInstantanéProgressifInstantané
Ressources requises+10-20%0% supplémentaire+100%
ComplexitéÉlevéeFaibleMoyenne
Validation en prodOuiLimitéeOui (après switch)
Routing granulaireOui (avec service mesh)NonNon

Helm vs Kustomize compare les outils pour gérer ces configurations.

Quelles métriques surveiller pendant un canary deployment ?

Métriques de performance

  • Latence P99 : temps de réponse du 99e percentile
  • Throughput : requêtes par seconde traitées
  • Error rate : pourcentage d'erreurs 5xx

Métriques business

  • Conversion rate : impact sur les KPIs métier
  • Bounce rate : taux d'abandon utilisateur
  • Revenue per request : pour les applications e-commerce

Métriques d'infrastructure

  • CPU/Memory utilisation : consommation des ressources
  • Pod restarts : stabilité des containers
  • Network errors : problèmes de connectivité
# Requête Prometheus pour le taux d'erreur par version
sum(rate(http_requests_total{status=~"5.*", app="myapp"}[5m])) by (version)
/
sum(rate(http_requests_total{app="myapp"}[5m])) by (version)
À retenir : Définissez vos critères de succès avant le déploiement. Un canary sans métriques est un rollout aveugle.

Les tutoriels et guides pratiques Kubernetes proposent des exercices hands-on sur le monitoring.

Bonnes pratiques pour réussir votre canary deployment Kubernetes stratégie

1. Commencer petit

Démarrez avec 1-5% du trafic. Augmentez par paliers de 10% maximum.

2. Définir des critères d'échec clairs

Automatisez le rollback si :

  • Taux d'erreur > 1%
  • Latence P99 > 2x baseline
  • Alertes critiques déclenchées

3. Tester en conditions réelles

Le canary doit recevoir du trafic représentatif :

  • Heures de pointe incluses
  • Tous les types de requêtes
  • Durée suffisante (minimum 30 minutes)

4. Préparer le rollback

# Rollback immédiat avec kubectl
kubectl rollout undo deployment/myapp-canary

# Avec Flagger, supprimer simplement l'image canary
kubectl set image deployment/myapp myapp=myapp:1.0.0

L'autoscaling Kubernetes garantit que votre canary scale correctement sous charge.

Cas d'usage réels du déploiement progressif Kubernetes

Migration de base de données

Validez les changements de schéma avec un canary limité avant la migration complète.

Refactoring majeur

Testez une réécriture de service avec un faible pourcentage de trafic réel.

Feature flags

Combinez canary deployment et feature flags pour un contrôle maximal.

Selon le rapport CNCF 2025, 104 000 personnes ont passé l'examen CKA avec une croissance de 49% par an. La maîtrise du canary deployment fait partie des compétences attendues.

Passez à l'action avec une formation certifiante

La formation LFS458 Administration Kubernetes couvre les stratégies de déploiement avancées sur 4 jours. Pour les développeurs, la formation LFD459 Kubernetes pour les développeurs de 3 jours prépare au CKAD.

Consultez le calendrier des prochaines sessions et réservez votre place.