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.
Sommaire
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.