Trois copies, même si l’une plante
Un Deployment, ou déploiement, est l’objet Kubernetes qui garde en marche le nombre voulu de copies d’un pod. Si une copie disparaît, il en recrée une sans que personne n’intervienne.
Une boulangerie en ligne reçoit ses commandes de 7 h à 9 h. Elle veut trois copies de son programme de caisse : si l’une plante, les deux autres continuent.
À la fin de cette leçon
Remarque
Je peux garder trois copies d’un pod en marche avec un Deployment, et dire ce qui se passe quand l’une disparaît.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Deployment | l’objet qui garde le nombre voulu de pods en marche | |
| Réplica | une copie identique d’un pod | |
| État voulu | ce que vous demandez à Kubernetes | replicas: 3 |
| État réel | ce qui tourne vraiment à cet instant | |
| Étiquette | un couple nom et valeur posé sur un objet | app=baguette |
| Mise à l’échelle | changer le nombre de réplicas |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Vous décrivez l’état voulu, Kubernetes le tient
Avec un Deployment, vous ne dites pas « lance trois pods ». Vous dites : « je veux trois réplicas ». C’est l’état voulu.
Kubernetes compare sans arrêt l’état voulu à l’état réel, ce qui tourne vraiment. S’il manque un pod, il en crée un. S’il y en a trop, il en supprime. Le Deployment retrouve ses pods grâce à une étiquette commune, ici app=baguette.
Créer l’espace boulangerie
kubectl create namespace boulangerieAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer un Deployment de trois pods
kubectl create deployment baguette --image=busybox:1.37.0 --replicas=3 -n boulangerie -- sleep 3600Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Attendre que les trois pods soient prêts
kubectl rollout status deployment/baguette -n boulangerie --timeout=90sAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Que montrent ces trois Runs ?
Le deuxième affiche deployment.apps/baguette created. Le troisième affiche plusieurs lignes « Waiting for deployment… » pendant que les pods démarrent, puis deployment "baguette" successfully rolled out : les trois pods sont prêts.
sleep 3600 donne au pod un programme qui ne finit pas avant une heure. Sans lui, le pod s’arrêterait tout de suite, et le Deployment le relancerait sans fin.
Lire l’état du Deployment
kubectl get deployment baguette -n boulangerie --no-headers | awk '{print $2, $3, $4}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un pod supprimé est remplacé aussitôt
Supprimez un pod du Deployment : l’état réel tombe à deux, l’état voulu reste trois. Kubernetes crée tout de suite un pod pour combler l’écart.
Le Run suivant choisit un seul pod avec head -n 1 et le supprime. Il affiche pod "baguette-…" deleted, avec un nom qui change à chaque fois. Le compte des pods, ensuite, reste trois.
Supprimer un pod du Deployment
kubectl get pods -n boulangerie -o name | head -n 1 | xargs kubectl delete -n boulangerie --grace-period=1Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Compter les pods de l’espace
kubectl get pods -n boulangerie --no-headers | wc -lAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Erreur fréquente
Attention
Beaucoup pensent qu’il suffit de supprimer un pod pour arrêter une application. Le Deployment le recrée, puisqu’il doit en garder trois. Pour arrêter l’application, supprimez le Deployment, ou demandez zéro réplica.
Changer le nombre de réplicas
La mise à l’échelle (en anglais scaling) change l’état voulu. Les deux Runs suivants demandent cinq pods, puis attendent qu’ils soient prêts : le premier affiche deployment.apps/baguette scaled, le second se termine par successfully rolled out.
Le troisième lit l’état voulu puis le nombre de pods prêts : 5 5.
Demander cinq réplicas
kubectl scale deployment baguette --replicas=5 -n boulangerieAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Attendre les cinq pods
kubectl rollout status deployment/baguette -n boulangerie --timeout=90sAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire voulus et prêts
kubectl get deployment baguette -n boulangerie -o jsonpath='{.spec.replicas} {.status.readyReplicas}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple travaillé : le pod isolé
| Événement | Pods du Deployment | Pod isolé | Total |
|---|---|---|---|
| Au départ, cinq réplicas | 5 | 0 | 5 |
| On lance le pod seul avec `kubectl run` | 5 | 1 | 6 |
| On supprime le pod seul | 5 | 0 | 5 |
| On supprime un pod du Deployment | 5 (un nouveau arrive) | 0 | 5 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Lancer un pod isolé
kubectl run seul -n boulangerie --image=busybox:1.37.0 --restart=Never -- sleep 3600Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Compter : cinq plus un
kubectl get pods -n boulangerie --no-headers | wc -lAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Supprimer l’espace boulangerie
kubectl delete namespace boulangerieAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.