Menu

Per questa pagina è stata utilizzata la traduzione automatica. Alcuni contenuti potrebbero non essere perfetti.

Condividi feedback

Kubernetes Persistent Volume Claims spiegate

Sommario

Condivi questa pagina

Yifat Perry
Yifat Perry

Cosa sono i Kubernetes Persistent Volumes e Persistent Volume Claims?

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:

Persistent Volume Claims: provisioning statico vs. dinamico

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:

  • La configurazione statica prevede che gli amministratori creino manualmente i PV e definiscano una StorageClass che corrisponda ai criteri di questi PV. Quando un pod utilizza un PVC che specifica la StorageClass, ottiene l'accesso a uno di questi PV statici.
  • La configurazione dinamica si verifica quando non esiste un PV statico che corrisponde al PVC. In questo caso, il cluster Kubernetes fornisce un nuovo PV in base alle definizioni di StorageClass.

Contenuti correlati: Leggi la nostra guida a Kubernetes shared storage

Creazione di una Persistent Volume Claim e associazione a un Persistent Volume

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.

k8s pvc 1

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:

  • 3 GB o più di capacità di storage
  • Abilita l'accesso in lettura/scrittura
k8s pvc 2

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ì:

k8s pvc 3

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:

k8s pvc 4

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.

Errori PVC di Kubernetes: cause comuni e risoluzione [C]

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.

FailedAttachVolume and FailedMount Errori

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:

  • Se la causa dell'errore è Failure to Detach- usa l'interfaccia del dispositivo di storage per scollegare manualmente il volume.
  • Se l'errore è Failure to Attach or Mount- verificare la presenza di un problema di partizionamento di rete o di un percorso di rete errato. Se questo non è il problema, provare a far pianificare il pod a Kubernetes su un altro nodo oppure analizzare e risolvere il problema sul nuovo nodo.

CrashLoopBackOff Errori derivanti dal PersistentVolumeClaim

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:

  1. Ridimensiona la distribuzione a 0 istanze per abilitare il debug.
  2. Ottieni l'identificatore del PVC non riuscito utilizzando questa query:
    kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment 
    
  3. Crea un nuovo pod per il debug ed esegui una shell utilizzando questo comando:
    exec -it volume-debugger sh
    
  4. Identifica il volume attualmente montato nella directory /data e risolvi il problema che causa l'arresto anomalo del pod.
  5. Esci dalla shell, elimina il pod di debug e ridimensiona la distribuzione al numero di repliche richiesto.

Ottimizzazione dello storage Kubernetes con Cloud Volumes ONTAP

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.

Drift chat loading