Archiviazione

Questa pagina spiega i concetti di archiviazione di GKE su VMware.

Riepilogo

GKE su VMware si integra con sistemi di archiviazione a blocchi o di file esterni tramite:

  • Driver vSphere Container Storage Interface (CSI)
  • Driver CSI di terze parti
  • Plug-in di volumi in-tree Kubernetes

Datastore vSphere

Quando crei un cluster di amministrazione, specifichi un datastore vSphere esistente per i dati etcd del cluster.

Quando crei un cluster utente, puoi utilizzare lo stesso datastore del cluster di amministrazione oppure specificare un datastore diverso. Puoi anche specificare datastore per singoli pool di nodi.

I datastore vSphere utilizzati dai cluster di amministrazione e utente possono essere supportati da NFS, vSAN o VMFS su un dispositivo a blocchi, ad esempio un array di archiviazione esterno. In un ambiente multi-host, ogni dispositivo a blocchi deve essere collegato a tutti gli host nell'ambiente e il datastore deve essere configurato su ciascun host tramite l'opzione Monta Datastore su host aggiuntivi.

StorageClasses

Quando crei un'PersistentVolumeClaim, puoi specificare un oggetto StorageClass che fornisce informazioni su come verrà eseguito il provisioning dello spazio di archiviazione. Se non specifichi un valore StorageClass, viene utilizzato il valore predefinito di StorageClass.

StorageClass del cluster di amministrazione

Nei cluster di amministrazione, è presente un oggetto StorageClass denominato standard, indicato come StorageClass predefinito. Il oggetto StorageClass standard elenca il plug-in di volume vSphere in-tree come provisioner.

Per visualizzare il valore di StorageClass standard:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \
    standard --output yaml

Nell'output, puoi vedere che standard è l'oggetto StorageClass predefinito e che il provisioner è il plug-in di volume vSphere in-tree, kubernetes.io/vsphere-volume. Puoi anche vedere il nome di un datastore vSphere.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  ...
  labels:
    bundle.gke.io/component-name: admin-storage-class
  name: standard
...
parameters:
  datastore: vsanDatastore
provisioner: kubernetes.io/vsphere-volume
...

StorageClass del cluster utente

Nei cluster utente, è presente un oggetto StorageClass denominato standard e un altro StorageClass denominato standard-rwo.

StorageClass standard-rwo è designato come StorageClass predefinito ed elenca il driver CSI vSphere come provisioner.

Per visualizzare il valore di StorageClass standard-rwo:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \
    standard-rwo --output yaml

Nell'output, puoi vedere che standard-rwo è l'oggetto StorageClass predefinito e che il provisioner è il driver CSI di vSphere, csi.vsphere.vmware.com. Puoi anche visualizzare l'URL di un datastore vSphere:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
    ...
  labels:
    bundle.gke.io/component-name: user-vsphere-csi-driver-addon
    ...
  name: standard-rwo
...
parameters:
  datastoreURL: ds:///vmfs/volumes/vsan:52fb6ca22be2454e-e67f620175964a9f/
provisioner: csi.vsphere.vmware.com
...

Plug-in di volumi in-tree Kubernetes

Kubernetes viene fornito con un certo plug-in di volume integrato. Tuttavia, la maggior parte di questi plug-in di volume in-tree è deprecata (compreso il plug-in di volume vSphere in-tree). Per ulteriori informazioni, consulta il progetto di migrazione CSI.

Migrazione CSI per il driver di archiviazione vSphere

In passato, il plug-in di volume vSphere in-tree era il provisioner per l'oggetto StorageClass predefinito nei cluster utente. Tuttavia, ora il plug-in di volume vSphere interno è deprecato e il driver CSI di vSphere è il provisioner per l'oggetto StorageClass predefinito nei cluster utente. Ti consigliamo di utilizzare il driver CSI vSphere anziché il plug-in di volume in-tree.

A partire dalla versione 1.15 di GKE su VMware, la funzionalità di migrazione CSI di Kubernetes è abilitata per impostazione predefinita per il plug-in di volume vSphere in-tree. Ciò significa che se un carico di lavoro utilizza un volume vSphere in-tree, tutte le chiamate delle operazioni di archiviazione interna vengono reindirizzate automaticamente al driver CSI di vSphere.

Ad esempio, supponi che un PersistentVolumeClaim specifichi l'oggetto StorageClass standard, che elenca il plug-in di volume vSphere in-tree kubernetes.io/vsphere-volume come provisioner. Quindi, le chiamate delle operazioni di archiviazione per qualsiasi carico di lavoro che utilizza l'oggetto PersistentVolumeClaim verranno reindirizzate al driver CSI vSphere, csi.vsphere.vmware.com.

Controlli preflight

Quando crei un nuovo cluster o ne esegui l'upgrade, vengono eseguiti controlli preflight che assicurano che il tuo ambiente sia adatto alla migrazione CSI.

