Skip to Content

Che cos'è un volume persistente Kubernetes?

La gestione dello storage per le applicazioni stateful è un aspetto cruciale dell'orchestrazione dei container. Kubernetes Persistent Volume (PV) è una funzionalità fondamentale che soddisfa questa esigenza fornendo un meccanismo per gestire le risorse di storage in modo indipendente dal ciclo di vita dei singoli pod. In questo articolo approfondiremo il concetto di Kubernetes Persistent Volume, le sue caratteristiche e le best practice per utilizzarlo efficacemente nei cluster Kubernetes.

Che cos'è Kubernetes Persistent Volume?

Un volume persistente Kubernetes (PV ) è una risorsa di storage in un cluster Kubernetes che astrae la tecnologia di storage sottostante. A differenza dello storage temporaneo, che è legato al ciclo di vita di un pod e scompare quando il pod viene terminato, le PV forniscono un modo per gestire e allocare lo storage persistente alle applicazioni. Ciò garantisce che i dati rimangano intatti anche se i pod che vi accedono vengono terminati o ripianificati.

L'utilizzo di volumi persistenti offre vantaggi quali:

  • Astrazione dallo storage: Le PV nascondono le specifiche dello storage fisico (ad es. dischi locali, SAN, storage cloud) dai pod. Gli utenti possono richiedere lo storage senza dover conoscere i dettagli specifici dell'implementazione.
  • Persistenza: Le PV garantiscono la persistenza dei dati anche durante il riavvio o la riprogrammazione dei pod. Immagina un pod di server web che utilizzi lo storage effimero per archiviare i log temporanei. Quando il pod viene riavviato, i registri vengono persi. Lo storage persistente, invece, garantisce che i dati, come quelli delle applicazioni gestiti da un pod di database, rimangano intatti.
  • Disaccoppiamento dello storage dai pod: Questa separazione consente una maggiore flessibilità e controllo sulle risorse di storage. I pod possono essere facilmente scalati verso l'alto o verso il basso senza influire sullo storage sottostante.

Caratteristiche principali dei volumi persistenti Kubernetes

I volumi persistenti di Kubernetes offrono diverse funzionalità chiave che li rendono potenti e adattabili alle diverse esigenze di storage:

Classi di storage

Le classi di storage agiscono come modelli che definiscono diversi tier o categorie di storage disponibili in un cluster. Possono specificare caratteristiche come le performance (ad esempio, SSD e HDD), la capacità, la durata e i costi. Ciò consente agli amministratori di eseguire il provisioning dello storage in base ai requisiti specifici delle applicazioni.

Modalità di accesso

Le modalità di accesso definiscono il modo in cui i pod possono interagire con lo storage fornito da una PV. Ecco una descrizione dettagliata delle modalità più comuni:

  • ReadWriteOnce (RWO): Solo un pod alla volta può montare il volume con autorizzazioni di lettura-scrittura. Ciò garantisce l'integrità dei dati per le applicazioni che richiedono un accesso esclusivo in scrittura, come una replica del database primario.
  • ReadOnlyMolti (ROX): Più pod possono montare il volume contemporaneamente, ma solo in modalità di sola lettura. Ciò è utile per gli scenari in cui le applicazioni devono accedere ai dati condivisi senza modifiche, come un file di configurazione o un repository di log.
  • ReadWriteMolti (RWX): Più pod possono montare il volume con autorizzazioni di lettura-scrittura. Questa modalità di accesso deve essere utilizzata con cautela a causa di potenziali incoerenze dei dati se più pod scrivono contemporaneamente. È ideale per casi d'uso specifici come cache condivise o strumenti di editing collaborativo.

Politiche di recupero

