Agence web » Actualités du digital » Comment ajouter un stockage persistant aux pods Kubernetes –

Comment ajouter un stockage persistant aux pods Kubernetes –

Les systèmes de fichiers Kubernetes Pod sont éphémères par défaut. Ceci est conforme à la nature apatride des conteneurs. Les données persistantes doivent être stockées à l’extérieur du conteneur, même si elles semblent être dans le système de fichiers du conteneur. Voici comment provisionner un stockage persistant dans Kubernetes.

L’unité de base du stockage persistant Kubernetes est un volume persistant. Ceci est une abstraction sur le volume le plus fondamental.

Les volumes persistants existent indépendamment de tout pod spécifique. De la même manière que les volumes Docker simples, les volumes persistants de Kubernetes peuvent rester dans votre cluster même si aucun pod ne les utilise.

Les pods ont accès aux volumes persistants en créant un Réclamation de volume persistant. Il s’agit d’un autre type de ressource qui représente la demande d’un pod d’utiliser le stockage persistant. La revendication gère l’approvisionnement des volumes persistants qui satisfont la demande.

Un exemple de base

Voyons comment créer un système de stockage persistant en configurant manuellement une revendication de volume persistant et de volume persistant. Chaque ressource ira dans son propre fichier manifeste. Vous pouvez appliquer ces fichiers à votre cluster avec kubectl apply.

Créer un volume persistant

Commencez par créer votre volume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-volume
  namespace: pvc-demo
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

Cette définition crée un volume appelé my-volume. Il a une capacité de 2Gi et sera stocké à /mnt/data sur le nœud hôte. Parce que nous créons ce volume manuellement, le storageClassName est réglé sur manual. Les classes de stockage peuvent être utilisées pour exiger que les volumes soient uniquement liés aux revendications de volume demandant la même classe.

Créer une revendication de volume persistant

Vous pouvez maintenant configurer une revendication de volume persistant:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-volume-claim
  namespace: pvc-demo
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

La réclamation demande 1Gi de stockage à partir d’un volume utilisant le manual classer. Le volume que nous avons créé précédemment peut remplir ces conditions. Lorsque la revendication est créée, Kubernetes doit s’en rendre compte et lier la revendication au volume.

Si vous inspectez les détails du volume et de la revendication, vous verrez qu’ils affichent tous les deux un statut de Bound.

kubectl get pv my-volume
kubectl get pvc my-volume-claim

Ajouter un pod

La dernière étape consiste à utiliser votre revendication de volume pour ajouter du stockage persistant à un pod.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: pvc-demo
spec:
  containers:
    - name: my-container
      image: my-image:latest
      volumeMounts:
        - mountPath: /path/in/container
          name: my-pod-volume
  volumes:
    - name: my-pod-volume
      persistentVolumeClaim:
        claimName: my-volume-claim

Dans le volumes section, une référence à la revendication de volume persistant est configurée. Vous n’avez pas besoin de spécifier d’autres informations sur le volume. Le pod utilisera la revendication, qui fournira le volume auquel il est lié.

La revendication est référencée dans volumeMounts. Assurez-vous d’utiliser le même nom dans volumes et volumeMounts. Le volume sera monté dans votre pod à l’emplacement spécifié par mountPath.

Votre pod dispose désormais d’un stockage persistant. Tout ce qui est écrit sur /path/in/container sera stocké dans le volume persistant. La revendication de volume persistant sera réutilisée par les nouveaux pods qui la référencent, permettant aux données de survivre à n’importe quel pod individuel.

Classes de stockage

le manual La classe de stockage est utilisée lorsque vous créez vos propres manifestes de revendication de volume et de volume. Différents pilotes de plug-in de volume fournissent leurs propres classes de stockage. Faites référence à la classe de stockage qui représente le type de volume que vous souhaitez utiliser.

Les services Kubernetes gérés fournissent généralement leurs propres classes de stockage qui correspondent à l’implémentation du stockage par blocs de la plate-forme. Les exemples comprennent gcePersistentDisk avec Google Kubernetes Engine, ou do-block-storage avec DigitalOcean Managed Kubernetes.

Dans ces scénarios, vous n’avez pas besoin de créer le PersistentVolume manifeste manuellement. Créer un PersistentVolumeClaim avec le bon storageClassName et utilisez le resources.requests.storage (illustré ci-dessus) pour spécifier la capacité souhaitée. Le pilote de stockage liera automatiquement la revendication à une instance de volume compatible.

Modes d’accès

Il existe trois valeurs prises en charge pour le accessModes champ:

  • ReadWriteOnce – Le volume ne peut être monté que sur un seul nœud Kubernetes. Ce nœud aura un accès complet en lecture-écriture au volume.
  • ReadOnlyMany – Le volume peut être consommé par plusieurs nœuds simultanément. Chaque nœud a un accès en lecture seule (rien ne peut écrire sur le volume).
  • ReadWriteMany – Le volume peut être monté sur plusieurs nœuds simultanément. Chaque nœud peut lire et écrire sur le volume.

Un seul mode d’accès peut être utilisé par un volume donné à la fois. Cela signifie que deux revendications de volume ne seront liées au même volume que si les deux revendications déclarent le même mode d’accès.

Le mode d’accès de vos volumes affecte la capacité du planificateur Kubernetes à répartir les répliques de vos pods sur plusieurs nœuds. le ReadOnlyMany/ReadWriteMany les modes doivent être utilisés si vous avez besoin de pods pour partager le stockage persistant et être répliqué sur plusieurs nœuds.

Sachez que tous les pilotes de stockage ne prennent pas en charge tous les modes d’accès – vous devez vérifier auprès du fournisseur de votre plugin. Une liste non exhaustive des plugins de volume et des modes d’accès compatibles est fournie dans la documentation de Kubernetes.

Conclusion

Le stockage persistant dans Kubernetes n’est pas aussi intimidant qu’il n’y paraît à première vue. Assurez-vous que les pods qui ont besoin d’accéder au stockage ont des volumes qui sont liés à une revendication de volume persistant.

Lorsque des revendications de volume persistant sont utilisées, Kubernetes crée des volumes persistants qui survivent à des pods individuels. Lorsque vos pods sont remplacés, les volumes revendiqués seront automatiquement montés dans les nouveaux pods. Les données ne seront pas détruites tant que la réclamation n’aura pas été supprimée.

★★★★★