Aller au contenu principal

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