Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
  1. Livres et vidéos
  2. Kubernetes
  3. Persistance des données
Extrait - Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées (3e édition)
Extraits du livre
Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées (3e édition) Revenir à la page d'achat du livre

Persistance des données

Objectifs du chapitre et prérequis

Ce chapitre présente la persistance des données dans Kubernetes. En effet, le contenu d’un conteneur n’a pas vocation à perdurer. Ce mécanisme est là pour permettre de conserver une information lorsque c’est nécessaire (bases de données, serveurs de fichiers, etc.).

Le chapitre abordera deux points de vue :

  • l’utilisateur faisant appel aux volumes persistants ;

  • l’administrateur mettant en place ce mécanisme.

Persistance des données

1. Origine du besoin

Dans ce qui a précédé, vous avez pu aborder le cycle de vie du conteneur dans Kubernetes. Un point important à retenir est qu’un conteneur a une durée de vie relativement courte et, qu’en l’état, il n’est pas possible de conserver de la donnée.

Pour répondre à ce besoin, Kubernetes peut mettre à disposition des espaces de stockage externes au cluster. Ce mécanisme s’appuie sur la notion de volume de données persistant (Persistent Volume).

2. Utilisation d’un volume persistant externe

L’utilisation d’un volume persistant se fait au sein de la déclaration d’un pod. Une première solution pourrait être de passer par un service externe comme avec un point de montage NFS.

Cette déclaration de persistance de données se définira en deux parties :

  • un référencement au niveau du pod dans le champ volumes ;

  • une indication de l’emplacement du montage au sein du conteneur.

Le référencement d’un volume NFS au niveau d’un pod se présentera sous la forme suivante :

spec: 
 volumes: 
   - name: nfs 
     nfs: 
       # URL for the NFS server 
       server: 192.168.0.1 
       path: / 

Le montage au niveau du conteneur se présentera ainsi :

spec: 
 containers: 
   - name: mailpit 
     image: axllent/mailpit 
 
     # Mount the NFS volume in the container 
     volumeMounts: 
       - name: nfs 
         mountPath: /maildir 

3. Volumes persistants

a. Structure du volume persistant

En plus de faire appel à des services externes, il est possible de référencer des objets de type volume persistant (Persistent Volume). Ces derniers ont la structure suivante :

  • une version et un type (apiVersion et kind) ;

  • des métadonnées (champ metadata) ;

  • une spécification contenant :

  • le type d’accès,

  • la capacité de stockage,

  • la classe du volume persistant (positionner à manual pour l’exemple),

  • les caractéristiques du stockage.

Ci-dessous...

Classes de stockage

1. Origine du besoin

La section précédente a permis d’aborder le travail nécessaire à la mise en place d’un volume persistant :

  • une déclaration pour indiquer que de l’espace disque est disponible ;

  • une déclaration pour pouvoir s’accaparer un espace disque ;

  • une action manuelle pour positionner les droits sur les répertoires.

Heureusement pour l’administrateur, ce travail de déclaration n’est pas nécessaire. Il est possible de passer par un gestionnaire automatique de volume persistant : les objets StorageClass (ou son raccourci sc).

Ces objets vont se charger d’intercepter les demandes de volumes persistants (PersistentVolumeClaim) et de réaliser automatiquement les actions suivantes :

  • création de l’objet PersistentVolume ;

  • attribution des droits ad-hoc.

Autre point, un cluster Kubernetes peut faire appel à plusieurs classes de stockage offrant plusieurs niveaux de services, comme :

  • une classe ssd pour des disques rapides de type SSD ;

  • une classe hdd pour des disques durs classiques de type HDD ;

  • une classe nfs pour pouvoir partager un espace disque entre plusieurs pods.

Charge à vous ensuite de créer le type de disque nécessaire en fonction des besoins des utilisateurs.

Ainsi, une application réclamant des disques rapides pourra demander des disques SSD, tandis qu’une autre prendra des disques traditionnels afin de réduire les coûts de stockage.

2. Liste des classes de stockage

Sur Minikube, une classe de stockage est présente à l’installation.

 Pour récupérer cette déclaration, lancez la commande kubectl avec les options suivantes :

  • le verbe get ;

  • le type à récupérer (storageclass ou son raccourci sc).

Ci-dessous la commande à lancer :

$ kubectl get storageclass 

Et le résultat attendu :

NAME                 PROVISIONER                AGE 
standard (default)   k8s.io/minikube-hostpath   30d 

Une classe de stockage porte le nom standard et cette dernière est définie par défaut. Autre point, le mécanisme d’approvisionnement porte le nom de k8s.io/minikube-hostpath.

3. Détail d’une classe...