Chapitre 6.2 - PersistentVolumes et PersistentVolumeClaims
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre PersistentVolumes (PV) et PersistentVolumeClaims (PVC)
- Créer et utiliser des PVs et PVCs
- Comprendre les access modes (RWO, ROX, RWX)
- Gérer le cycle de vie du stockage
- Comprendre les reclaim policies
- Choisir le bon type de stockage selon le cas d'usage
Introduction
Les volumes éphémères (emptyDir, tmpfs) sont supprimés quand le Pod est terminé. Pour les données importantes qui doivent persister (bases de données, fichiers utilisateurs, etc.), Kubernetes utilise PersistentVolumes et PersistentVolumeClaims.
Concepts Clés
PersistentVolume (PV)
Un PersistentVolume est une ressource de stockage dans le cluster qui a été provisionnée par un administrateur. C'est une ressource au niveau du cluster, indépendante des Pods.
PersistentVolumeClaim (PVC)
Un PersistentVolumeClaim est une demande de stockage par un utilisateur. Le PVC lie un PV à un Pod.
Création d'un PersistentVolume
Exemple: PV avec hostPath (Développement Local)
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-volume
labels:
type: local
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: /data/pv-volume
Note: hostPath est pour le développement local uniquement. En production, utilisez des solutions cloud (EBS, Azure Disk, GCE Persistent Disk) ou NFS.
Exemple: PV avec NFS
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
server: nfs-server.example.com
path: /exports/data
Création d'un PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: manual
Processus de liaison:
Access Modes
Les access modes déterminent comment le volume peut être monté:
ReadWriteOnce (RWO)
- Un seul node peut monter le volume en lecture-écriture
- Plusieurs Pods sur le même node peuvent partager le volume
- Cas d'usage: Bases de données, applications avec état
ReadOnlyMany (ROX)
- Plusieurs nodes peuvent monter le volume en lecture seule
- Cas d'usage: Fichiers de configuration en lecture seule, données partagées
ReadWriteMany (RWX)
- Plusieurs nodes peuvent monter le volume en lecture-écriture
- Cas d'usage: Systèmes de fichiers partagés (NFS, GlusterFS)
Utilisation dans un Pod
apiVersion: v1
kind: Pod
metadata:
name: pv-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: pv-claim
Flux complet:
Reclaim Policies
La reclaim policy détermine ce qui arrive au PV quand le PVC est supprimé.
Retain
Le PV est conservé même après suppression du PVC. Les données restent intactes.
Cas d'usage:
- Données importantes à sauvegarder
- Besoin de récupération manuelle
- Conformité et audit
Delete
Le PV est supprimé automatiquement avec le PVC. Les données sont perdues.
Cas d'usage:
- Données temporaires
- Environnements de développement
- Provisionnement dynamique
Recycle (Déprécié)
Cette politique est dépréciée. Utilisez Retain ou Delete à la place.
Exemple Complet: Base de Données
Étape 1: Créer le PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-pv
labels:
app: postgres
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: fast-ssd
hostPath:
path: /data/postgres
Étape 2: Créer le PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: fast-ssd
Étape 3: Utiliser dans un Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:14
env:
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-pvc
Commandes Utiles
Voir les PVs et PVCs
# Lister les PVs
kubectl get pv
# Détails d'un PV
kubectl describe pv pv-volume
# Lister les PVCs
kubectl get pvc
# Détails d'un PVC
kubectl describe pvc pv-claim
Vérifier la Liaison
# Voir l'état de liaison
kubectl get pv
kubectl get pvc
# Voir les détails
kubectl get pv pv-volume -o yaml
kubectl get pvc pv-claim -o yaml
Supprimer un PVC
# Supprimer le PVC
kubectl delete pvc pv-claim
# Vérifier l'état du PV après suppression
kubectl get pv pv-volume
Types de Stockage
Stockage Local (hostPath)
Avantages:
- Simple pour développement
- Pas de dépendance externe
Inconvénients:
- Pas portable
- Risque de perte de données
- Ne fonctionne pas avec plusieurs nodes
Utilisation: Développement local uniquement
NFS (Network File System)
Avantages:
- Supporte ReadWriteMany
- Partageable entre nodes
- Facile à configurer
Inconvénients:
- Performance limitée
- Point de défaillance unique
- Nécessite un serveur NFS
Utilisation: Fichiers partagés, applications collaboratives
Cloud Storage (EBS, Azure Disk, GCE PD)
Avantages:
- Haute performance
- Intégration cloud native
- Provisionnement dynamique
- Snapshots automatiques
Inconvénients:
- Coût selon utilisation
- Dépendance au cloud provider
Utilisation: Production, applications critiques
Bonnes Pratiques
1. Utiliser StorageClasses
Préférer le provisionnement dynamique avec StorageClasses plutôt que la création manuelle de PVs.
2. Choisir la Bonne Reclaim Policy
- Retain: Pour données importantes
- Delete: Pour données temporaires
3. Taille Appropriée
Ne pas sur-allouer. Commencer petit et agrandir si nécessaire (avec allowVolumeExpansion: true).
4. Sauvegardes
Mettre en place des sauvegardes régulières pour les données importantes.
5. Monitoring
Surveiller l'utilisation du stockage pour éviter l'épuisement.
Résumé
Dans ce chapitre, vous avez appris:
PersistentVolume (PV): Ressource de stockage au niveau du cluster
PersistentVolumeClaim (PVC): Demande de stockage par un utilisateur
Access Modes: RWO (un node), ROX (plusieurs nodes lecture seule), RWX (plusieurs nodes lecture-écriture)
Reclaim Policy: Retain (conserver) ou Delete (supprimer)
Types de stockage: hostPath (dev), NFS (partagé), Cloud (production)
Utilisation: Via persistentVolumeClaim dans les Pods
Bonnes pratiques: StorageClasses, taille appropriée, sauvegardes
Prochaines Étapes
Chapitre 6.3: StorageClasses et Provisionnement Dynamique
Lab 6.2: PersistentVolumes et PVCs
Chapitre créé le: Décembre 2024