Introduction
Une ConfigMap permet de stocker des configurations non sensibles séparément de l'image du conteneur. Cela vous permet de réutiliser la même image d'application avec des paramètres différents, tels que le mode de développement, le niveau de journalisation (logging), les indicateurs de fonctionnalités (feature flags) ou les noms de points de terminaison (endpoints).
Dans ce laboratoire, vous allez créer une ConfigMap, inspecter ses données, l'utiliser pour configurer un Pod, mettre à jour la ConfigMap, puis recréer le Pod pour appliquer les nouvelles valeurs. Les laboratoires suivants approfondiront la configuration spécifique des variables d'environnement et le montage de fichiers de configuration ; ce laboratoire se concentre sur l'objet ConfigMap et le flux de travail fondamental de configuration d'application.
Préparer un Namespace pour les ConfigMaps
Dans cette étape, vous allez préparer un namespace propre pour pratiquer les ConfigMaps.
Commencez dans /home/labex/project. Vous rédigerez un manifeste de Pod dans ce répertoire.
mkdir -p /home/labex/project
cd /home/labex/project
Vérifiez que le serveur API Kubernetes est accessible. Si la machine virtuelle vient de démarrer et que le nœud n'est pas encore prêt, attendez quelques secondes et relancez la commande.
kubectl get nodes --request-timeout=5s
La sortie attendue inclut :
NAME STATUS ROLES AGE VERSION
labex-v135 Ready control-plane ... v1.35...
Attendez que le Pod réseau du cluster soit prêt (Ready) avant de créer des objets d'application.
kubectl wait --namespace kube-system --for=condition=Ready pod -l k8s-app=calico-node --timeout=120s
Sortie attendue :
pod/calico-node-... condition met
Créez un namespace nommé ckad-prep-configmaps :
kubectl create namespace ckad-prep-configmaps
Définissez ce namespace comme namespace par défaut pour le contexte actuel :
kubectl config set-context --current --namespace=ckad-prep-configmaps
Confirmez le namespace actuel :
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
Sortie attendue :
ckad-prep-configmaps
Créer et inspecter une ConfigMap
Dans cette étape, vous allez créer une ConfigMap contenant des paramètres d'application simples.
La commande kubectl create configmap permet de créer une ConfigMap directement à partir de paires clé-valeur littérales. Chaque drapeau --from-literal ajoute une entrée sous le champ data de la ConfigMap.
kubectl create configmap app-settings \
--from-literal=APP_MODE=dev \
--from-literal=LOG_LEVEL=debug \
--from-literal=FEATURE_BANNER=enabled
Sortie attendue :
configmap/app-settings created
Inspectez le résumé de la ConfigMap :
kubectl get configmap app-settings
Sortie attendue :
NAME DATA AGE
app-settings 3 ...
Lisez les valeurs stockées. jsonpath affiche les champs sélectionnés sans montrer l'objet complet.
kubectl get configmap app-settings -o 'jsonpath={.data.APP_MODE}{" "}{.data.LOG_LEVEL}{" "}{.data.FEATURE_BANNER}{"\n"}'
Sortie attendue :
dev debug enabled
Vous pouvez également afficher la ConfigMap au format YAML pour voir où se trouvent les clés dans l'objet.
kubectl get configmap app-settings -o yaml
La sortie attendue inclut :
data:
APP_MODE: dev
FEATURE_BANNER: enabled
LOG_LEVEL: debug
Configurer un Pod à partir de la ConfigMap
Dans cette étape, vous allez démarrer un Pod qui lit les valeurs de la ConfigMap en tant que variables d'environnement.
Le champ envFrom.configMapRef importe toutes les clés d'une ConfigMap dans l'environnement du conteneur. C'est un moyen compact de connecter un petit ensemble de paramètres non sensibles à une application.
Créez config-reader-pod.yaml :
cat > config-reader-pod.yaml <<'EOF'
apiVersion: v1
kind: Pod
metadata:
name: config-reader
labels:
app: config-reader
spec:
terminationGracePeriodSeconds: 0
containers:
- name: reader
image: busybox:1.36
command:
- /bin/sh
- -c
- 'echo mode=${APP_MODE}; echo level=${LOG_LEVEL}; echo banner=${FEATURE_BANNER}; sleep 3600'
envFrom:
- configMapRef:
name: app-settings
EOF
Appliquez le manifeste du Pod :
kubectl apply -f config-reader-pod.yaml
Sortie attendue :
pod/config-reader created
Attendez que le Pod soit prêt (Ready) :
kubectl wait --for=condition=Ready pod/config-reader --timeout=120s
Sortie attendue :
pod/config-reader condition met
Lisez les journaux (logs) du Pod. L'application affiche les valeurs provenant de la ConfigMap.
kubectl logs config-reader -c reader
Sortie attendue :
mode=dev
level=debug
banner=enabled
Mettre à jour la ConfigMap et recréer le Pod
Dans cette étape, vous allez mettre à jour la ConfigMap et recréer le Pod afin que le conteneur reçoive les nouvelles valeurs.
Lorsqu'une ConfigMap est utilisée sous forme de variables d'environnement, le conteneur en cours d'exécution ne modifie pas automatiquement son environnement. Un nouveau conteneur doit démarrer pour lire les valeurs mises à jour. Il s'agit d'un détail important pour la certification CKAD, car vous devrez peut-être mettre à jour la configuration, puis redémarrer ou recréer la charge de travail.
Appliquez un patch à la ConfigMap :
kubectl patch configmap app-settings --type merge --patch '{"data":{"APP_MODE":"prod","LOG_LEVEL":"warn","FEATURE_BANNER":"disabled"}}'
Sortie attendue :
configmap/app-settings patched
Confirmez les nouvelles valeurs de la ConfigMap :
kubectl get configmap app-settings -o 'jsonpath={.data.APP_MODE}{" "}{.data.LOG_LEVEL}{" "}{.data.FEATURE_BANNER}{"\n"}'
Sortie attendue :
prod warn disabled
Supprimez l'ancien Pod :
kubectl delete pod config-reader
La sortie attendue inclut :
pod "config-reader" deleted
Recréez le Pod à partir du même manifeste et attendez qu'il soit prêt :
kubectl apply -f config-reader-pod.yaml
kubectl wait --for=condition=Ready pod/config-reader --timeout=120s
Sortie attendue :
pod/config-reader created
pod/config-reader condition met
Lisez à nouveau les journaux. Le nouveau Pod voit désormais les valeurs mises à jour de la ConfigMap.
kubectl logs config-reader -c reader
Sortie attendue :
mode=prod
level=warn
banner=disabled
Résumé
Vous avez créé une ConfigMap, inspecté ses données, l'avez connectée à un Pod d'application, mis à jour la ConfigMap et recréé le Pod pour que le conteneur prenne en compte les nouvelles valeurs. Cela vous donne une maîtrise du flux de travail fondamental des ConfigMaps avant d'aborder des modèles plus détaillés de variables d'environnement et de montage de fichiers dans les laboratoires suivants.


