Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

ConfigMap Kubernetes : changer un réglage

Après cette leçon: Je peux donner un réglage à un pod avec une ConfigMap, et dire quand le pod voit un changement.

Leçon de 50 min16 commandesLab Kubernetes : un cluster k3s à un nœud pour chaque élève, sur une VM Ubuntu privée

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

MotCe que ça veut direExemple
ConfigMapun objet qui garde des réglages à part du programme
Cléle nom d’un réglagePLAT
Variable d’environnementun réglage que le programme lit à son démarragePLAT=couscous
Imagele modèle figé à partir duquel un conteneur démarre
Rolloutle 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

Commande
kubectl create namespace cafeteria

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.

Créer la ConfigMap carte

Commande
kubectl create configmap carte -n cafeteria --from-literal=PLAT=couscous --from-literal=PRIX=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.

Relire les réglages de la ConfigMap

Commande
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

Commande
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

Commande
kubectl rollout status deployment/menu -n cafeteria --timeout=90s

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.

Chercher PLAT avant le lien

Commande
kubectl exec deployment/menu -n cafeteria -- printenv PLAT

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.

Brancher la ConfigMap sur le Deployment

Commande
kubectl set env deployment/menu -n cafeteria --from=configmap/carte

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.

Lister les variables branchées

Commande
kubectl set env deployment/menu -n cafeteria --list

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.

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

Commande
kubectl rollout status deployment/menu -n cafeteria --timeout=90s

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.

Chercher PLAT après le lien

Commande
kubectl exec deployment/menu -n cafeteria -- printenv PLAT

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 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

Commande
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

Commande
kubectl exec deployment/menu -n cafeteria -- printenv PLAT

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.

Remplacer les pods

Commande
kubectl rollout restart deployment/menu -n cafeteria

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 les nouveaux pods

Commande
kubectl rollout status deployment/menu -n cafeteria --timeout=90s

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 nouveau pod

Commande
kubectl exec deployment/menu -n cafeteria -- printenv PLAT

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é : qui voit quoi

ÉtapePLAT dans la ConfigMapPLAT lu par le pod
Après le lien et le rolloutcouscouscouscous
Après le `patch` de la ConfigMaptajinecouscous
Après `rollout restart`tajinetajine

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

Commande
kubectl delete namespace cafeteria

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.

À propos de ce labo et de sa source: Lab Kubernetes : un cluster k3s à un nœud pour chaque élève, sur une VM Ubuntu privée

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.