Stockage des données d'application avec des PersistentVolumes

KubernetesKubernetesIntermediate
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à stocker les données d'application avec des PersistentVolumes (volumes persistants) dans Kubernetes.

Les PersistentVolumes (PVs) sont des ressources Kubernetes qui représentent une partie de stockage réseau dans un cluster. Ils peuvent être utilisés pour stocker les données d'application de manière indépendante du cycle de vie des conteneurs. Cela signifie que les données peuvent être conservées même si le conteneur est terminé ou déplacé sur un autre nœud.

Dans ce laboratoire, vous allez créer un PersistentVolume et l'utiliser pour stocker les données d'une simple application web. Vous allez ensuite modifier l'application pour utiliser un PersistentVolumeClaim (PVC) pour accéder au PersistentVolume. Enfin, vous allez modifier le PVC pour demander des ressources de stockage spécifiques.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} kubernetes/get -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} kubernetes/create -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} kubernetes/delete -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} kubernetes/edit -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} kubernetes/apply -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} kubernetes/exec -.-> lab-9685{{"Stockage des données d'application avec des PersistentVolumes"}} end

Démarrer le cluster Minikube

Avant de créer des ressources, vous avez besoin d'un cluster Kubernetes en cours d'exécution. Minikube est un environnement Kubernetes léger qui s'exécute sur votre machine locale.

  1. Accédez à votre répertoire de travail :

    Ouvrez le terminal et accédez au dossier de projet par défaut :

    cd /home/labex/project
  2. Démarrez Minikube :

    Démarrez Minikube pour initialiser un cluster Kubernetes :

    minikube start
    • Cette commande configure un cluster Kubernetes mono - nœud sur votre machine locale.
    • Minikube peut prendre quelques minutes à démarrer en fonction des performances de votre système.
  3. Vérifiez que Minikube est en cours d'exécution :

    Vérifiez l'état du cluster Minikube :

    minikube status
    • Recherchez des composants tels que kubelet et apiserver listés comme Running (en cours d'exécution).
    • Si le cluster n'est pas en cours d'exécution, relancez la commande minikube start.

Si vous rencontrez des problèmes lors du démarrage de Minikube, utilisez minikube delete pour réinitialiser l'environnement si nécessaire.

Créer un PersistentVolume

Dans cette étape, vous allez créer un PersistentVolume (volume persistant) qui peut être utilisé pour stocker des données. Vous allez créer un fichier YAML appelé pv.yaml avec le contenu suivant :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data

Ce fichier crée un PersistentVolume d'une capacité de 1Gi et avec un mode d'accès ReadWriteOnce (lecture - écriture une seule fois). Le champ hostPath spécifie que les données seront stockées sur la machine hôte au chemin /mnt/data. Le champ persistentVolumeReclaimPolicy est défini sur Retain (conservation), ce qui signifie que les données seront conservées même si le PersistentVolume est supprimé.

Appliquez le PersistentVolume à votre cluster avec la commande suivante :

kubectl apply -f pv.yaml

Déployer une application web simple

Dans cette étape, vous allez déployer une application web simple qui stockera des données sur le PersistentVolume (volume persistant) que vous avez créé à l'étape 1. Vous allez créer un fichier YAML appelé web-app.yaml avec le contenu suivant :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: web-app
          image: nginx
          volumeMounts:
            - name: data
              mountPath: /usr/share/nginx/html/data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: my-pvc

Ce fichier crée un Deployment (déploiement) avec une seule réplique et un conteneur qui exécute l'image nginx. Le champ volumeMounts spécifie que le conteneur doit monter le PersistentVolume au chemin /usr/share/nginx/html/data. Le champ volumes spécifie que le conteneur doit utiliser un PersistentVolumeClaim (demande de volume persistant) appelé my-pvc.

Appliquez le Deployment à votre cluster avec la commande suivante :

kubectl apply -f web-app.yaml

Créer une demande de volume persistant (PersistentVolumeClaim)

Dans cette étape, vous allez créer une demande de volume persistant (PersistentVolumeClaim) qui sera utilisée pour demander du stockage au PersistentVolume que vous avez créé à l'étape 1. Vous allez créer un fichier YAML appelé pvc.yaml avec le contenu suivant :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

Ce fichier crée une demande de volume persistant avec un mode d'accès ReadWriteOnce et une demande de 500Mi de stockage auprès du PersistentVolume.

Appliquez la demande de volume persistant à votre cluster avec la commande suivante :

kubectl apply -f pvc.yaml

Vérifier la persistance des données

Dans cette étape, vous allez vérifier que les données sont bien persistées sur le PersistentVolume (volume persistant). Vous allez accéder à l'application web en cours d'exécution dans le conteneur et écrire des données sur le PersistentVolume.

Tout d'abord, trouvez le nom du pod exécutant votre application en exécutant la commande suivante :

kubectl get pods -l app=web-app

Vous devriez voir un seul pod exécutant votre application. Notez le nom du pod.

Ensuite, exécutez la commande suivante pour ouvrir une session shell dans le conteneur exécutant votre application :

kubectl exec -it /bin/sh < pod-name > --

Remplacez <pod-name> par le nom du pod que vous avez noté précédemment.

Une fois que vous êtes dans la session shell, exécutez la commande suivante pour ajouter un fichier test.txt :

echo "This is a test file." > /usr/share/nginx/html/data/test.txt

Cette commande crée un fichier appelé test.txt avec le texte "This is a test file." dans le répertoire de données du PersistentVolume.

Supprimez l'application web avec la commande suivante :

kubectl delete deployment web-app

Recréez l'application web avec la commande suivante :

kubectl apply -f web-app.yaml

Vérifiez que le fichier que vous avez créé dans le répertoire de données existe toujours avec la commande suivante :

kubectl get pods -l app=web-app
kubectl exec cat /usr/share/nginx/html/data/test.txt < pod-name > --

Remplacez <pod-name> par le nom du pod que vous avez noté précédemment.

Modifier les ressources de stockage de la demande de volume persistant (PVC)

Dans cette étape, vous allez modifier la demande de volume persistant (PVC) pour demander des ressources de stockage spécifiques au PersistentVolume (volume persistant). Vous allez modifier le fichier pvc.yaml pour demander 1Gi de stockage au lieu de 500Mi.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Ajoutez un champ allowVolumeExpansion: true à la classe de stockage (storageclass) à la dernière ligne.

kubectl edit storageclass standard
Exemple de modification du stockage de la PVC

Appliquez la demande de volume persistant mise à jour à votre cluster avec la commande suivante :

kubectl delete deployment web-app
kubectl delete pvc my-pvc
kubectl apply -f web-app.yaml
kubectl apply -f pvc.yaml

Résumé

Dans ce laboratoire, vous avez appris à stocker les données d'une application avec des PersistentVolumes (volumes persistants) dans Kubernetes. Vous avez créé un PersistentVolume, déployé une application web simple qui utilise le PersistentVolume, créé une demande de volume persistant (PersistentVolumeClaim) pour demander du stockage au PersistentVolume et modifié la demande de volume persistant pour demander des ressources de stockage spécifiques. Vous avez également vérifié que les données étaient bien persistées sur le PersistentVolume même si le conteneur était terminé ou déplacé sur un autre nœud.