Kubernetes · Storage

Storage

Demandez et montez du stockage persistant grâce aux PV, PVC et StorageClasses du cluster.

Leçon disponible
20 min

Objectifs

  • Distinguer filesystem éphémère, volume de Pod et stockage persistant.
  • Comprendre les rôles de PV, PVC et StorageClass.
  • Lire les access modes et une demande de capacité.
  • Monter un PVC dans un container.

Comprendre le stockage Kubernetes

Le filesystem inscriptible d’un container n’est pas un stockage durable. Un volume de Pod peut survivre au redémarrage d’un container, mais certains types restent liés à la durée de vie du Pod.

Le sous-système PersistentVolume sépare la demande applicative de l’implémentation du stockage. Le cluster peut associer une demande existante à un PV ou provisionner dynamiquement une ressource grâce à une StorageClass.

PV, PVC et StorageClass

Un PersistentVolume est une ressource de stockage au niveau du cluster. Un PersistentVolumeClaim est une demande namespaced portant capacité, access modes et éventuellement StorageClass. Une StorageClass décrit un provisioner et des politiques.

  • PV : ressource concrète ou représentation d’un stockage provisionné.
  • PVC : demande consommée par un Pod.
  • StorageClass : classe de service et méthode de provisionnement.
  • Dynamic provisioning : création à la demande d’un volume pour un PVC compatible.

Manifeste d’une demande de stockage

Ce PVC demande 5 GiB avec ReadWriteOnce. Sans storageClassName, une StorageClass par défaut peut être appliquée. Sans classe par défaut ni PV compatible, la demande peut rester Pending.

pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

ReadWriteOnce décrit une possibilité de montage en lecture-écriture depuis un seul nœud, pas nécessairement l’exclusivité d’un seul Pod. Les modes réellement supportés dépendent du driver de stockage.

Monter le PVC dans un Pod

La section volumes du Pod référence le claim. Chaque container qui doit l’utiliser ajoute un volumeMount portant le même nom et choisit son mountPath.

Extrait spec.volumes du Pod
volumes:
  - name: data
    persistentVolumeClaim:
      claimName: app-data
Extrait du container
volumeMounts:
  - name: data
    mountPath: /data

Observer le binding et le provisionnement

get affiche les phases des PV et PVC. describe pvc révèle événements, StorageClass demandée et raison d’un éventuel Pending.

Lister et diagnostiquer le stockage
kubectl get pv
kubectl get pvc
kubectl get storageclass
kubectl describe pvc app-data

Bonnes pratiques

Choisissez la StorageClass, les access modes et la capacité selon le driver réel. Vérifiez aussi reclaimPolicy, sauvegardes, restauration, expansion et contraintes de zone avant la production.

  • Ne pas considérer un PVC comme une sauvegarde.
  • Tester la restauration et la reprise sur un autre nœud.
  • Comprendre si la suppression du PVC entraîne la suppression du stockage sous-jacent.

Mini résumé

  • La couche inscriptible d’un container n’est pas un stockage persistant.
  • PV représente le stockage et PVC exprime la demande de l’application.
  • StorageClass permet notamment le provisionnement dynamique.
  • Les access modes et politiques dépendent du driver et du cluster.

Mini quiz

Trois questions pour vérifier les notions essentielles de la leçon.

1. Quelle relation décrit correctement PV et PVC ?
2. Pourquoi un PVC sans storageClassName peut-il rester Pending ?
3. Comment un container choisit-il le chemin où apparaît le PVC ?