Le policy di recupero stabiliscono il modo in cui Kubernetes gestisce una PV dopo che non è più legata a un pod. Le policy principali includono:

  • Conservare: La PV rimane dopo che il pod si è sbloccato, consentendo l'amministrazione manuale per un potenziale utilizzo o migrazione futuri.
  • Riciclaggio: Kubernetes ricicla la PV. Ciò comporta in genere la cancellazione dei dati esistenti e la disponibilità dello storage per le assegnazioni future dei pod.
  • Elimina: L'oggetto PV e la relativa risorsa di storage sottostante vengono completamente eliminati. Usalo con cautela, perché il ripristino dei dati potrebbe non essere possibile.

Plug-in per volumi

Kubernetes sfrutta i plug-in di volume per colmare il divario tra la piattaforma e vari provider di storage. Questi plug-in consentono a Kubernetes di comprendere e interagire con diversi backend di storage, tra cui storage locale, soluzioni NAS (Network Attached Storage) come NFS o iSCSI e servizi di storage specifici per provider cloud come AWS EBS o GCE Persistent Disk. Questa architettura plug-in offre una notevole flessibilità nella scelta e nell'integrazione delle soluzioni di storage con il cluster Kubernetes.

Provisioning di volumi persistenti

Kubernetes offre due metodi principali per il provisioning dei volumi persistenti (PV): il provisioning statico e il provisioning dinamico. Ogni approccio si adatta a diversi casi d'uso e offre vantaggi distinti.

Provisioning statico

Nel provisioning statico, gli amministratori dei cluster creano e configurano manualmente le PV in anticipo. Questo approccio fornisce un controllo granulare sulla configurazione dello storage ed è adatto per scenari con requisiti di storage ben definiti che non cambiano di frequente. Per eseguire il provisioning statico di una PV:

