ConfigMaps - Le jumeau non-secret des Secrets#
Dans cette section, vous allez manipuler les ConfigMaps. Ils sont conceptuellement très similaires aux Secrets, mais avec une différence fondamentale : ils sont destinés à stocker des données de configuration non sensibles en clair (et donc versionnables).
ConfigMap vs. Secret
ConfigMap : Pour les données de configuration non confidentielles. Les données sont stockées en texte brut et sont facilement lisibles. Idéal pour les fichiers de configuration, les arguments de ligne de commande, etc.
Secret : Pour les données sensibles comme les mots de passe, les tokens d’API ou les clés SSH. Les données sont encodées en Base64 (ce qui n’est pas un chiffrement).
ConfigMap - manipulation#
Création d’un ConfigMap via un manifest YAML#
Créez un fichier my-configmap.yaml avec le contenu suivant :
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app-config
data:
# Clé-valeur simple
app.environment: "production"
# Contenu de type fichier
app.config.properties: |
feature.x.enabled=true
feature.y.enabled=false
log.level=info
Appliquez ensuite ce manifest pour créer le ConfigMap :
kubecl apply -f my-configmap.yaml
Exercice : Vérification et utilisation#
Affichez le contenu du
ConfigMapau format YAML et observez que les données sont en clair.kubectl get configmap my-app-config -o yaml
Utilisez le
ConfigMappour injecter des variables d’environnement dans un Pod. Créez un fichierpod-with-configmap-env.yaml:apiVersion: v1 kind: Pod metadata: name: pod-with-configmap-env spec: containers: - name: my-container image: ubuntu:22.04 command: [ "/bin/sh", "-c", "env && sleep 3600" ] envFrom: - configMapRef: name: my-app-config restartPolicy: Never
Appliquez le manifest et vérifiez les logs du Pod pour voir les clés du
ConfigMapen tant que variables d’environnement.kubectl apply -f pod-with-configmap-env.yaml kubectl logs pod-with-configmap-env
Montez le
ConfigMapen tant que volume. Créezpod-with-configmap-volume.yaml:apiVersion: v1 kind: Pod metadata: name: pod-with-configmap-volume spec: containers: - name: my-container image: ubuntu:22.04 command: [ "/bin/sh", "-c", "sleep 3600" ] volumeMounts: - name: config-volume mountPath: "/etc/config" volumes: - name: config-volume configMap: name: my-app-config
Appliquez-le, puis listez et lisez les fichiers dans le Pod pour voir comment chaque clé du
ConfigMapest devenue un fichier.kubectl apply -f pod-with-configmap-volume.yaml kubectl exec -it pod-with-configmap-volume -- ls /etc/config kubectl exec -it pod-with-configmap-volume -- cat /etc/config/app.config.properties
Exercice : Créer un Helm Chart avec un ConfigMap#
En vous basant sur les connaissances acquises précédemment, vous allez créer un nouveau Helm Chart de zéro qui déploie une application et sa configuration via un ConfigMap.
Objectif#
Créer un Helm Chart qui déploie un
ConfigMapet unPod.Le
ConfigMapcontiendra une variableMESSAGEdéfinie dans le fichiervalues.yaml.Le
Podutilisera l’imagejrobert2/demok8senvet affichera la valeur de la variable d’environnementDEMOK8S, qui sera tirée duConfigMap.
Structure du Chart#
Créez l’arborescence suivante :
monchart-cm/
├── Chart.yaml
├── values.yaml
└── templates/
├── configmap.yaml
└── pod.yaml
Contenu des fichiers#
Chart.yamlapiVersion: v2 name: monchart-cm description: Un chart pour déployer une app avec un ConfigMap. type: application version: 0.1.0 appVersion: "1.0.0"
values.yamlconfig: message: "Bonjour depuis un ConfigMap Helm!"
templates/configmap.yamlIci, on crée le
ConfigMapen utilisant la valeur deconfig.message.apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: DEMOK8S: "{{ .Values.config.message }}"
templates/pod.yamlCe Pod va charger ses variables d’environnement depuis le
ConfigMapque nous venons de définir.apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: demokenv-container image: "jrobert2/demok8senv:1.0.0" envFrom: - configMapRef: name: my-configmap
Test et Déploiement#
Testez le rendu du template : Depuis le dossier
monchart-cm, exécutez :helm template .
Vérifiez que le
ConfigMapcontient bien le message duvalues.yamlet que lePodréférence correctement le nom duConfigMap.Déployez le chart : Installez le chart avec Argo CD.
Vérifiez les logs du pod pour vous assurer que le message s’affiche correctement.
Nettoyez en désinstallant l’application dans Argo CD.