Changer le plat du jour sans reconstruire
Une ConfigMap Kubernetes est un objet qui garde des réglages à part du programme. On change le réglage sans reconstruire l’image du conteneur.
La cafétéria d’un lycée affiche un plat du jour et un prix. Le programme est toujours le même, mais le plat change chaque matin. Le plat et le prix vont donc dans une ConfigMap.
À la fin de cette leçon
Remarque
Je peux donner un réglage à un pod avec une ConfigMap, et dire quand le pod voit un changement.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| ConfigMap | un objet qui garde des réglages à part du programme | |
| Clé | le nom d’un réglage | PLAT |
| Variable d’environnement | un réglage que le programme lit à son démarrage | PLAT=couscous |
| Image | le modèle figé à partir duquel un conteneur démarre | |
| Rollout | le remplacement des anciens pods par de nouveaux |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une ConfigMap est un dictionnaire de réglages
Une ConfigMap contient des couples clé et valeur. Ici : PLAT vaut couscous et PRIX vaut 4. Elle vit dans un espace de noms, comme un pod.
Le premier Run crée l’espace, le deuxième crée la ConfigMap, le troisième la relit sous forme de dictionnaire.
Créer l’espace cafeteria
kubectl create namespace cafeteriaAffiché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 la ConfigMap carte
kubectl create configmap carte -n cafeteria --from-literal=PLAT=couscous --from-literal=PRIX=4Affiché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.
Relire les réglages de la ConfigMap
kubectl get configmap carte -n cafeteria -o jsonpath='{.data}'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 lit la ConfigMap comme des variables
La ConfigMap seule ne fait rien : un pod doit la lire. On la donne au pod sous forme de variables d’environnement, une par clé.
Les cinq Runs suivants créent un Deployment menu et attendent son pod. Ils vérifient que PLAT n’existe pas encore : printenv sort en échec, avec exit code 1. Ils branchent ensuite la ConfigMap, puis listent les variables que le Deployment reçoit.
Lancer le pod menu sans réglage
kubectl create deployment menu --image=busybox:1.37.0 -n cafeteria -- sh -c 'trap "exit 0" TERM; sleep 3600 & wait'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.
Attendre le pod menu
kubectl rollout status deployment/menu -n cafeteria --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.
Chercher PLAT avant le lien
kubectl exec deployment/menu -n cafeteria -- printenv PLATAffiché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.
Brancher la ConfigMap sur le Deployment
kubectl set env deployment/menu -n cafeteria --from=configmap/carteAffiché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.
Lister les variables branchées
kubectl set env deployment/menu -n cafeteria --listAffiché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.
Brancher la ConfigMap remplace les pods
Le Run set env change le modèle de pod du Deployment. Kubernetes lance donc de nouveaux pods et supprime les anciens : c’est un rollout. La liste affiche trois lignes : le Deployment, puis PLAT from configmap carte, key PLAT et la même ligne pour PRIX.
Les nouveaux pods ont la variable. Relisez PLAT après le rollout : couscous.
Attendre le remplacement
kubectl rollout status deployment/menu -n cafeteria --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.
Chercher PLAT après le lien
kubectl exec deployment/menu -n cafeteria -- printenv PLATAffiché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 ne voit pas le changement
Changez maintenant la ConfigMap : PLAT devient tajine. Un pod déjà démarré a lu ses variables une seule fois, à son démarrage. Il garde donc couscous.
Pour voir tajine, il faut remplacer le pod. kubectl rollout restart le fait sans rien changer d’autre.
Changer le plat dans la ConfigMap
kubectl patch configmap carte -n cafeteria -p '{"data":{"PLAT":"tajine"}}'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.
Relire PLAT dans le pod en marche
kubectl exec deployment/menu -n cafeteria -- printenv PLATAffiché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.
Remplacer les pods
kubectl rollout restart deployment/menu -n cafeteriaAffiché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 nouveaux pods
kubectl rollout status deployment/menu -n cafeteria --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.
Relire PLAT dans le nouveau pod
kubectl exec deployment/menu -n cafeteria -- printenv PLATAffiché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é : qui voit quoi
| Étape | PLAT dans la ConfigMap | PLAT lu par le pod |
|---|---|---|
| Après le lien et le rollout | couscous | couscous |
| Après le `patch` de la ConfigMap | tajine | couscous |
| Après `rollout restart` | tajine | tajine |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Erreur fréquente
Attention
Beaucoup pensent qu’on change la ConfigMap, et que les pods le savent aussitôt. Un pod lit ses variables une fois, à son démarrage. Après un changement de ConfigMap, remplacez les pods, par exemple avec kubectl rollout restart.
Supprimer l’espace cafeteria
kubectl delete namespace cafeteriaAffiché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.