Formation DevOps | Formation kubernetes​ : Volume , Persistence Volume , Persistence Volume Claim

www.itgalaxy.io

Volumes dans Kubernetes

Les conteneurs gérés par Kubernetes sont éphémères, ce qui pose des défis en matière de gestion des données persistantes, tout comme dans le cas des conteneurs hors orchestration. Lorsqu’un conteneur ou un pod est supprimé, les données qui y étaient stockées peuvent également être perdues. Pour surmonter cette problématique, Kubernetes utilise des volumes, qui permettent de conserver des données au-delà du cycle de vie d’un conteneur ou d’un pod. Ce document explore les différentes configurations de volumes dans Kubernetes, comment ils sont utilisés pour gérer le stockage et les données partagées, ainsi que les objets et services associés à ces volumes.

Objets et Services des Volumes

Volume

Un volume dans Kubernetes est un espace de stockage qui permet de persister des données entre deux redémarrages d’un conteneur ou d’un pod. Les volumes sont définis au niveau du pod et doivent être montés dans les conteneurs via la déclaration de volumeMounts. Il est essentiel de comprendre que les volumes sont éphémères dans le sens où ils disparaissent avec le pod, bien que la persistance des données dépende du backend utilisé pour le stockage.

PersistentVolume (PV)

Les PersistentVolumes (PV) sont des ressources de stockage disponibles au sein du cluster Kubernetes. Contrairement aux volumes traditionnels, la vie et la gestion d’un PV sont indépendantes du cycle de vie des pods. Les administrateurs créent les PV manuellement ou de manière dynamique en fonction du backend utilisé pour le stockage. Cela permet aux utilisateurs de demander de manière flexible un certain niveau de stockage sans devoir se préoccuper des détails de l’infrastructure.

PersistentVolumeClaim (PVC)

Le PersistentVolumeClaim (PVC) est une requête d’un utilisateur pour l’attribution d’un volume. Lorsqu’un utilisateur crée un PVC, Kubernetes tente de l’associer à un PV disponible. Si aucun PV approprié n’est libre, Kubernetes peut créer un PV dynamiquement selon les spécifications définies dans une StorageClass.

StorageClass

La StorageClass représente ce que les administrateurs du cluster mettent à disposition pour les volumes persistants. Elle définit les paramètres d’un type de stockage que les utilisateurs peuvent demander. Une StorageClass peut également définir le provisionnement dynamique, permettant la création à la demande de PV en fonction des PVC.

Types de Volumes dans Kubernetes

Kubernetes prend en charge plusieurs types de volumes, qui sont utilisés selon les besoins spécifiques de l’application. Voici une explication des types de volumes les plus courants :

1. emptyDir

Le volume de type emptyDir est un volume local qui n’existe que pendant la durée de vie d’un pod. Ce volume est vidé lorsque le pod est supprimé. Il est souvent utilisé pour stocker des données temporaires, comme des fichiers temporaires créés par les applications.

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: registry.k8s.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir:
      sizeLimit: 500Mi

Dans cet exemple, un volume emptyDir est monté au chemin /cache du conteneur.

2. hostPath

Le volume hostPath permet d’accéder à un répertoire sur l’hôte (la machine physique ou virtuelle qui exécute le pod). Cela peut être utile pour des cas de test ou des configurations particulièrement spécifiques.

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: registry.k8s.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /data
      type: Directory

Cela permet au conteneur d’accéder à /data sur l’hôte.

3. PersistentVolumeClaim

Les PVC sont utilisés pour demander des volumes, qui peuvent être soit provisionnés de manière dynamique, soit associés à des PV déjà existants. Voici un exemple de définition d’un PVC :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: foo-pvc
  namespace: foo
spec:
  storageClassName: ""
  volumeName: foo-pv

Définition d’un PersistentVolume

Le PV est ensuite attaché à ce PVC :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: foo-pv
spec:
  storageClassName: ""
  claimRef:
    name: foo-pvc
    namespace: foo

Utilisation d’un PVC dans un Pod

L’exemple suivant illustre comment utiliser un PVC dans un pod :

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: foo-pvc

Cela les lie ensemble, permettant à l’application d’accéder à des données persistantes au travers du PVC.

Intégration avec des Fournisseurs de Stockage

AWS EBS

AWS Elastic Block Store (EBS) est un service de stockage de blocs dans la cloud d’AWS. Voici comment le configurer avec Kubernetes :

apiVersion: v1
kind: Pod
metadata:
  name: pod-using-my-ebs-volume
spec:
  containers:
  - image: ...
    name: container-using-my-ebs-volume
    volumeMounts:
    - mountPath: /my-ebs
      name: my-ebs-volume
  volumes:
  - name: my-ebs-volume
    awsElasticBlockStore:
      volumeID: vol-049df61146c4d7901
      fsType: ext4

L’ID du volume doit correspondre à celui de l’instance EBS créée dans AWS.

NFS

Le NFS (Network File System) permet de partager des fichiers entre différents serveurs. Kubernetes prend en charge NFS, ce qui en fait un choix approprié pour les applications nécessitant un accès partagé :

apiVersion: v1
kind: Pod
metadata:
  name: pod-using-my-nfs-volume
spec:
  containers:
  - image: ...
    name: container-using-my-nfs-volume
    volumeMounts:
    - mountPath: /my-nfs
      name: my-nfs-volume
  volumes:
  - name: my-nfs-volume
    nfs:
      server: 192.168.0.55
      path: "/exports/assets"

L’adresse IP doit pointer vers un serveur NFS configuré pour partager le répertoire.

Autres Types de Volumes Supportés par Kubernetes

Kubernetes prend également en charge d’autres solutions de stockage comme :
Ceph RBD : Ceph est un système de stockage distribué qui fournit des blocs, des fichiers, et de l’objet. Kubernetes permet d’utiliser Ceph RBD pour les volumes persistants.
GCE Persistent Disk : Google Cloud Platform (GCP) offre des disques persistants attachés aux instances qui peuvent aussi être utilisés comme volumes dans Kubernetes.

Conclusion

La gestion des volumes et du stockage persistant est une composante fondamentale dans la gestion des applications conteneurisées avec Kubernetes. Grâce aux différentes abstractions comme les PV, PVC, et StorageClass, Kubernetes propose une flexibilité inégalée pour gérer les besoins de stockage. Que ce soit pour des données temporaires, des fichiers partagés, ou un stockage persistant, les options offertes par Kubernetes permettent aux développeurs d’accéder facilement aux ressources nécessaires pour faire fonctionner leurs applications de manière efficace. En adaptant le type de volume aux exigences spécifiques de votre application, vous pouvez tirer le meilleur parti de la gestion des données dans des environnements flexibles et dynamiques.





1. Nous contactez


2. Infra as a Service

  • Description: Infrastructure cloud évolutive et sécurisée
  • Links:

3. Projets Développeurs


4. Développeurs


5. Formations Complètes


6. Marketplace

7. Blogs


This website is powered by ItGalaxy.io