Aller au contenu principal

Lab 6.3 - StorageClasses et Provisionnement Dynamique

Objectifs du Lab

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

  • Comprendre le concept de StorageClass.
  • Créer une StorageClass personnalisée.
  • Utiliser le provisionnement dynamique avec un PVC.
  • Comprendre les différents types de provisionneurs.
  • Vérifier le provisionnement automatique de PVs.

Durée Estimée

45-60 minutes

Prérequis

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

Partie 1: Comprendre les StorageClasses

Une StorageClass définit un "type" de stockage avec des caractéristiques (provisionneur, paramètres, réclamation). Elle permet le provisionnement dynamique de PersistentVolumes.

Étape 1.1: Lister les StorageClasses Existant

Vérifiez les StorageClasses disponibles dans votre cluster:

kubectl get storageclass
# ou
kubectl get sc

Sur minikube, vous devriez voir une StorageClass par défaut (ex: standard ou hostpath). Sur kind, il peut y avoir standard ou aucune.

Vérifiez les détails d'une StorageClass:

kubectl describe storageclass <nom-de-la-storageclass>

Partie 2: Création d'une StorageClass Personnalisée

Pour un cluster local, nous allons créer une StorageClass qui utilise hostPath comme provisionneur (via un provisionneur local ou manuel).

Étape 2.1: Créer une StorageClass

Créez un fichier storageclass-local.yaml:

# storageclass-local.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner # Pas de provisionnement automatique pour hostPath
volumeBindingMode: WaitForFirstConsumer # Attendre qu'un Pod utilise le PVC avant de créer le PV
allowVolumeExpansion: false # Ne permet pas l'expansion du volume

Explication:

  • provisioner: kubernetes.io/no-provisioner: Indique qu'il n'y a pas de provisionnement automatique. Pour un cluster local avec hostPath, nous devons créer les PVs manuellement, mais la StorageClass permet de les grouper.
  • volumeBindingMode: WaitForFirstConsumer: Le PVC attend qu'un Pod soit créé avant de lier le PV. Cela permet au scheduler de choisir le bon nœud.
  • allowVolumeExpansion: false: Les volumes ne peuvent pas être agrandis après création.

Appliquez la StorageClass:

kubectl apply -f storageclass-local.yaml

Vérifiez qu'elle est créée:

kubectl get storageclass local-storage

Partie 3: Provisionnement Dynamique (Simulation)

Pour un vrai provisionnement dynamique, vous auriez besoin d'un provisionneur comme:

  • kubernetes.io/aws-ebs (AWS)
  • kubernetes.io/azure-disk (Azure)
  • kubernetes.io/gce-pd (GCP)
  • kubernetes.io/cinder (OpenStack)

Sur minikube, vous pouvez utiliser le provisionneur k8s.io/minikube-hostpath si disponible.

Étape 3.1: Créer une StorageClass avec Provisionnement Dynamique (minikube)

Si vous utilisez minikube, créez une StorageClass qui utilise le provisionneur minikube:

# storageclass-minikube.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minikube-dynamic
provisioner: k8s.io/minikube-hostpath # Provisionneur minikube
volumeBindingMode: Immediate # Lier immédiatement
reclaimPolicy: Delete # Supprimer le PV quand le PVC est supprimé
allowVolumeExpansion: true # Permettre l'expansion

Appliquez-la:

kubectl apply -f storageclass-minikube.yaml

Étape 3.2: Créer un PVC avec la StorageClass

Créez un fichier pvc-dynamic.yaml:

# pvc-dynamic.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-dynamic
spec:
storageClassName: minikube-dynamic # Utilise la StorageClass avec provisionnement dynamique
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi

Appliquez le PVC:

kubectl apply -f pvc-dynamic.yaml

Vérifiez que le PVC est créé et qu'un PV a été provisionné automatiquement:

kubectl get pvc pvc-dynamic
kubectl get pv

Vous devriez voir un nouveau PV créé automatiquement avec le statut Bound et lié au PVC.


Partie 4: Utilisation du PVC Dynamique

Créez un Pod qui utilise le PVC dynamique:

# pod-dynamic-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-dynamic-pvc
spec:
containers:
- name: app-container
image: busybox
command: ["/bin/sh", "-c"]
args: ["echo 'Données dans un volume dynamique - $(date)' > /data/dynamic-data.txt && cat /data/dynamic-data.txt && sleep 3600"]
volumeMounts:
- name: dynamic-storage
mountPath: /data
volumes:
- name: dynamic-storage
persistentVolumeClaim:
claimName: pvc-dynamic

Appliquez le Pod:

kubectl apply -f pod-dynamic-pvc.yaml

Vérifiez les logs:

kubectl logs pod-dynamic-pvc

Partie 5: Expansion de Volume (Optionnel)

Si allowVolumeExpansion: true, vous pouvez agrandir un PVC après sa création.

Modifiez le PVC pour demander plus d'espace:

kubectl patch pvc pvc-dynamic -p '{"spec":{"resources":{"requests":{"storage":"200Mi"}}}}'

Vérifiez que la demande a été mise à jour:

kubectl get pvc pvc-dynamic

Note: L'expansion réelle du volume dépend du provisionneur et du type de stockage sous-jacent.


Partie 6: Nettoyage

Supprimez les ressources créées:

kubectl delete pod pod-dynamic-pvc
kubectl delete -f pvc-dynamic.yaml
# Le PV sera automatiquement supprimé si reclaimPolicy: Delete
kubectl delete -f storageclass-minikube.yaml
kubectl delete -f storageclass-local.yaml

Résumé du Lab

Dans ce lab, vous avez exploré les StorageClasses et le provisionnement dynamique. Vous avez appris à créer des StorageClasses personnalisées, à utiliser le provisionnement automatique de PVs via des PVCs, et à comprendre les différents modes de liaison et politiques de réclamation.


Prochaines Étapes

Le dernier lab de ce module vous montrera comment utiliser les PersistentVolumes avec des StatefulSets pour des applications avec état.

Lab 6.4: StatefulSet avec Stockage Persistant


Lab créé le: Décembre 2024