Configurer des applications avec des ConfigMaps

KubernetesBeginner
Pratiquer maintenant

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.