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:

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

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 oggetto StorageClass, viene utilizzato il valore predefinito di StorageClass.

StorageClass del cluster di amministrazione

Nei cluster di amministrazione, esiste un oggetto StorageClass denominato standard, che è designato come oggetto StorageClass predefinito. L'oggetto StorageClass standard elenca il plug-in di volume vSphere in-tree come provisioner.

Per visualizzare l'oggetto StorageClass standard:

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

Nell'output, puoi vedere che standard è l'oggetto StorageClass predefinito e 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, esiste 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 l'oggetto 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 il provisioner è il driver CSI 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 Kubernetes in-tree

Kubernetes viene fornito con una serie di plug-in volume in-tree. 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 di 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 in-tree è deprecato e il driver CSI vSphere è il provisioner per l'oggetto StorageClass predefinito nei cluster utente. Ti consigliamo di utilizzare il driver CSI vSphere anziché il plug-in del 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 interne vengono automaticamente reindirizzate 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, per qualsiasi carico di lavoro che utilizza questo PersistentVolumeClaim le chiamate delle operazioni di archiviazione vengono reindirizzate al driver CSI vSphere, csi.vsphere.vmware.com.

Controlli preflight

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

Ad esempio, i controlli preflight:

  • Verifica che le versioni vCenter ed ESXI siano appropriate.
  • Verificare che il driver CSI vSphere sia abilitato in caso di oggetti vSphere PersistentVolume in-tree.
  • Verifica che gli oggetti StorageClass di vSphere non abbiano determinati parametri che vengono ignorati dopo la migrazione CSI.
  • Verifica le annotazioni sui PersistentVolume in-tree creati in modo statico e su oggetti PersistentVolumeClaim richiesti 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 di vSphere. Per informazioni e soluzioni alternative, consulta la sezione Problemi noti nelle note di rilascio del driver CSI VMWare vSphere CSI 3.0.

Completa la migrazione a CSI

Con la funzionalità di migrazione CSI di Kubernetes abilitata per impostazione predefinita nella versione 1.15, il PersistentVolume supportato dal plug-in di volume vSphere in-tree continua a funzionare in un ambiente solo CSI, reindirizza solo le chiamate operative 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, l'insieme completo di funzionalità CSI, come Espansione del volume e Istantanea 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 degli strumenti automatici per aiutare la migrazione del carico di lavoro stateful alla crittografia CSI senza tempi di inattività delle applicazioni, che ti 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 archiviazione per qualificare i loro sistemi di archiviazione con GKE su VMware. Consulta l'elenco completo dei partner di archiviazione qualificati.

Espansione volume

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

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

L'oggetto standard-rwo StorageClass imposta allowVolumeExpansion su true per impostazione predefinita per i cluster appena creati in esecuzione su vSphere 7.0 >=. Puoi utilizzare l'espansione sia online che offline per i volumi con questo oggetto StorageClass. Per un cluster con upgrade eseguito, poiché StorageClass non viene modificato durante gli upgrade del cluster, quando un cluster viene aggiornato 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 saperne di più sull'espansione del volume, consulta Utilizzare l'espansione del volume.

Snapshot di volumi CSI

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

Per ulteriori informazioni sugli snapshot di volumi, consulta Utilizzo degli snapshot di 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 StatefulSet prima di eliminare il cluster.

Risoluzione dei problemi

Consulta la sezione Risoluzione dei problemi di archiviazione.

Per approfondire