Kubernetes deployments
| Fiche express | |
|---|---|
| Type | Contrôleur de haut niveau pour Pods stateless |
| Gère via | ReplicaSet (créé et piloté automatiquement) |
| Fonctions | Scale · rolling update · rollback |
| Voir aussi | Kubectl · Kubernetes services · Kubernetes staticPods |
Un Deployment est un objet Kubernetes qui décrit un état voulu pour un ensemble de Pods identiques : nombre de réplicas, sélecteur de labels et modèle (template) de Pod. Il ne gère pas les Pods directement mais crée et pilote un ReplicaSet sous-jacent, ce qui lui permet d'orchestrer proprement des changements de version applicative (rolling update) et des retours en arrière (rollback) sans intervention manuelle sur les Pods.
kubectl create -f my-deployment.yml
kubectl get deployments
kubectl get pods
Scale horizontal
Le nombre de réplicas peut être modifié soit en éditant le manifeste et en le réappliquant, soit directement en impératif :
kubectl apply -f my-deployment.yml
kubectl edit deployment my-deployment
kubectl scale deployment.v1.apps/my-deployment --replicas=3
kubectl get deployments
kubectl get pods
Rolling update et rollback
Par défaut, un Deployment applique une stratégie de mise à jour progressive (RollingUpdate) : les nouveaux Pods (nouvelle version) sont créés graduellement pendant que les anciens sont retirés, sans interruption de service si le nombre de réplicas et les readiness probes le permettent. Chaque changement de template de Pod (ex. changement d'image) crée une nouvelle révision, suivie dans l'historique du rollout.
# éditer le Deployment pour changer la version d'image, par exemple
kubectl edit deployment my-deployment
# suivre l'avancement du rollout
kubectl rollout status deployment.v1.apps/my-deployment
kubectl get deployment my-deployment
kubectl get pods
# autre méthode : changer l'image directement en impératif
kubectl set image deployment/my-deployment nginx=nginx:1.19.2
# consulter l'historique des révisions
kubectl rollout history deployment.v1.apps/my-deployment
# revenir à la révision précédente, ou à une révision précise
kubectl rollout undo deployment.v1.apps/my-deployment
kubectl rollout undo deployment.v1.apps/my-deployment --to-revision=<numéro_de_revision>
Si un rollout échoue (par exemple une image introuvable), kubectl rollout status reste bloqué en attente et kubectl get pods montre les nouveaux Pods en erreur (ImagePullBackOff ou similaire) : c'est le signal pour déclencher un rollout undo.