Ad esempio, i controlli preflight:

  • Verifica che le tue versioni vCenter ed ESXI siano appropriate.
  • Verifica che il driver CSI vSphere sia abilitato se sono presenti vSphere PersistentVolume all'interno di albero.
  • Verifica che vSphere StorageClasses non abbia determinati parametri che vengono ignorati dopo la migrazione CSI.
  • Verifica le annotazioni su oggetti PersistentVolume in-tree creati in modo statico e richieste di PersistentVolumeClaim richieste per la migrazione CSI.
  • Verifica che il cluster possa eseguire correttamente un carico di lavoro utilizzando un volume CSI di cui è stato eseguito il provisioning dal driver CSI vSphere.

Per ulteriori informazioni, consulta Esecuzione dei controlli preflight.

Problemi noti

Esistono diversi problemi noti relativi al driver CSI vSphere. Per informazioni e soluzioni alternative, consulta la sezione Problemi noti nelle note di rilascio del driver CSI vSphere VMWare 3.0.

Completa la migrazione a CSI

Con la funzionalità di migrazione CSI di Kubernetes abilitata per impostazione predefinita nella versione 1.15, PersistentVolume, supportato dal plug-in di volume vSphere in-tree, continua a funzionare in un ambiente solo CSI, reindirizza le chiamate delle operazioni del plug-in in-tree al plug-in CSI. Poiché la specifica PersistentVolume è immutabile, la specifica sarà la stessa del plug-in di volume in-tree.

Per questo motivo, il set completo di funzionalità CSI, ad esempio Espansione del volume e Snapshot volume, non è disponibile per questi volumi. Per sfruttare queste funzionalità, è necessario eseguire la migrazione completa del carico di lavoro stateful a CSI ricreando la specifica delle risorse Kubernetes con campi CSI. Abbiamo sviluppato una serie di strumenti automatizzati per facilitare la migrazione dei carichi di lavoro stateful a CSI senza tempi di inattività delle applicazioni, che consentono di utilizzare l'intero set di funzionalità CSI.

Utilizzo di driver di terze parti

Se vuoi eseguire il provisioning di volumi di archiviazione diversi dai datastore vSphere, puoi creare un nuovo oggetto StorageClass in un cluster che utilizza un driver di archiviazione diverso. Quindi, puoi impostare StorageClass come predefinito del cluster o configurare i tuoi carichi di lavoro per l'utilizzo di StorageClass (esempio StatefulSet).

Partner di archiviazione

Abbiamo collaborato con molti fornitori di servizi di archiviazione per qualificare i loro sistemi di archiviazione con GKE su VMware. Consulta l'elenco completo dei partner di archiviazione qualificati.

Espansione del volume

Puoi espandere le dimensioni di un volume permanente dopo aver eseguito il provisioning modificando la richiesta di capacità nell'oggetto PersistentVolumeClaim. Puoi eseguire un'espansione online mentre il volume è in uso da parte di un pod oppure un'espansione offline in cui il volume non è in uso.

Per il driver CSI vSphere, l'espansione offline è disponibile nelle versioni di vSphere >= 7.0, mentre l'espansione online è disponibile nelle versioni di vSphere >= 7.0 Aggiornamento 2.

Il valore standard-rwo StorageClass imposta allowVolumeExpansion su true per impostazione predefinita per i cluster appena creati in esecuzione su vSphere 7.0 >=. Con questo oggetto StorageClass puoi utilizzare l'espansione online e offline per i volumi. Per un cluster con upgrade eseguito, poiché gli oggetti StorageClass non vengono modificati durante gli upgrade dei cluster, quando viene eseguito l'upgrade di un cluster da 1.7 a 1.8, l'impostazione allowVolumeExpansion in standard-rwo rimane non impostata, il che significa che l'espansione del volume non è consentita.

Per ulteriori informazioni sull'espansione del volume, consulta Utilizzare l'espansione del volume.

Snapshot di volumi CSI

È possibile creare snapshot di archiviazione permanente utilizzando le risorse VolumeSnapshot e VolumeSnapshotClass. Per utilizzare questa funzionalità su un volume CSI, il driver CSI deve supportare gli snapshot del volume e il container sidecar external-snapshotter deve essere incluso nel deployment del driver CSI.

Per ulteriori informazioni sugli snapshot dei volumi, consulta Utilizzo degli snapshot dei volumi.

Il deployment dei controller snapshot CSI viene eseguito automaticamente quando crei un cluster.

Pulizia del volume

Quando elimini un cluster utente, i volumi di cui è stato eseguito il provisioning dal driver CSI vSphere non vengono eliminati. Devi eliminare tutti i volumi, gli oggetti PersistentVolumeClaim e gli oggetti StatefulSet prima di eliminare il cluster.

Risoluzione dei problemi

Consulta la sezione Risoluzione dei problemi di archiviazione.

Per approfondire