Aller au contenu principal

Lab 6.1 - Volumes Éphémères et emptyDir

Objectifs

À la fin de ce lab, vous serez capable de:

  • Créer et utiliser des volumes emptyDir
  • Utiliser des volumes tmpfs (RAM)
  • Partager des volumes entre conteneurs dans un Pod
  • Comprendre le cycle de vie des volumes éphémères
  • Comparer emptyDir et tmpfs

Prérequis

  • Cluster Kubernetes fonctionnel
  • kubectl configuré
  • Compréhension des Pods et volumes

Exercice 1: Volume emptyDir Basique

Créer un Pod avec emptyDir

Créez pod-emptydir.yaml:

apiVersion: v1
kind: Pod
metadata:
name: emptydir-pod
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "echo 'Hello' > /cache/data.txt && cat /cache/data.txt && sleep 3600"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir: {}

Déployer et Vérifier

kubectl apply -f pod-emptydir.yaml
kubectl logs emptydir-pod
kubectl exec emptydir-pod -- ls -la /cache

Exercice 2: emptyDir avec Limite de Taille

Créer un Pod avec Size Limit

Créez pod-emptydir-limit.yaml:

apiVersion: v1
kind: Pod
metadata:
name: emptydir-limit-pod
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "dd if=/dev/zero of=/cache/bigfile bs=1M count=100 && sleep 3600"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir:
sizeLimit: 50Mi

Déployer et Observer

kubectl apply -f pod-emptydir-limit.yaml
kubectl get pod emptydir-limit-pod
# Le Pod devrait échouer car 100Mi > 50Mi

Exercice 3: Volume Partagé entre Conteneurs

Créer un Pod Multi-Conteneurs

Créez pod-shared-volume.yaml:

apiVersion: v1
kind: Pod
metadata:
name: shared-volume-pod
spec:
containers:
- name: writer
image: busybox:1.35
command: ["sh", "-c", "echo 'Data from writer' > /shared/data.txt && sleep 3600"]
volumeMounts:
- name: shared
mountPath: /shared
- name: reader
image: busybox:1.35
command: ["sh", "-c", "sleep 5 && cat /shared/data.txt && sleep 3600"]
volumeMounts:
- name: shared
mountPath: /shared
volumes:
- name: shared
emptyDir: {}

Déployer et Vérifier

kubectl apply -f pod-shared-volume.yaml
kubectl logs shared-volume-pod -c writer
kubectl logs shared-volume-pod -c reader

Exercice 4: Volume tmpfs (RAM)

Créer un Pod avec tmpfs

Créez pod-tmpfs.yaml:

apiVersion: v1
kind: Pod
metadata:
name: tmpfs-pod
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "echo 'Fast storage' > /tmp/data.txt && cat /tmp/data.txt && sleep 3600"]
volumeMounts:
- name: tmpfs-volume
mountPath: /tmp
volumes:
- name: tmpfs-volume
emptyDir:
medium: Memory
sizeLimit: 100Mi

Déployer et Vérifier

kubectl apply -f pod-tmpfs.yaml
kubectl logs tmpfs-pod
kubectl exec tmpfs-pod -- df -h /tmp

Exercice 5: Comparaison emptyDir vs tmpfs

Créer Deux Pods pour Comparaison

Créez pod-comparison.yaml:

apiVersion: v1
kind: Pod
metadata:
name: emptydir-bench
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "time dd if=/dev/zero of=/cache/test bs=1M count=10 && sleep 3600"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir: {}
---
apiVersion: v1
kind: Pod
metadata:
name: tmpfs-bench
spec:
containers:
- name: app
image: busybox:1.35
command: ["sh", "-c", "time dd if=/dev/zero of=/tmp/test bs=1M count=10 && sleep 3600"]
volumeMounts:
- name: tmpfs-vol
mountPath: /tmp
volumes:
- name: tmpfs-vol
emptyDir:
medium: Memory

Comparer les Performances

kubectl apply -f pod-comparison.yaml
kubectl logs emptydir-bench
kubectl logs tmpfs-bench
# Comparer les temps d'écriture

Exercice 6: Cas d'Usage Réel - Cache

Créer un Pod avec Cache

Créez pod-cache.yaml:

apiVersion: v1
kind: Pod
metadata:
name: cache-pod
spec:
containers:
- name: web-server
image: nginx:1.20
volumeMounts:
- name: cache
mountPath: /var/cache/nginx
- name: cache-warmup
image: busybox:1.35
command: ["sh", "-c", "while true; do echo 'Cache data' > /cache/data.txt; sleep 60; done"]
volumeMounts:
- name: cache
mountPath: /cache
volumes:
- name: cache
emptyDir:
sizeLimit: 500Mi

Déployer et Vérifier

kubectl apply -f pod-cache.yaml
kubectl exec cache-pod -c web-server -- ls -la /var/cache/nginx
kubectl exec cache-pod -c cache-warmup -- cat /cache/data.txt

Nettoyage

kubectl delete pod emptydir-pod emptydir-limit-pod shared-volume-pod tmpfs-pod emptydir-bench tmpfs-bench cache-pod

Questions de Réflexion

  1. Quelle est la différence principale entre emptyDir et tmpfs?
  2. Quand utiliseriez-vous tmpfs au lieu de emptyDir?
  3. Pourquoi définir une sizeLimit pour les volumes emptyDir?
  4. Que se passe-t-il avec les données dans un volume emptyDir quand le Pod est supprimé?

Défi Bonus

Créez un Pod avec trois conteneurs qui partagent un volume emptyDir:

  • Un conteneur qui écrit des données
  • Un conteneur qui lit et traite les données
  • Un conteneur qui surveille la taille du volume

Lab créé le: Décembre 2024