TL;DR
Quand le template d’un Deployment change, Kubernetes declenche un rollout. La strategie par defaut RollingUpdate remplace progressivement les pods. On peut suivre l’etat, annuler une version avec undo, mettre en pause et reprendre un rollout.
La video de reference
Video: https://www.youtube.com/watch?v=WSfB7Ae4SPg
Elle approfondit le Deployment en montrant ce qui se passe lors d’une mise a jour.
Declencher un rollout
Un rollout est declenche quand le template du pod change: image, variables d’environnement, labels du template, probes, volumes, arguments.
kubectl set image deployment/web nginx=nginx:1.26
kubectl rollout status deployment/web
kubectl rollout history deployment/web
Le Deployment cree un nouveau ReplicaSet et diminue progressivement l’ancien.
Strategie RollingUpdate
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
maxUnavailable limite le nombre de pods indisponibles. maxSurge autorise des pods supplementaires pendant la transition.
Strategie Recreate
strategy:
type: Recreate
Avec Recreate, Kubernetes arrete les anciens pods avant de creer les nouveaux. C’est plus brutal, mais utile pour certaines applications qui ne supportent pas deux versions en parallele.
Rollback
kubectl rollout history deployment/web
kubectl rollout undo deployment/web
kubectl rollout undo deployment/web --to-revision=2
Le rollback revient a un template precedent. Il ne remplace pas une vraie strategie de release, mais il est tres utile en lab et en exploitation.
Pause et reprise
kubectl rollout pause deployment/web
kubectl set image deployment/web nginx=nginx:1.27
kubectl rollout resume deployment/web
La pause permet de preparer plusieurs changements avant de declencher la mise a jour.
Lire les objets
kubectl get deploy web
kubectl get rs -l app=web
kubectl describe deploy web
kubectl get events --sort-by=.lastTimestamp
Ces commandes montrent la progression, les ReplicaSets et les evenements associes.
Liens utiles
- Video: https://www.youtube.com/watch?v=WSfB7Ae4SPg
- Updating a Deployment: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a-deployment
- Rollback: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-back-a-deployment
- kubectl rollout: https://kubernetes.io/docs/reference/kubectl/generated/kubectl_rollout/
FAQ
Changer replicas declenche-t-il un rollout ?
Non. Cela scale le Deployment, mais ne cree pas une nouvelle revision du template.
RollingUpdate garantit-il zero interruption ?
Pas seul. Il faut aussi des readiness probes et une application capable de recevoir le trafic correctement.
Undo restaure-t-il les donnees ?
Non. Il restaure le template du Deployment, pas l’etat applicatif ni la base de donnees.
Erreurs frequentes
- Faire un rollout sans readiness probe.
- Croire qu’un rollback corrige une migration de donnees.
- Utiliser
Recreatesans accepter une coupure. - Ne pas regarder les ReplicaSets crees.
Pour pratiquer
kubectl create deployment web --image=nginx:1.25
kubectl scale deployment web --replicas=3
kubectl set image deployment/web nginx=nginx:1.26
kubectl rollout status deployment/web
kubectl rollout history deployment/web
kubectl rollout undo deployment/web
Observez les ReplicaSets avant et apres le rollback.
Notions et definitions
- Pod: plus petite unite deployable dans Kubernetes.
- Controleur: objet qui maintient un etat attendu, comme Deployment, ReplicaSet, DaemonSet ou StatefulSet.
- Reconciliation: boucle permanente qui compare l’etat reel et l’etat desire.
Ces definitions donnent le vocabulaire minimal pour suivre l’article sans reduire Kubernetes a une simple commande. Chaque notion doit etre reliee a un objet visible avec kubectl ou a un composant du cluster.
Exemple concret
Un Deployment a trois replicas recree automatiquement un pod supprime afin de revenir a l’etat attendu declare dans sa specification.
Cet exemple sert de fil conducteur: il montre quel probleme operationnel Kubernetes cherche a resoudre et quelle ressource permet de le formaliser.
How-to rapide
- Declarer le workload avec un manifest YAML ou une commande kubectl.
- Observer les pods crees et leurs labels.
- Lire les events pour comprendre scheduling, pulls d’images et redemarrages.
- Modifier le controleur plutot que les pods generes directement.
Le how-to est volontairement court: l’idee est d’obtenir un resultat observable, puis d’utiliser les commandes de verification pour comprendre ce qui s’est passe.
Approfondir cet article
Cet episode doit surtout permettre de maitriser le passage d’un conteneur isole a un workload controle par Kubernetes. L’objectif n’est pas seulement de refaire les commandes, mais de comprendre quel objet Kubernetes est cree, quel composant le prend en charge et comment verifier le resultat.
Questions a se poser
- Quel est l’etat desire exprime dans Kubernetes ?
- Quel composant observe cet etat et tente de le reconciler ?
- Quels symptomes montrent que l’objet est cree mais pas encore operationnel ?
- Quelle commande donne l’information la plus fiable pour diagnostiquer ?
Commandes de verification
kubectl get pods -o wide --show-labelskubectl describe pod <pod>pour lire scheduling, events et conditionskubectl rollout history deployment/<name>quand un Deployment est concerne
Ces commandes ne sont pas a apprendre par coeur. Elles servent a construire un reflexe: partir de l’objet Kubernetes, lire son etat, puis descendre vers les pods, les events, les logs ou le noeud uniquement si c’est necessaire.
Points de vigilance
- modifier un pod gere par un controleur au lieu de modifier le controleur lui-meme
- ignorer les events alors qu’ils expliquent souvent le probleme
- oublier que les labels sont le lien entre controleurs, pods et Services
Exercice conseille
Lancez un Deployment nginx a trois replicas, supprimez un pod manuellement, puis observez comment le controleur reconcilie l’etat attendu.
Pour valider la comprehension, gardez une trace courte: manifest utilise, commandes lancees, resultat attendu, resultat observe et correction appliquee. Cette methode rend les episodes suivants beaucoup plus faciles a enchainer.
Lien interne conseille
Pour poursuivre la progression, consultez aussi Kubernetes 018 – What is a Service ? Objectifs, ClusterIP et expose.
Conclusion
Les rollouts donnent au Deployment sa vraie valeur: mettre a jour progressivement, observer, revenir en arriere et maitriser le rythme de changement.