Chapitre 6.1 - Volumes
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre les différents types de volumes Kubernetes
- Utiliser les volumes éphémères (emptyDir, tmpfs)
- Distinguer volumes éphémères et stockage persistant
- Choisir le bon type de volume selon le cas d'usage
- Comprendre le cycle de vie des volumes
Introduction
Les volumes dans Kubernetes permettent aux conteneurs d'accéder au stockage. Contrairement au système de fichiers du conteneur (éphémère), les volumes persistent même si le conteneur redémarre.
Volumes Éphémères
Les volumes éphémères existent uniquement pendant la durée de vie du Pod. Ils sont supprimés quand le Pod est terminé.
emptyDir
Un volume emptyDir est créé quand un Pod démarre et supprimé quand le Pod est terminé.
apiVersion: v1
kind: Pod
metadata:
name: empty-dir-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /cache
- name: sidecar
image: busybox:1.35
volumeMounts:
- name: cache
mountPath: /shared
volumes:
- name: cache
emptyDir:
sizeLimit: 1Gi # Optionnel: limite de taille
Caractéristiques:
- Créé automatiquement au démarrage du Pod
- Partagé entre tous les conteneurs du Pod
- Stocké sur le node (disque local)
- Supprimé quand le Pod est terminé
Cas d'usage:
- Cache temporaire
- Fichiers temporaires partagés entre conteneurs
- Données de travail intermédiaires
tmpfs (RAM)
Un volume tmpfs est stocké en mémoire (RAM) au lieu du disque.
apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 512Mi # Limite en RAM
Caractéristiques:
- Stocké en RAM (très rapide)
- Supprimé au redémarrage du node
- Limité par la RAM disponible
- Plus rapide que emptyDir (disque)
Cas d'usage:
- Cache en mémoire haute performance
- Fichiers temporaires sensibles (supprimés au redémarrage)
- Données qui ne doivent pas persister
Attention: Utiliser avec précaution car consomme de la RAM.
Comparaison: emptyDir vs tmpfs
| Caractéristique | emptyDir | tmpfs |
|---|---|---|
| Stockage | Disque local | RAM |
| Performance | Moyenne | Très élevée |
| Persistance | Survit au redémarrage du conteneur | Supprimé au redémarrage du node |
| Limite | Espace disque | RAM disponible |
| Cas d'usage | Cache, fichiers temporaires | Cache haute performance, données sensibles |
Volumes Spéciaux
ConfigMap et Secret comme Volumes
Les ConfigMaps et Secrets peuvent être montés comme volumes.
apiVersion: v1
kind: Pod
metadata:
name: config-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: app-secrets
defaultMode: 0400
Résultat: Chaque clé devient un fichier dans le répertoire monté.
Volumes Persistants (Aperçu)
Les volumes persistants (PV/PVC) seront couverts en détail dans le chapitre 6.2.
Différence principale:
Exemple Complet: Cache Partagé
apiVersion: v1
kind: Pod
metadata:
name: cache-example
spec:
containers:
# Conteneur principal
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: tmp
mountPath: /tmp
# Conteneur sidecar pour le cache
- name: cache-warmup
image: busybox:1.35
command: ["/bin/sh", "-c", "while true; do echo 'Cache data' > /cache/data.txt; sleep 60; done"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
# Cache partagé (disque)
- name: cache
emptyDir:
sizeLimit: 500Mi
# Fichiers temporaires (RAM)
- name: tmp
emptyDir:
medium: Memory
sizeLimit: 100Mi
Bonnes Pratiques
1. Choisir le Bon Type
- emptyDir: Cache, fichiers temporaires, données partagées entre conteneurs
- tmpfs: Cache haute performance, données sensibles temporaires
- PV/PVC: Données importantes qui doivent persister
2. Limites de Taille
Toujours définir sizeLimit pour éviter:
- Épuisement de l'espace disque (emptyDir)
- Épuisement de la RAM (tmpfs)
3. Nettoyage
Les volumes éphémères sont automatiquement nettoyés, mais:
- Vérifier que les applications nettoient leurs fichiers temporaires
- Surveiller l'utilisation de l'espace disque/RAM
Commandes Utiles
Vérifier les Volumes d'un Pod
kubectl describe pod empty-dir-pod
Voir l'Utilisation des Volumes
kubectl exec empty-dir-pod -c app -- df -h
Tester un Volume
# Écrire dans le volume
kubectl exec empty-dir-pod -c app -- sh -c "echo 'test' > /cache/test.txt"
# Lire depuis le volume
kubectl exec empty-dir-pod -c app -- cat /cache/test.txt
Résumé
Dans ce chapitre, vous avez appris:
Volumes éphémères: emptyDir (disque) et tmpfs (RAM)
emptyDir: Créé au démarrage, supprimé à la fin, partagé entre conteneurs
tmpfs: Stocké en RAM, très rapide, supprimé au redémarrage du node
Cas d'usage: Cache, fichiers temporaires, données partagées
Limitations: Taille limitée, durée de vie liée au Pod
Bonnes pratiques: Définir sizeLimit, choisir selon les besoins
Prochaines Étapes
Chapitre 6.2: PersistentVolumes et PersistentVolumeClaims
Lab 6.1: Volumes Éphémères et emptyDir
Chapitre créé le: Décembre 2024