Aller au contenu principal
Sommaire de la formation

configMap env vars et volume config

coolibra334 vues

ConfigMap

Un ConfigMap est une ressource utilisée pour stocker des paires clé-valeur destinées à la configuration des applications. Cela permet de décorréler les données de configuration des images d’application, rendant les conteneurs plus portables et plus faciles à gérer.

Pourquoi utiliser un ConfigMap ?

  1. Gestion centralisée de la configuration : Les configurations sont externalisées du conteneur.
  2. Réutilisabilité : Les mêmes images de conteneur peuvent être utilisées dans différents environnements (dev, test, prod) avec des ConfigMaps spécifiques.
  3. Flexibilité : Facile à modifier sans reconstruire ou redéployer l’application.

 

Exemple de configMap avec  les variables d'environnement

  • Les variables d'environnement sont chargés un à un dans le pod.
    • file: cm-vars01.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_url: "postgres://user:password@db-host:5432/mydb"
  log_level: "DEBUG"

---

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: my-app
    image: debian:latest
    command: ['sh', '-c', 'echo "The app is running!" && env | grep DB_']
    env:
    - name: DB_URL
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: database_url
    - name: DB_LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: log_level

 

kubectl apply -f cm-vars01.yaml

kubectl get cm
kubectl logs po/app-pod

 

 

  • Les variables d'environnement sont chargés globalement dans le pod.
    • cm-vars02.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DB_URL: "postgres://user:password@db-host:5432/mydb"
  DB_LOG_LEVEL: "DEBUG"
  DB_API_KEY: "KDKJFLJlkflkdmlkdmlgfùmgfmlgfml"

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mon-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mon-app
  template:
    metadata:
      labels:
        app: mon-app
    spec:
      containers:
      - name: mon-conteneur
        image: debain:latest
        command: ['sh', '-c', 'echo "The app is running!" && env | grep DB_']
        envFrom:
        - configMapRef:
            name: app-config

 

kubectl apply -f cm-vars02.yaml

kubectl get cm
kubectl logs po/app-pod-name

 

 

Exemple de configMap comme volume pour les ficher de config dans un pod

  • La configuration de nginx web app
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    events {
      worker_connections 1024;
    }

    http {
      server {
        listen 80;
        server_name localhost;

        location / {
          root /usr/share/nginx/html;
          index index.html;
        }

        location /api {
          proxy_pass http://backend-service:8080;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
        }
      }
    }

---

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    volumeMounts:
    - name: nginx-config-volume
      mountPath: /etc/nginx/nginx.conf
      subPath: nginx.conf
  volumes:
  - name: nginx-config-volume
    configMap:
      name: nginx-config

 

kubectl apply -f cm-config.yaml

kubectl get cm
kubectl exec -it po/nginx-pod -- bash

# Une fois dans le conteneur faire: cat /etc/nginx/nginx.conf 

 

 

  • Détails
    1. subPath : Permet de monter uniquement un fichier spécifique du ConfigMap (ici nginx.conf) dans l'emplacement /etc/nginx/nginx.conf.
    2. Le Pod utilise l'image officielle NGINX et charge automatiquement la configuration depuis le ConfigMap.

 

Quelques bonnes pratiques

  1. Utilisez des ConfigMaps pour les configurations non sensibles : Les ConfigMaps ne sont pas conçus pour des données sensibles comme des mots de passe ou des clés API. Pour cela, utilisez les Secrets.
  2. Versionner les ConfigMaps : Si votre application est sensible aux changements, versionnez vos ConfigMaps (par exemple, app-config-v1, app-config-v2).
  3. Évitez les données volumineuses : Les ConfigMaps sont optimisés pour des configurations légères. Si vos données sont volumineuses, envisagez un autre mécanisme (comme un volume persisté).

 

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.