
Un Deployment Kubernetes gère le déploiement et les mises à jour de vos applications. Il crée automatiquement les Pods, assure leur disponibilité et permet de mettre à jour ou revenir en arrière sans interruption de service. Ce guide vous montre comment créer des Deployments, maîtriser les rolling updates et configurer les paramètres essentiels en production.
Prérequis : un cluster Kubernetes fonctionnel avec kubectl configuré.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un Deployment avec kubectl et YAML
- Mettre à jour une application sans interruption (rolling update)
- Revenir en arrière en cas de problème (rollback)
- Configurer les paramètres de production (maxSurge, progressDeadlineSeconds…)
- Choisir entre RollingUpdate et Recreate
Ce qu’est un Deployment
Section intitulée « Ce qu’est un Deployment »Un Deployment est une ressource Kubernetes qui gère un ensemble de Pods identiques. Il garantit que le nombre de Pods voulus est toujours en cours d’exécution et orchestre les mises à jour de version.
Pour un débutant, retenez :
- Le Deployment crée et surveille vos Pods automatiquement
- Si un Pod tombe, le Deployment en recrée un
- Pour une mise à jour, le Deployment remplace progressivement les anciens Pods
Pourquoi utiliser des Deployments
Section intitulée « Pourquoi utiliser des Deployments »Créer des Pods manuellement pose plusieurs problèmes :
- Pas de redémarrage automatique si un Pod crash
- Mises à jour manuelles, risquées et longues
- Pas de rollback facile en cas de problème
Les Deployments résolvent ces problèmes :
| Fonctionnalité | Description |
|---|---|
| Auto-healing | Maintient l’état souhaité via un ReplicaSet, qui recrée les Pods manquants |
| Rolling Update | Mise à jour sans interruption |
| Rollback | Retour à une version précédente en une commande |
| Scaling | Ajustement du nombre de Pods à la demande |
Créer son premier Deployment
Section intitulée « Créer son premier Deployment »Méthode impérative : kubectl create
Section intitulée « Méthode impérative : kubectl create »La façon la plus rapide de créer un Deployment :
kubectl create deployment nginx-demo --image=nginx:1.24 --replicas=3Vérifiez sa création :
kubectl get deployment nginx-demoNAME READY UP-TO-DATE AVAILABLE AGEnginx-demo 3/3 3 3 10sMéthode déclarative : fichier YAML
Section intitulée « Méthode déclarative : fichier YAML »Pour un contrôle total, créez un fichier manifest :
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-demospec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.24 ports: - containerPort: 80Appliquez-le :
kubectl apply -f nginx-deployment.yamlObserver et inspecter un Deployment
Section intitulée « Observer et inspecter un Deployment »kubectl get deployment : vue d’ensemble
Section intitulée « kubectl get deployment : vue d’ensemble »kubectl get deployment -o wideNAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTORnginx-demo 3/3 3 3 2m nginx nginx:1.24 app=nginx| Colonne | Signification |
|---|---|
| READY | Pods prêts / Pods souhaités |
| UP-TO-DATE | Pods avec la dernière version du template |
| AVAILABLE | Pods accessibles aux utilisateurs |
kubectl describe : détails complets
Section intitulée « kubectl describe : détails complets »kubectl describe deployment nginx-demoName: nginx-demoReplicas: 3 desired | 3 updated | 3 total | 3 availableStrategyType: RollingUpdateRollingUpdateStrategy: 25% max unavailable, 25% max surgeNewReplicaSet: nginx-demo-64dd99d679 (3/3 replicas created)Les informations clés :
- StrategyType : RollingUpdate ou Recreate
- RollingUpdateStrategy : paramètres de mise à jour progressive
- NewReplicaSet : le ReplicaSet actif qui gère les Pods
Voir les Pods créés
Section intitulée « Voir les Pods créés »kubectl get pods -l app=nginxNAME READY STATUS RESTARTS AGEnginx-demo-64dd99d679-8tnt5 1/1 Running 0 2mnginx-demo-64dd99d679-lrcnc 1/1 Running 0 2mnginx-demo-64dd99d679-psz2g 1/1 Running 0 2mLe nom du Pod suit le format <deployment>-<replicaset-hash>-<pod-hash>.
Anatomie d’un Deployment
Section intitulée « Anatomie d’un Deployment »apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-demospec: replicas: 3 # Nombre de Pods souhaités revisionHistoryLimit: 5 # Nombre d'anciennes versions conservées progressDeadlineSeconds: 300 # Timeout pour une mise à jour minReadySeconds: 10 # Temps avant de considérer un Pod disponible strategy: type: RollingUpdate # ou Recreate rollingUpdate: maxUnavailable: 1 # Pods indisponibles max pendant update maxSurge: 1 # Pods supplémentaires max pendant update selector: matchLabels: app: nginx # Doit correspondre aux labels du template template: # Template des Pods créés metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.24Les 5 champs de production à connaître
Section intitulée « Les 5 champs de production à connaître »| Champ | Par défaut | Description |
|---|---|---|
replicas | 1 | Nombre de Pods souhaités |
revisionHistoryLimit | 10 | Nombre de ReplicaSets conservés pour rollback |
progressDeadlineSeconds | 600 | Secondes avant timeout d’une mise à jour |
minReadySeconds | 0 | Temps minimal pendant lequel un Pod doit rester prêt avant d’être considéré disponible |
maxUnavailable | 25% | Pods indisponibles max pendant rolling update |
maxSurge | 25% | Pods supplémentaires max pendant rolling update |
Déploiement sûr : ne négligez pas les probes
Section intitulée « Déploiement sûr : ne négligez pas les probes »Un rolling update n’est réellement fiable que si Kubernetes sait quand un Pod est prêt à recevoir du trafic. En pratique, cela repose sur une readinessProbe correctement configurée. Sans elle, Kubernetes peut envoyer du trafic vers des Pods encore en phase d’initialisation.
Combinez avec minReadySeconds pour ajouter un délai de stabilité avant de considérer le Pod comme disponible.
Pour aller plus loin, consultez le guide sur les Probes Kubernetes.
Mettre à jour un Deployment (Rolling Update)
Section intitulée « Mettre à jour un Deployment (Rolling Update) »Un Deployment ne met à jour les Pods que si le template change (image, variables, resources…). Un scaling ne déclenche pas de rolling update.
Changer l’image
Section intitulée « Changer l’image »kubectl set image deployment/nginx-demo nginx=nginx:1.25Suivre la mise à jour
Section intitulée « Suivre la mise à jour »kubectl rollout status deployment/nginx-demoWaiting for deployment "nginx-demo" rollout to finish: 2 out of 3 new replicas have been updated...Waiting for deployment "nginx-demo" rollout to finish: 1 old replicas are pending termination...deployment "nginx-demo" successfully rolled outComment fonctionne le Rolling Update
Section intitulée « Comment fonctionne le Rolling Update »Kubernetes crée un nouveau ReplicaSet et ajuste progressivement les replicas :
L’ancien ReplicaSet est conservé (avec 0 replicas) pour permettre un rollback.
En pratique, ce remplacement progressif fonctionne bien avec un Service Kubernetes, qui continue à diriger le trafic uniquement vers les Pods prêts pendant la mise à jour.
Rollback : revenir en arrière
Section intitulée « Rollback : revenir en arrière »Voir l’historique des versions
Section intitulée « Voir l’historique des versions »kubectl rollout history deployment/nginx-demoREVISION CHANGE-CAUSE1 <none>2 <none>3 <none>Pour voir les détails d’une révision :
kubectl rollout history deployment/nginx-demo --revision=2Revenir à la version précédente
Section intitulée « Revenir à la version précédente »kubectl rollout undo deployment/nginx-demoRevenir à une version spécifique
Section intitulée « Revenir à une version spécifique »kubectl rollout undo deployment/nginx-demo --to-revision=1Pause et Resume
Section intitulée « Pause et Resume »Pour appliquer plusieurs modifications sans déclencher de rollout intermédiaire :
# Mettre en pausekubectl rollout pause deployment/nginx-demo
# Appliquer plusieurs changementskubectl set image deployment/nginx-demo nginx=nginx:1.26kubectl set resources deployment/nginx-demo -c=nginx --limits=cpu=200m,memory=256Mi
# Reprendre (un seul rollout pour tous les changements)kubectl rollout resume deployment/nginx-demoScaling : ajuster le nombre de Pods
Section intitulée « Scaling : ajuster le nombre de Pods »kubectl scale deployment/nginx-demo --replicas=5Le scaling est instantané et ne crée pas de nouvelle révision.
Pour un scaling automatique basé sur la charge :
kubectl autoscale deployment/nginx-demo --min=3 --max=10 --cpu-percent=80Cela crée un HorizontalPodAutoscaler.
Stratégies de déploiement
Section intitulée « Stratégies de déploiement »RollingUpdate (par défaut)
Section intitulée « RollingUpdate (par défaut) »Remplace progressivement les Pods sans interruption.
spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 # ou "25%" maxSurge: 1 # ou "25%"| Paramètre | Effet |
|---|---|
maxUnavailable: 0 | Toujours au moins N replicas disponibles (plus lent) |
maxSurge: 0 | Jamais plus de N replicas (économise les ressources) |
| Les deux à 0 | Interdit — un des deux doit être > 0 |
Cas d’usage : la majorité des applications web, APIs, microservices.
Recreate
Section intitulée « Recreate »Supprime tous les anciens Pods avant de créer les nouveaux. Provoque une interruption.
spec: strategy: type: RecreateCas d’usage :
- Application qui ne peut pas coexister en plusieurs versions (schéma de BDD incompatible)
- Environnements de dev/test où l’interruption n’est pas critique
Blue-Green et Canary
Section intitulée « Blue-Green et Canary »Blue-Green : deux Deployments (blue et green), on bascule le Service.
Canary : nouveau Deployment avec peu de replicas, on ajuste progressivement le trafic.
Ces patterns sont décrits en détail dans le guide Stratégies de déploiement avancées.
Deployment ou StatefulSet ?
Section intitulée « Deployment ou StatefulSet ? »| Critère | Deployment | StatefulSet |
|---|---|---|
| Application | Stateless | Stateful |
| Identité des Pods | Aléatoire | Stable et ordonnée |
| Stockage | Éphémère (ou PVC partagé) | PVC persistant par Pod |
| Exemples | API, frontend, workers | Bases de données, Kafka, Elasticsearch |
Règle simple : si votre application stocke des données locales ou a besoin d’identités réseau stables, utilisez un StatefulSet.
Debug : diagnostiquer un Deployment
Section intitulée « Debug : diagnostiquer un Deployment »Le rollout est bloqué
Section intitulée « Le rollout est bloqué »Symptôme : kubectl rollout status reste en attente.
# Vérifier les conditionskubectl describe deployment nginx-demo | grep -A5 Conditions
# Voir les événementskubectl get events --sort-by=.lastTimestampCauses fréquentes :
- Image introuvable (
ImagePullBackOff) - Ressources insuffisantes (
Pending) - Readiness probe qui échoue
Les Pods ne démarrent pas
Section intitulée « Les Pods ne démarrent pas »kubectl get pods -l app=nginxkubectl describe pod <nom-du-pod>kubectl logs <nom-du-pod>Timeout de mise à jour
Section intitulée « Timeout de mise à jour »Si progressDeadlineSeconds est dépassé, le Deployment passe en condition Progressing: False avec raison ProgressDeadlineExceeded.
kubectl describe deployment nginx-demo | grep ProgressDeadlineExceededLe déploiement n’est pas automatiquement rollback. Vous devez le faire manuellement :
kubectl rollout undo deployment/nginx-demoTestez vos connaissances
Section intitulée « Testez vos connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- Un Deployment gère des Pods stateless avec auto-healing et rolling updates
- RollingUpdate (défaut) remplace progressivement les Pods sans interruption
- Recreate supprime tout avant de recréer (interruption de service)
maxUnavailableetmaxSurgecontrôlent la vitesse du rolling update- Rollback :
kubectl rollout undopour revenir en arrière - Pause/Resume : appliquer plusieurs changements en un seul rollout
- L’ancien ReplicaSet est conservé —
revisionHistoryLimitcontrôle combien - Pour du stateful, utilisez StatefulSet, pas Deployment