Introduzione
Kubernetes è una delle soluzioni di orchestrazione più popolari per l'hosting di container in un ambiente di produzione. La piattaforma consente agli utenti di automatizzare la distribuzione di numerose istanze di un'applicazione aumentando e riducendo al contempo la scalabilità in base alla domanda.
Tuttavia, a causa della natura volatile dei pod Kubernetes, i volumi di archiviazione dovevano essere risolti con un approccio completamente nuovo.
Questo articolo spiega cosa sono i volumi persistenti Kubernetes e perché sono così significativi.
Cosa sono i volumi persistenti di Kubernetes
I volumi persistenti Kubernetes sono volumi di archiviazione forniti dall'utente assegnati a un cluster Kubernetes. Il ciclo di vita dei volumi persistenti è indipendente da qualsiasi pod che lo utilizzi. Pertanto, i volumi persistenti sono perfetti per i casi d'uso in cui è necessario conservare i dati indipendentemente dal processo di vita imprevedibile dei pod Kubernetes.
Senza volumi persistenti, mantenere i servizi comuni come un database sarebbe impossibile. Ogni volta che un pod viene sostituito, i dati acquisiti durante il ciclo di vita di quel pod andrebbero persi. Tuttavia, grazie ai volumi persistenti, i dati sono contenuti in uno stato coerente.
Tipi di volumi Kubernetes
Per capire cosa sono i volumi persistenti, dobbiamo prima spiegare come differiscono i tipi di volume. Esistono diversi tipi di volumi che puoi utilizzare in un pod Kubernetes:
- Memoria locale del nodo (
emptyDir
ehostPath
) - Volumi cloud (ad es.
awsElasticBlockStore
,gcePersistentDisk
, eazureDiskVolume
) - Volumi di condivisione file, come Network File System (
nfs
) - Sistemi di file distribuiti (ad es.
cephfs
,rbd
eglusterfs
) - Tipi di volume speciali come
PersistentVolumeClaim
,secret
egitRepo
Entrambi emptyDir
e hostPath
sono collegati al pod, archiviati nella RAM o nella memoria permanente su un'unità. Poiché dipendono dal pod, il loro contenuto è disponibile finché il pod è in esecuzione. Se va giù, i dati sono persi.
Con volumi cloud , nfs
e PersistentVolumeClaim
, il volume è indipendente e posizionato all'esterno della capsula. Sebbene siano essenzialmente tutti progettati per preservare i dati, volumi cloud sono molto più difficili da gestire. Per connettere il pod al provider, l'utente deve conoscere molti dettagli di archiviazione.
I file system di rete ei volumi persistenti sono molto più pratici. In effetti, questi due tipi di volume funzionano secondo gli stessi principi.
NFS ti consente di connetterti a un volume tramite un yaml file. Senza il pod, il contenuto del volume viene smontato ma rimane disponibile. Tuttavia, anche per le configurazioni NFS devi inviare un Persistent Volume Claim (PVC) richiesta.
Pertanto,Le dichiarazioni di volume persistenti sono la soluzione principale per i volumi persistenti in Kubernetes.
Cosa sono le richieste di volume persistenti
Le attestazioni di volume persistenti sono oggetti che si connettono a volumi di archiviazione back-end tramite una serie di astrazioni. Richiedono le risorse di archiviazione di cui la tua distribuzione ha bisogno.
Il vantaggio principale è che le PVC sono molto più intuitive, consentendo agli sviluppatori di utilizzarle senza dover conoscere troppi dettagli dell'ambiente cloud a cui si stanno connettendo. L'amministratore elenca i dettagli completi del reclamo nella PVC, ma il pod stesso richiede solo un collegamento per accedervi.
Pertanto, un pod che utilizza un volume persistente include anche un numero di livelli astratti tra esso e lo storage.
Utilizzo di volumi persistenti
Per associare un pod con un volume persistente, è necessario includere i montaggi del volume e un'attestazione di volume persistente (PVC). Queste affermazioni consentono agli utenti di montare un volume persistente in un pod senza dover conoscere i dettagli dell'ambiente cloud.
Nell'attestazione di volume persistente, gli utenti specificano quanto vogliono che sia lo spazio di archiviazione, il selettore, indirizzando al PV appropriato e la classe di archiviazione. La classe di archiviazione si riferisce al tipo di provisioning, statico o dinamico.
Approvvigionamento statico è una funzionalità in cui gli amministratori utilizzano i dispositivi di archiviazione esistenti e li rendono disponibili per gli utenti del cluster. L'amministratore del cluster crea diversi volumi persistenti che sono disponibili per il consumo ed esistono nell'API Kubernetes.
Provisioning dinamico si verifica quando nessuno dei volumi persistenti statici corrisponde alla PVC. In questo caso, il provisioning si basa su classi di storage, create e configurate dagli amministratori.
Il ciclo di vita dei volumi persistenti
Una volta eliminata la PVC, rilasci il PV della sua richiesta. A seconda della politica di recupero impostata, il volume verrà trattenuto, riciclato o eliminato.
- Se imposti la norma sui reclami su conserva , il volume nella memoria rimane anche una volta liberato dal reclamo.
- In alternativa, puoi riciclare il volume, che cancella il contenuto al suo interno e lo rende disponibile per altre PVC.
- Avere la norma di reclamo configurata per eliminare una volta scollegato dal PVC significa che il volume e lo stoccaggio vengono rimossi completamente.
Come creare un volume persistente
1. Per creare un volume persistente, inizia creando un .yaml file nell'editor di tua scelta. In questo esempio chiamiamo il file example-pv.yaml e modificalo con il nano editor:
nano example-pv.yaml
2. Aggiungi il seguente contenuto al file:
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. Sostituisci le specifiche di name
, storage
, mountpath
e volumeID
con i tuoi valori rispettati.
4. Salva ed esci dal file.
5. Quindi, distribuisci il volume persistente utilizzando il comando seguente con il nome del file .yaml creato nel passaggio precedente:
kubectl create -f example-pv.yaml
Come creare una richiesta di volume persistente
Come per il PV, crei una PVC con un .yaml file costituito dal seguente contenuto:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: [pvc_name]
spec:
storageClassName: manual
selector:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Con il contenuto aggiunto, salva ed esci dal file.
Dopo aver impostato e configurato il volume persistente e la richiesta di volume persistente, puoi specificare la PVC nel pod richiesto.