Este artículo está disponible en francés.
1. Les stratégies #
Choisir selon le risque et l'infrastructure.
Vue d'ensemble #
| Stratégie | Principe | Interruption | Retour arrière | Coût |
|---|---|---|---|---|
| Recreate | arrêter v1 puis démarrer v2 | oui | redéployer v1 | faible |
| Rolling update | remplacer les instances par lots | non | progressif (rollout undo) | faible |
| Blue/green | deux environnements, bascule du trafic | non | instantané | double infrastructure |
| Canary | petite part du trafic vers v2, puis augmentation | non | instantané, peu d'utilisateurs touchés | routage avancé |
| Feature flags | code déployé mais fonctionnalité désactivée | non | désactiver le drapeau | gestion des drapeaux |
Rolling update #
# Kubernetes : jamais moins de 100 % de capacité pendant la mise à jour
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate: { maxSurge: 1, maxUnavailable: 0 }
template:
spec:
containers:
- name: api
image: registry.example.com/shop/api:3f9c2e1
readinessProbe: # le trafic n'arrive qu'aux pods prêts
httpGet: { path: /health, port: 8080 }
periodSeconds: 5À savoir : Sans readiness probe, Kubernetes envoie du trafic à un pod qui démarre encore : le rolling update produit alors des erreurs.
Blue/green #
Canary #
# Argo Rollouts : canary avec paliers et analyse automatique
strategy:
canary:
steps:
- setWeight: 5
- pause: { duration: 5m }
- analysis: { templates: [{ templateName: taux-erreur }] }
- setWeight: 20
- pause: { duration: 10m }
- setWeight: 50
- pause: { duration: 15m }2. Découpler déploiement et mise en service #
Feature flags et dark launch.
Feature flags #
Un feature flag permet de déployer du code inactif et de l'activer plus tard, pour un pourcentage d'utilisateurs, une région ou les seuls testeurs internes. C'est ce qui rend possible le trunk-based development avec des fonctionnalités inachevées.
if flags.is_enabled("nouveau-panier", user_id=user.id): # OpenFeature, Unleash, LaunchDarkly, Flagsmith...
return nouveau_panier(user)
return ancien_panier(user)Erreur Courante : Chaque drapeau est une dette : supprimez-le dès que la fonctionnalité est activée pour tous, sinon le code accumule des branches mortes difficiles à tester.
Dark launch #
La nouvelle version reçoit une copie du trafic réel (mirroring) sans que ses réponses soient renvoyées aux utilisateurs : on mesure performance et erreurs sans risque.
3. Vérifier et revenir en arrière #
Un déploiement n'est fini que lorsqu'il est vérifié.
Vérifications automatiques #
- Smoke tests juste après le déploiement : la page d'accueil répond, la connexion fonctionne, l'API de santé est verte.
- Analyse des métriques pendant la montée en charge : taux d'erreur, latence p95, saturation, comparés à la version précédente.
- Décision automatique : poursuivre, mettre en pause ou annuler.
# smoke test minimal dans le pipeline
for i in $(seq 1 10); do
curl -fsS --max-time 3 https://staging.example.com/health && exit 0
sleep 6
done
echo "smoke test en échec" >&2 ; exit 1Rollback ou roll forward #
| Option | Quand |
|---|---|
| Rollback | revenir à la version précédente (même artefact, déjà connu) : premier réflexe en cas d'incident |
| Roll forward | livrer rapidement un correctif : seulement si le pipeline est rapide et la cause comprise |
kubectl rollout undo deployment/api
kubectl rollout history deployment/api
helm rollback shop 41
git revert <sha> && git push # GitOps : l'annulation passe aussi par GitMi seguimiento
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión