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 ?
- Gestion centralisée de la configuration : Les configurations sont externalisées du conteneur.
- Réutilisabilité : Les mêmes images de conteneur peuvent être utilisées dans différents environnements (dev, test, prod) avec des ConfigMaps spécifiques.
- 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
-
- subPath : Permet de monter uniquement un fichier spécifique du ConfigMap (ici nginx.conf) dans l'emplacement /etc/nginx/nginx.conf.
- Le Pod utilise l'image officielle NGINX et charge automatiquement la configuration depuis le ConfigMap.
Quelques bonnes pratiques
- 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.
- Versionner les ConfigMaps : Si votre application est sensible aux changements, versionnez vos ConfigMaps (par exemple, app-config-v1, app-config-v2).
- É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.