1. Definisci i dettagli dello storage: Determinare la capacità di storage, le modalità di accesso (ReadWriteOnce, ReadOnlyMany, ReadWriteMany), i criteri di recupero (Retain, Recycle, Delete) e le specifiche del plug-in di volume (ad esempio, l'indirizzo del server per NFS).

2. Crea l'oggetto PV utilizzando YAML: Utilizzare un file manifest YAML per definire la configurazione PV. Ecco un esempio di utilizzo dello storage NFS:

apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: my-pv-nfs
 spec:
   capacity:
     storage: 10Gi
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   nfs:
     path: /path/to/nfs/share
     server: nfs-server.example.com

  • nome: Nome univoco per PV PV.
  • storage: Capacità di storage desiderata (ad es. 10Gi per 10 Gigabyte).
  • modalità di accesso: Scegli la modalità di accesso appropriata in base ai requisiti dell'applicazione.
  • persistentVolumeReclaimPolicy: Definisci in che modo Kubernetes dovrebbe gestire la PV dopo che è stata liberata da un pod.
  • nfs.path: Percorso alla condivisione NFS sul server NFS.
  • server nfs.: Indirizzo IP o nome host del server NFS.

3. Applicare il manifesto YAML: Usa il comando kubectl apply -f per creare l'oggetto PV nel cluster Kubernetes.

Provisioning dinamico

Il provisioning dinamico sfrutta StorageClasses per automatizzare la creazione di PV. Gli amministratori definiscono le classi di storage che specificano le caratteristiche di storage desiderate e consentono a Kubernetes di gestire la creazione di PV on demand quando un PersistentVolumeClaim (PVC) richiede lo storage. Per utilizzare il provisioning dinamico:

1. Definizione di una classe di storage: Creare un manifesto YAML StorageClass che specifichi il provisioning, il tipo di storage (es. SSD, HDD) e gli eventuali parametri aggiuntivi richiesti dal provisioning. Ecco un esempio per AWS EBS:

apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: standard-ebs
 provisioner: kubernetes.io/aws-ebs
 parameters:
   type: gp2

  • nome: Nome univoco per StorageClass.
  • provisioning: Nome del plug-in del provisioning dello storage (ad esempio, kubernetes.io/aws-ebs per AWS EBS).
  • parameters.type: Tipo di storage all'interno del provisioning (ad esempio, gp2 per un tipo di volume SSD generico in AWS EBS).

2. Applica il manifesto StorageClass: Usa kubectl apply -f per creare l'oggetto StorageClass nel cluster.

Associazione dei volumi persistenti ai pod

Il legame di una PV a un pod consente alle applicazioni di sfruttare lo storage persistente. Questo legame si ottiene in genere tramite un PersistentVolumeClaim (PVC ).

    Un PVC agisce come una richiesta di storage inviata da un pod. Specifica i requisiti di storage di un pod, tra cui:

  • Modalità di accesso: Definisce il modo in cui il pod può interagire con lo storage (ad esempio, ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
  • Capacità di storage: La quantità di storage desiderata per il pod.
  • StorageClassName (opzionale): Fa riferimento a una classe di storage per il provisioning dinamico.

    Esistono due metodi principali per legare le PV ai pod:

  • Legame statico: Nel binding statico, gli amministratori creano manualmente un PVC che fa riferimento esplicito a una PV con pre-provisioning. Il PVC e il PV devono avere attributi compatibili, come la corrispondenza delle modalità di accesso e una capacità di storage sufficiente nel PV, per soddisfare la richiesta del PVC.
  • binding dinamico: Il binding dinamico sfrutta StorageClasses per la creazione automatizzata di PV. Quando viene distribuito un pod con un PVC che fa riferimento a una classe di storage, Kubernetes cerca una PV adatta (esistente o di nuova fornitura in base alla classe di storage) che soddisfi i requisiti del PVC. Se viene trovata una PV adatta, Kubernetes lega automaticamente PV e PVC insieme.

Ecco un esempio di pod denominato "pod-example" che utilizza un PVC denominato "pvc-example":

apiVersion: v1
 kind: Pod
 metadata:
   name: pod-example
 spec:
   containers:
   - name: app
     image: nginx
     volumeMounts:
     - mountPath: "/usr/share/nginx/html"
       name: pvc-storage
   volumes:
   - name: pvc-storage
     persistentVolumeClaim:
       claimName: pvc-example

In questo esempio, il pod monta il PVC denominato "pvc-esempio" in corrispondenza del percorso "/usr/share/nginx/html" all'interno del container. Ciò consente al pod di accedere e gestire i dati persistenti memorizzati nella PV sottostante.

Gestione dei volumi persistenti

È essenziale gestire efficacemente i volumi persistenti (PV) per mantenere un utilizzo dello storage efficiente e scalabile nel cluster Kubernetes. Alcuni aspetti chiave della gestione della PV includono:

1. Ridimensionamento dei volumi persistenti

Kubernetes v1.11 ha introdotto la possibilità di ridimensionare le PV. In questo modo puoi regolare dinamicamente la capacità di storage allocata a una PV, in base ai requisiti di storage in continua crescita delle tue applicazioni. 

Per ridimensionare un PV, aggiorna la richiesta di storage del PVC: Modificare il PVC che fa riferimento alla PV e modificare il valore di storage all'interno della sezione Risorse.richiede della specifica YAML del PVC. Ad esempio, per aumentare le dimensioni di un PVC denominato "pvc-esempio" a 20Gi, aggiornare il manifesto YAML:

apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
   name: pvc-example
 spec:
   resources:
     requests:
       storage: 20Gi

Una volta aggiornata la richiesta di storage del PVC, Kubernetes tenta di ridimensionare lo storage sottostante fornito per il PV. Il ridimensionamento di una PV è generalmente un'operazione unidirezionale (espansione dello storage). La riduzione delle dimensioni di una PV non è supportata a causa di potenziali problemi di perdita di dati.

2. Eliminazione dei volumi persistenti

Per eliminare una PV, assicurati che non sia attualmente legata ad alcun PVC. Non è possibile eliminare una PV utilizzata da un PVC per evitare la perdita di dati. Ecco come eliminare una PV:

kubectl delete pv pv-example

Sostituisci l'esempio pv con il nome effettivo della PV che desideri eliminare.

3. Aggiornamento dei volumi persistenti

Sebbene la capacità di storage di base non possa essere modificata direttamente all'interno di un oggetto PV, è possibile aggiornare alcuni campi di metadati di una PV, come etichette o annotazioni. Queste etichette e annotazioni possono essere utilizzate per organizzare, identificare e gestire meglio le PV all'interno del cluster.

Best practice per l'utilizzo dei volumi persistenti Kubernetes

Di seguito sono riportate alcune delle best practice da seguire per ottenere il massimo dai volumi persistenti Kubernetes:

  • Seleziona le classi di storage appropriate: Scegli classi di storage che soddisfano i requisiti di performance e durata delle tue applicazioni. Ad esempio, utilizza lo storage con supporto SSD per le applicazioni a performance elevate e lo storage con supporto HDD per scopi di archiviazione.
  • Configura correttamente le modalità di accesso: Seleziona la modalità di accesso appropriata per la tua PV in base alle esigenze delle tue applicazioni per accedere allo storage. Ad esempio, è possibile utilizzare RWX per i file system condivisi e RWO per i database a istanza singola.
  • Implementa le policy di recupero con saggezza: Imposta policy di recupero che si adattino alla tua strategia di gestione del ciclo di vita dei dati. Utilizza la policy Retain per i dati critici che richiedono un intervento manuale prima dell'eliminazione.
  • Monitoraggio e registrazione: Utilizza gli strumenti di monitoraggio e registrazione per monitorare l'utilizzo, le performance e lo stato di salute delle PV. Strumenti come Prometheus e Grafana possono fornire preziose informazioni approfondite sull'infrastruttura di storage.
  • Usa Portworx ® per una gestione avanzata dei dati: Per la gestione avanzata dei dati e le soluzioni di storage persistente in Kubernetes, considera l'utilizzo di Portworx di Pure Storage. Portworx offre funzionalità come alta disponibilità, disaster recovery e backup progettati specificamente per le applicazioni containerizzate.

Conclusione

I volumi persistenti (PV) di Kubernetes offrono un meccanismo fondamentale per la gestione dello storage nelle applicazioni stateful. Sfruttando le PV, puoi garantire la persistenza dei dati, l'alta disponibilità e un utilizzo efficiente dello storage all'interno del cluster Kubernetes. Soluzioni come Portworx di Pure Storage offrono un modo intuitivo per sfruttare i vantaggi dei volumi persistenti di Kubernetes. Con funzionalità come alta disponibilità, disaster recovery e backup che utilizzano l'intelligenza artificiale per migliorare l'efficienza, Portworx è la soluzione di storage persistente Kubernetes ideale per le applicazioni containerizzate.

Potrebbe interessarti anche...

02/2025
Deploying Portworx on Google Distributed Cloud Anthos with vSphere
This Portworx reference architecture contains a validated architecture and design model to deploy Portworx on Anthos running on vSphere.
Reference architecture
28 pages

Scopri le risorse e gli eventi chiave

PURE//ACCELERATE® 2025
Registrati per provare Pure//Accelerate.

Lasciati ispirare, impara dagli innovatori e migliora le tue competenze per sfruttare al meglio i dati.

Scopri gli eventi
ROADSHOW PURE//ACCELERATE
Stiamo per arrivare in una città vicino a te. Scopri dove.

Vivi in prima persona tutto il potenziale della piattaforma di storage dati più avanzata al mondo e di un enterprise data cloud.

Registrati
VIDEO
Guarda: Il valore di un Enterprise Data Cloud (EDC).

Charlie Giancarlo spiega perché il futuro è nella gestione dei dati, non dello storage. Scopri in che modo un approccio unificato trasforma le operazioni IT aziendali.

Guarda
RISORSA
Lo storage legacy non può alimentare il futuro.

I workload moderni richiedono velocità, sicurezza e scalabilità AI-ready. Il tuo stack è pronto?

Effettua la valutazione
Il browser che stai usando non è più supportato.

I browser non aggiornati spesso comportano rischi per la sicurezza. Per offrirti la migliore esperienza possibile sul nostro sito, ti invitiamo ad aggiornare il browser alla versione più recente.