Présentation
Kubernetes est l'une des solutions d'orchestration les plus populaires pour l'hébergement de conteneurs dans un environnement de production. La plate-forme permet aux utilisateurs d'automatiser le déploiement de nombreuses instances d'une application tout en évoluant en fonction de la demande.
Cependant, en raison de la nature volatile des pods Kubernetes, les volumes de stockage devaient être résolus avec une approche entièrement nouvelle.
Cet article explique ce que sont les volumes persistants Kubernetes et pourquoi ils sont si importants.
Que sont les volumes persistants Kubernetes ?
Les volumes persistants Kubernetes sont des volumes de stockage provisionnés par l'utilisateur et affectés à un cluster Kubernetes. Le cycle de vie des volumes persistants est indépendant de tout pod qui l'utilise. Ainsi, les volumes persistants sont parfaits pour les cas d'utilisation dans lesquels vous devez conserver des données quel que soit le processus de vie imprévisible des pods Kubernetes.
Sans volumes persistants, maintenir des services aussi communs qu'une base de données serait impossible. Chaque fois qu'un module est remplacé, les données acquises au cours du cycle de vie de ce module sont perdues. Cependant, grâce aux volumes persistants, les données sont contenues dans un état cohérent.
Types de volumes Kubernetes
Pour comprendre ce que sont les volumes persistants, nous devons d'abord expliquer en quoi les types de volumes diffèrent. Il existe différents types de volumes que vous pouvez utiliser dans un pod Kubernetes :
- Mémoire locale du nœud (
emptyDir
ethostPath
) - Volumes cloud (par exemple,
awsElasticBlockStore
,gcePersistentDisk
, etazureDiskVolume
) - Volumes de partage de fichiers, tels que Network File System (
nfs
) - Systèmes de fichiers distribués (par exemple,
cephfs
,rbd
, etglusterfs
) - Types de volumes spéciaux tels que
PersistentVolumeClaim
,secret
, etgitRepo
Les deux emptyDir
et hostPath
sont attachés au pod, stockés soit dans la RAM, soit dans un stockage persistant sur un lecteur. Comme ils dépendent du pod, leur contenu est disponible tant que le pod est en cours d'exécution. S'il tombe en panne, les données sont perdues.
Avec des volumes cloud , nfs
, et PersistentVolumeClaim
, le volume est indépendant et placé à l'extérieur de la nacelle. Bien qu'ils soient essentiellement tous conçus pour préserver les données, les volumes cloud sont nettement plus difficiles à gérer. Pour connecter le pod au fournisseur, l'utilisateur doit connaître de nombreux détails de stockage.
Les systèmes de fichiers réseau et les volumes persistants sont beaucoup plus pratiques. En fait, ces deux types de volume fonctionnent sur les mêmes principes.
NFS vous permet de vous connecter à un volume via un yaml dossier. Sans le pod, le contenu du volume est démonté mais reste disponible. Cependant, même pour les configurations NFS, vous devez envoyer une réclamation de volume persistant (PVC) demande.
Par conséquent, les réclamations de volume persistant sont la solution de base pour les volumes persistants dans Kubernetes.
Qu'est-ce qu'une réclamation de volume persistant ?
Les revendications de volume persistantes sont des objets qui se connectent aux volumes de stockage principaux via une série d'abstractions. Ils demandent les ressources de stockage dont votre déploiement a besoin.
Le principal avantage est que les PVC sont beaucoup plus conviviaux, ce qui permet aux développeurs de les utiliser sans avoir à connaître trop de détails sur l'environnement cloud auquel ils se connectent. L'administrateur répertorie tous les détails de la demande dans le PVC, mais le pod lui-même ne nécessite qu'un lien pour y accéder.
Par conséquent, un pod utilisant un volume persistant inclut également un certain nombre de couches abstraites entre lui et le stockage.
Utilisation de volumes persistants
Pour lier un pod à un volume persistant, il doit inclure des montages de volume et une revendication de volume persistant (PVC). Ces revendications permettent aux utilisateurs de monter un volume persistant dans un pod sans avoir à connaître les détails de l'environnement cloud.
Dans la demande de volume persistant, les utilisateurs spécifient la taille du stockage qu'ils souhaitent, le sélecteur, la direction vers le PV approprié et la classe de stockage. La classe de stockage fait référence au type de provisionnement, qu'il soit statique ou dynamique.
Provisionnement statique est une fonctionnalité dans laquelle les administrateurs utilisent les périphériques de stockage existants et les mettent à la disposition des utilisateurs du cluster. L'administrateur de cluster crée plusieurs volumes persistants qui sont disponibles pour la consommation et existent dans l'API Kubernetes.
Provisionnement dynamique se produit lorsqu'aucun des volumes persistants statiques ne correspond à la PVC. Dans ce cas, le provisionnement est basé sur des classes de stockage, créées et configurées par les administrateurs.
Le cycle de vie des volumes persistants
Une fois que vous avez supprimé le PVC, vous libérez le PV de sa réclamation. Selon la politique de récupération définie, le volume sera soit conservé, recyclé ou supprimé.
- Si vous définissez la règle de récupération sur conserver , le volume dans le stockage reste même une fois libéré de la revendication.
- Vous pouvez également recycler le volume, qui supprime le contenu qu'il contient et le rend disponible pour d'autres PVC.
- Configurer la politique de récupération pour supprimer une fois déconnecté du PVC signifie que le volume et le stockage sont complètement supprimés.
Comment créer un volume persistant
1. Pour créer un volume persistant, vous commencez par créer un .yaml fichier dans l'éditeur de votre choix. Dans cet exemple, nous nommons le fichier example-pv.yaml et éditez-le avec l'éditeur nano :
nano example-pv.yaml
2. Ajoutez le contenu suivant au fichier :
apiVersion: v1
kind: PersistentVolume
metadata:
name: [pv_name]
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
mountPath: [path of where the volume is accessible from within the container]
volumeID: [your_volume_id]
3. Remplacez les spécifications de name
, storage
, mountpath
, et volumeID
avec vos valeurs respectées.
4. Enregistrez et quittez le fichier.
5. Ensuite, déployez le volume persistant en utilisant la commande suivante avec le nom du fichier .yaml que vous avez créé à l'étape précédente :
kubectl create -f example-pv.yaml
Comment créer une demande de volume persistant
Comme pour le PV, vous créez un PVC avec un .yaml fichier composé du contenu suivant :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: [pvc_name]
spec:
storageClassName: manual
selector:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Une fois le contenu ajouté, enregistrez et quittez le fichier.
Une fois que vous avez installé et configuré le volume persistant et la demande de volume persistant, vous pouvez spécifier le PVC dans le pod requis.