Aller au contenu principal

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éristiqueemptyDirtmpfs
StockageDisque localRAM
PerformanceMoyenneTrès élevée
PersistanceSurvit au redémarrage du conteneurSupprimé au redémarrage du node
LimiteEspace disqueRAM disponible
Cas d'usageCache, fichiers temporairesCache 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