Rolling deployment (déploiement progressif)
Un rolling deployment (déploiement progressif) remplace les instances d’une application par vagues : les nouvelles versions démarrent pendant que les anciennes continuent de servir, et le trafic bascule au fur et à mesure. À aucun moment le service n’est entièrement arrêté — par opposition au déploiement « big bang » où l’on coupe, on remplace, on redémarre.
La mécanique sur Kubernetes
C’est la stratégie par défaut d’un Deployment Kubernetes. Deux paramètres la
pilotent : maxSurge (combien de pods supplémentaires peuvent exister
pendant la transition) et maxUnavailable (combien de pods peuvent manquer).
Avec les valeurs par défaut (25 % chacun), un déploiement de quatre replicas
avance pod par pod : un nouveau démarre, il est déclaré prêt, un ancien
s’arrête, et ainsi de suite. Si la nouvelle version ne devient jamais prête,
le déploiement se fige au lieu de propager la panne — les anciens pods
restent en place.
Le zéro interruption ne vient pas gratuitement
L’orchestrateur ne fait que la moitié du travail. Pour qu’aucune requête ne
soit perdue, l’application doit coopérer sur plusieurs points documentés mais
souvent négligés. La readiness probe doit refléter la capacité réelle à
servir, pas seulement « le process a démarré » : c’est elle qui décide quand
le trafic arrive. À l’arrêt, le pod reçoit un SIGTERM et dispose d’un délai
de grâce (30 secondes par défaut) pour finir les requêtes en cours ; une
application qui ignore SIGTERM est tuée en plein traitement. Enfin, le
retrait du pod de la liste des endpoints et l’arrêt du process sont deux
opérations asynchrones : sans une courte attente avant l’arrêt effectif
(le classique preStop avec un sleep de quelques secondes), des requêtes
peuvent encore arriver sur un pod qui s’éteint.
La contrainte structurante : N et N+1 coexistent
Pendant toute la transition, deux versions tournent en même temps et se partagent le trafic — et souvent la même base de données. C’est la vraie contrainte du rolling deployment : chaque changement de schéma doit être compatible avec les deux versions (on ajoute une colonne avant de l’utiliser, on ne la supprime qu’une version plus tard). L’erreur classique consiste à tester la version N+1 isolément et à découvrir en production que N ne survit pas à la migration déjà appliquée. Un rolling deployment sans cette discipline de compatibilité est une interruption de service en plusieurs actes.