Guide complet3 min de lecture

PersistentVolumes, ConfigMaps et Secrets Kubernetes

SFEIR Institute

Points clés

  • PersistentVolumes assurent la persistence des données au-delà du cycle de vie des Pods
  • ConfigMaps externalisent la configuration pour la rendre modifiable sans rebuild
  • Secrets chiffrent les données sensibles comme mots de passe et tokens API

Les PersistentVolumes, ConfigMaps et Secrets sont trois ressources fondamentales pour gérer le stockage et la configuration dans Kubernetes. En tant que débutant, comprendre ces concepts vous permet de déployer des applications qui conservent leurs données et utilisent des configurations externalisées.

TL;DR : Les PersistentVolumes gèrent le stockage durable (données qui survivent au Pod), les ConfigMaps stockent la configuration (URL, paramètres), et les Secrets protègent les données sensibles (mots de passe). Ce module est couvert dans la formation Kubernetes, les fondamentaux.

PersistentVolumes : stocker des données durablement

Le problème des données éphémères

Par défaut, les données d'un conteneur disparaissent quand le Pod est supprimé. C'est problématique pour une base de données ou des fichiers utilisateur.

Un PersistentVolume (PV) est un espace de stockage provisionné dans le cluster. Un PersistentVolumeClaim (PVC) est la demande d'un utilisateur pour utiliser cet espace.

ConceptAnalogieRôle
PersistentVolumeLe disque durStockage disponible dans le cluster
PersistentVolumeClaimLa réservationDemande d'utilisation par une application
À retenir : Le PV est le disque, le PVC est la demande de location.

Créer et utiliser un PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-storage
spec:
  accessModes:
    - ReadWriteOnce      # Un seul nœud peut écrire
  resources:
    requests:
      storage: 5Gi       # Taille demandée

Montez ensuite ce volume dans votre Pod :

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app
      image: nginx
      volumeMounts:
        - mountPath: /data    # Où monter dans le conteneur
          name: my-volume
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-storage

ConfigMaps : externaliser la configuration

Un ConfigMap stocke des paires clé-valeur pour configurer vos applications sans modifier l'image Docker.

Créer un ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DATABASE_HOST: "postgres.default.svc"
  LOG_LEVEL: "info"

Ou via kubectl :

kubectl create configmap app-config --from-literal=LOG_LEVEL=info

Injecter dans un Pod

spec:
  containers:
    - name: app
      image: myapp:1.0
      env:
        - name: LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: LOG_LEVEL
À retenir : Les ConfigMaps permettent de changer la configuration sans reconstruire l'image.

Secrets : protéger les données sensibles

Un Secret est similaire à un ConfigMap, mais conçu pour les données sensibles : mots de passe, tokens API, clés SSH.

Créer un Secret

apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
stringData:
  username: admin
  password: "MySecretPassword123"

Ou via kubectl :

kubectl create secret generic db-credentials \
  --from-literal=username=admin \
  --from-literal=password=MySecretPassword123

Injecter dans un Pod

spec:
  containers:
    - name: app
      image: myapp:1.0
      env:
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db-credentials
              key: password
À retenir : Les Secrets sont encodés en base64, pas chiffrés par défaut. C'est une première couche de protection, pas une solution de sécurité complète.

Résumé : quand utiliser quoi ?

RessourceCas d'usageExemple
PersistentVolumeDonnées qui doivent survivreBase de données, fichiers uploadés
ConfigMapConfiguration non sensibleURLs, niveaux de log, feature flags
SecretDonnées sensiblesMots de passe, tokens, certificats

Commandes kubectl essentielles

# Lister les PersistentVolumeClaims
kubectl get pvc

# Créer un ConfigMap depuis un fichier
kubectl create configmap nginx-conf --from-file=nginx.conf

# Voir le contenu d'un ConfigMap
kubectl describe configmap app-config

# Afficher un Secret (décodé)
kubectl get secret db-credentials -o jsonpath='{.data.password}' | base64 -d

Pour aller plus loin

Cette page couvre les bases du stockage et de la configuration. Pour les concepts avancés :

ConceptNiveauFormation
StorageClasses et provisionnement dynamiqueCKALFS458 Administration
Chiffrement des Secrets au reposCKSLFS460 Sécurité
Gestionnaires de secrets externes (Vault)CKSLFS460 Sécurité

Passez à l'action

La formation Kubernetes, les fondamentaux inclut un lab pratique où vous configurez une application Spring avec des ConfigMaps, sous la guidance d'un formateur expert.

Contactez nos conseillers pour planifier votre formation.