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