DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesKubernetes en production : Deployments, Ingress et Secrets02 - Externaliser la configuration avec ConfigMaps et Secrets

Détails

  • 20 minutes
  • Avancé

Objectifs

  • Créer des ConfigMaps et Secrets depuis la CLI et depuis des fichiers
  • Injecter la configuration via envFrom et env.valueFrom
  • Monter un ConfigMap comme volume de fichiers
  • Comprendre l'encodage base64 des Secrets
Module Kubernetes en production : Deployments, Ingress et Secrets

Exercice 02 : Externaliser la configuration avec ConfigMaps et Secrets

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Créer un ConfigMap et un Secret depuis la CLI
  • ✅ Injecter toute la configuration via envFrom
  • ✅ Injecter une clé spécifique via env.valueFrom
  • ✅ Monter un ConfigMap comme fichier dans un conteneur

Durée estimée : 20 minutes

Difficulté : ⭐⭐⭐☆☆ (Avancé)

Prérequis : minikube démarré, maîtrise des Pods et Deployments


📖 Contexte

Coder les paramètres de configuration dans les images Docker est une mauvaise pratique. Kubernetes fournit deux ressources pour externaliser la configuration : ConfigMap (données non sensibles) et Secret (mots de passe, tokens, certificats). Les valeurs sont injectées dans les pods sans modifier l'image.


📋 Énoncé

Vous allez configurer une application web dont tous les paramètres (port, mode, base de données) sont externalisés dans un ConfigMap et un Secret, montés à la fois comme variables d'environnement et comme fichiers.

Résultat attendu :

  • Un ConfigMap app-config et un Secret app-secret créés
  • Un pod qui consomme la configuration via les deux méthodes

🧭 Déroulement de l'exercice

Tâche 1 : Créer un ConfigMap

Créez un ConfigMap app-config avec les clés APP_PORT=8080, APP_MODE=production et APP_LOG_LEVEL=info.

Indice : kubectl create configmap app-config --from-literal=APP_PORT=8080 ...

Vérification : kubectl describe configmap app-config affiche les 3 clés.


Tâche 2 : Créer un Secret

Créez un Secret app-secret avec DB_PASSWORD=MonMotDePasse123 et API_KEY=abc123secret.

Indice : kubectl create secret generic app-secret --from-literal=DB_PASSWORD=...

Les valeurs sont automatiquement encodées en base64 par Kubernetes.

Vérification : kubectl get secret app-secret -o yaml affiche les valeurs en base64. Décodez avec echo "..." | base64 -d.


Tâche 3 : Injecter via envFrom

Créez un pod qui charge TOUTES les clés du ConfigMap comme variables d'environnement via envFrom.

Indice : spec.containers[].envFrom prend une liste de configMapRef ou secretRef.

Vérification : kubectl exec <pod> -- env | grep APP_ affiche les 3 variables.


Tâche 4 : Injecter via env.valueFrom

Créez un pod qui ne charge qu'une seule clé du Secret (DB_PASSWORD) via env.valueFrom.secretKeyRef.

Indice : env[].valueFrom.secretKeyRef permet de cibler une clé précise.

Vérification : kubectl exec <pod> -- env | grep DB_PASSWORD affiche la valeur décodée.


Tâche 5 : Monter un ConfigMap comme volume

Montez le ConfigMap app-config comme volume dans /etc/app-config/. Chaque clé devient un fichier.

Indice : volumes[].configMap.name + volumeMounts[].mountPath

Vérification : kubectl exec <pod> -- ls /etc/app-config/ liste APP_PORT, APP_MODE, APP_LOG_LEVEL.


🗂️ Mini-Projet : Application complètement configurée en externe

yaml
# configured-app.yaml
apiVersion: v1
kind: Pod
metadata:
  name: configured-app
spec:
  containers:
    - name: app
      image: busybox:1.36
      command: ["sh", "-c", "env && ls /etc/config/ && sleep 3600"]
      envFrom:
        - configMapRef:
            name: app-config
        - secretRef:
            name: app-secret
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: app-config

Checkpoints :

  • kubectl exec configured-app -- env | grep APP_PORT affiche APP_PORT=8080
  • kubectl exec configured-app -- env | grep DB_PASSWORD affiche le mot de passe décodé
  • kubectl exec configured-app -- ls /etc/config/ liste les 3 fichiers de config
  • kubectl exec configured-app -- cat /etc/config/APP_MODE affiche production
  • kubectl get secret app-secret -o jsonpath='{.data.DB_PASSWORD}' | base64 -d affiche le mot de passe

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer un ConfigMap
  • Tâche 2 : Créer un Secret
  • Tâche 3 : Injecter via envFrom
  • Tâche 4 : Injecter via env.valueFrom
  • Tâche 5 : Monter un ConfigMap comme volume
  • 🗂️ Mini-Projet : Application complètement configurée en externe