Aller au contenu principal

Lab 6.2 - PersistentVolumes et PersistentVolumeClaims

Objectifs du Lab

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

  • Créer un PersistentVolume (PV) manuellement.
  • Créer un PersistentVolumeClaim (PVC).
  • Lier un PVC à un Pod.
  • Comprendre le cycle de vie d'un PV et d'un PVC.
  • Vérifier la persistance des données.

Durée Estimée

45-60 minutes

Prérequis

  • kubectl installé et configuré.
  • Cluster Kubernetes local fonctionnel (minikube ou kind).
  • Connaissances sur les PersistentVolumes et PVCs (Chapitre 6.2).

Partie 1: Création d'un PersistentVolume

Nous allons créer un PersistentVolume manuellement. Pour un cluster local (minikube/kind), nous utiliserons un volume de type hostPath qui monte un répertoire du nœud.

Étape 1.1: Créer le PersistentVolume

Créez un fichier pv-example.yaml:

# pv-example.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
labels:
type: local
spec:
storageClassName: manual # Nom de la StorageClass (ou "" pour pas de classe)
capacity:
storage: 1Gi # Taille du volume
accessModes:
- ReadWriteOnce # RWO: un seul nœud peut monter en lecture-écriture
persistentVolumeReclaimPolicy: Retain # Que faire quand le PVC est supprimé: Retain, Delete, Recycle
hostPath:
path: /tmp/k8s-pv-example # Chemin sur le nœud (pour minikube/kind)
type: DirectoryOrCreate # Créer le répertoire s'il n'existe pas

Explication:

  • storageClassName: manual: Indique que ce PV est provisionné manuellement (pas par une StorageClass).
  • accessModes: ReadWriteOnce: Le volume peut être monté en lecture-écriture par un seul nœud à la fois.
  • persistentVolumeReclaimPolicy: Retain: Lorsque le PVC est supprimé, le PV est conservé (les données ne sont pas supprimées).
  • hostPath: Pour un cluster local, nous utilisons un répertoire du nœud. En production, vous utiliseriez des volumes cloud (EBS, Azure Disk, GCE Persistent Disk) ou NFS.

Appliquez le PersistentVolume:

kubectl apply -f pv-example.yaml

Vérifiez que le PV est créé:

kubectl get pv pv-example

Vous devriez voir le PV avec le statut Available (disponible, pas encore lié à un PVC).

Vérifiez les détails:

kubectl describe pv pv-example

Partie 2: Création d'un PersistentVolumeClaim

Un PVC demande un volume avec des caractéristiques spécifiques (taille, mode d'accès, StorageClass).

Étape 2.1: Créer le PersistentVolumeClaim

Créez un fichier pvc-example.yaml:

# pvc-example.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
storageClassName: manual # Doit correspondre au storageClassName du PV
accessModes:
- ReadWriteOnce # Doit correspondre ou être un sous-ensemble des accessModes du PV
resources:
requests:
storage: 500Mi # Demande 500 MiB (le PV a 1 GiB, donc ça fonctionne)

Explication:

  • storageClassName: manual: Le PVC cherche un PV avec cette StorageClass.
  • accessModes: ReadWriteOnce: Le PVC demande un volume avec ce mode d'accès.
  • resources.requests.storage: 500Mi: Le PVC demande au moins 500 MiB.

Appliquez le PersistentVolumeClaim:

kubectl apply -f pvc-example.yaml

Vérifiez que le PVC est créé et lié au PV:

kubectl get pvc pvc-example

Vous devriez voir le PVC avec le statut Bound (lié au PV).

Vérifiez que le PV est maintenant lié:

kubectl get pv pv-example

Le statut devrait être Bound et la colonne CLAIM devrait indiquer default/pvc-example.


Partie 3: Utilisation du PVC dans un Pod

Maintenant, nous allons créer un Pod qui utilise le PVC pour stocker des données persistantes.

Étape 3.1: Créer un Pod avec le PVC

Créez un fichier pod-with-pvc.yaml:

# pod-with-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-with-pvc
spec:
containers:
- name: app-container
image: busybox
command: ["/bin/sh", "-c"]
args: ["echo 'Données persistantes - $(date)' >> /data/persistent-data.txt && cat /data/persistent-data.txt && sleep 3600"]
volumeMounts:
- name: persistent-storage
mountPath: /data # Chemin où le volume sera monté dans le conteneur
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: pvc-example # Nom du PVC à utiliser

Appliquez le Pod:

kubectl apply -f pod-with-pvc.yaml

Attendez que le Pod soit Running:

kubectl get pods pod-with-pvc

Vérifiez les logs pour voir les données écrites:

kubectl logs pod-with-pvc

Vous devriez voir le message avec la date.

Étape 3.2: Vérifier la Persistance

Supprimez le Pod:

kubectl delete pod pod-with-pvc

Créez un nouveau Pod qui lit les données:

# pod-read-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-read-pvc
spec:
containers:
- name: app-container
image: busybox
command: ["/bin/sh", "-c"]
args: ["cat /data/persistent-data.txt && sleep 3600"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: pvc-example

Appliquez le nouveau Pod:

kubectl apply -f pod-read-pvc.yaml

Vérifiez les logs:

kubectl logs pod-read-pvc

Vous devriez voir les données écrites par le premier Pod, ce qui prouve la persistance!


Partie 4: Nettoyage

Supprimez les ressources créées:

kubectl delete pod pod-read-pvc
kubectl delete -f pvc-example.yaml
kubectl delete -f pv-example.yaml

Note: Avec persistentVolumeReclaimPolicy: Retain, même après la suppression du PVC, le PV reste avec le statut Released. Les données sont conservées. Pour supprimer complètement le PV, vous devez le supprimer manuellement:

kubectl delete pv pv-example

Résumé du Lab

Dans ce lab, vous avez exploré les PersistentVolumes et PersistentVolumeClaims. Vous avez appris à créer un PV manuellement, à créer un PVC qui se lie automatiquement au PV, et à utiliser le PVC dans un Pod pour stocker des données persistantes. Vous avez également vérifié que les données survivent à la suppression et à la recréation des Pods.


Prochaines Étapes

Le prochain lab vous introduira aux StorageClasses et au provisionnement dynamique, qui simplifient grandement la gestion du stockage.

Lab 6.3: StorageClasses et Provisionnement Dynamique


Lab créé le: Décembre 2024