Un Kubernetes persistent volume (PV) è un oggetto che consente ai pod di accedere allo storage persistente su un dispositivo di storage, definito tramite una Kubernetes StorageClass. A differenza dei volumi normali, che sono di natura transitoria, i PV sono persistenti e supportano casi d'uso di applicazioni stateful. Un PV è un oggetto risorsa in un cluster Kubernetes che continua a esistere anche dopo che i pod che lo utilizzano sono stati distrutti.
I PV devono essere richiesti tramite persistent volume claim (PVC), ovvero richieste di storage. Una PVC è essenzialmente una richiesta di montare un PV che soddisfi determinati requisiti su un pod. Le PVC non specificano un PV specifico; invece, specificano quale StorageClass richiede il pod. Gli amministratori possono definire StorageClasses che indicano le proprietà dei dispositivi di storage, come prestazioni, livelli di servizio e policy di back-end.
Uno dei principali vantaggi del modello PVC in Kubernetes è che consente agli sviluppatori di richiedere dinamicamente risorse di storage, senza essere a conoscenza dell'implementazione dei dispositivi di storage sottostanti.
Contenuti correlati: Leggi la nostra guida a Kubernetes StorageClass
In questo articolo:
Per associare un pod a un PV, il pod deve contenere un volume mount e un PVC. Queste dichiarazioni consentono agli utenti di montare i PV nei pod senza conoscere i dettagli dello storage sottostante.
Esistono due opzioni per montare i PV su un pod:
Contenuti correlati: Leggi la nostra guida a Kubernetes shared storage
Questo tutorial illustra come funzionano PV e PVC. È un riassunto del tutorial completo disponibile nella documentazione di Kubernetes.
1. Configurazione di un nodo
Configura un cluster Kubernetes con un singolo nodo e assicurati che la riga di comando kubectl abbia una connessione al piano di controllo. Crea una directory sul nodo come questa:
sudo mkdir /mnt/data
Crea un file index.html nella directory.
2. Creazione di un volume persistente
Crea un file YAML come il seguente per definire un PV.
Esegui questo comando per creare il PV sul tuo nodo:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml
3. Creazione di una richiesta di volume persistente e associazione a un volume persistente
Creare un PVC che richiede un PV, soggetto alle seguenti condizioni per corrispondere al PV creato in precedenza:
Esegui questo comando per applicare il PVC:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
Quando si crea una richiesta di volume persistente, il piano di controllo di Kubernetes trova il PV corretto. Se trovato, associa il PVC al PV.
Controlla lo stato del PV creato in precedenza eseguendo:
kubectl get pv task-pv-volume
Se il binding ha esito positivo, l'output dovrebbe apparire così:
4. Creazione di un pod e montaggio del claim del volume persistente
Infine, crea un pod che utilizza il PVC. Esegui il pod con l'immagine NGINX, specificando il PVC creato in precedenza nella sezione pertinente delle specifiche del pod:
Utilizza un comando bash per installare curl nel tuo pod ed esegui questo comando:
curl http://localhost/
L'output dovrebbe visualizzare il contenuto del file index.html creato nel passaggio 1. Dovrebbe mostrare che il nuovo pod può accedere ai dati nel PV tramite il PVC.
Il PVC di Kubernetes può essere complesso da utilizzare, causando errori che possono essere difficili da diagnosticare e risolvere. Gli errori PVC sono generalmente correlati a tre grandi categorie: problemi con la creazione dei PV, problemi con il provisioning dei PV e modifiche alle specifiche di PV o PVC.
Gli errori più comuni relativi ai PVC sono FailedAttachVolume, FailedMount e CrashLoopBackOff.
Questi due errori indicano che un pod non è riuscito a montare un PV. La differenza è che FailedAttachVolume si verifica quando un volume non riesce a staccarsi da un nodo precedente, e FailedMount si verifica quando un volume non riesce a montare il percorso richiesto.
Ci sono numerose possibili cause di questi due errori, tra cui un errore sul nuovo nodo, troppi dischi collegati al nuovo nodo, un errore di partizionamento della rete e un guasto dei dispositivi di storage sul nodo precedente.
Diagnosi del problema
Per diagnosticare la causa di problemi come FailedAttachVolume e FailedMount, esegui il comando describe pod e cerca nella sezione Events il messaggio che indica un errore. Il messaggio dovrebbe anche fornire informazioni sulla causa.
Risolvere il problema
Kubernetes non può risolvere automaticamente gli errori FailedAttachVolume e FailedMount, quindi sarà necessario gestire il problema manualmente:
CrashLoopBackOff indica che un pod si è bloccato, si è riavviato e si è bloccato di nuovo ripetutamente. In alcuni casi, questo errore si verifica a causa di PersistentVolumeClaims corrotti.
Diagnosi del problema
Per identificare se un errore CrashLoopBackOff è dovuto a un PVC, controlla i log dell'istanza del container precedente che ha montato il PV, controlla i log di distribuzione e, se necessario, esegui una shell sul container per identificare perché si sta arrestando.
Risolvere il problema
Se CrashLoopBackOff è il risultato di un problema con un PVC, prova i seguenti passaggi:
kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment
exec -it volume-debugger sh
NetApp Cloud Volumes ONTAP, la soluzione leader nella gestione dello storage enterprise, offre servizi di gestione dello storage sicuri e comprovati su AWS, Azure e Google Cloud. La capacità di Cloud Volumes ONTAP può scalare nell'ordine dei petabyte e supporta vari casi d'utilizzo come file services, database, DevOps o qualsiasi altro carico di lavoro aziendale, con un solido set di funzionalità tra cui high availability, data protection, storage efficiencies, integrazione con Kubernetes e altro ancora.
In particolare, Cloud Volumes ONTAP supporta il provisioning e la gestione dei volumi persistenti di Kubernetes per i carichi di lavoro containerizzati.
Scopri di più su come Cloud Volumes ONTAP aiuta ad affrontare le sfide delle applicazioni containerizzate in questi Kubernetes Workloads with Cloud Volumes ONTAP Case Studies.