Archiviazione

Questa pagina spiega i concetti di Google Distributed Cloud Storage.

Riepilogo

Google Distributed Cloud si integra con sistemi esterni di archiviazione a blocchi o di file tramite:

  • Il driver vSphere Container Storage Interface (CSI)
  • Driver CSI di terze parti
  • Plug-in di volume in-tree di 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 o 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 oggetto PersistentVolumeClaim, puoi specificare un oggetto StorageClass che fornisce informazioni su come verrà eseguito il provisioning dello spazio di archiviazione. Se non specifichi un valore, viene utilizzato il valore predefinito di StorageClass.

StorageClass del cluster di amministrazione

Nei cluster di amministrazione, esiste un oggetto StorageClass denominato standard ed è designato come StorageClass predefinito. Il valore di StorageClass standard elenca il plug-in del volume in-tree vSphere 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 è il valore predefinito per l'oggetto StorageClass e il provisioner è il plug-in di volume "in-tree" vSphere, 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.

Il valore di StorageClass standard-rwo è designato come predefinito e indica 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 è il valore predefinito per l'oggetto StorageClass e il provisioner è il driver CSI vSphere, csi.vsphere.vmware.com. Puoi anche vedere 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 volume in-tree di Kubernetes

Kubernetes viene fornito con una serie di plug-in di volume in-tree. Tuttavia, la maggior parte di questi plug-in di volume "in-tree" sono deprecati (incluso il plug-in di volume "in-tree" vSphere). 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 il valore predefinito di StorageClass nei cluster utente. Tuttavia, ora il plug-in del volume vSphere integrato è deprecato e il driver CSI vSphere è il provisioner per il valore predefinito di StorageClass nei cluster utente. Ti consigliamo di utilizzare il driver CSI vSphere anziché il plug-in del volume integrato.

A partire dalla versione 1.15 di Google Distributed Cloud, 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 alle operazioni di archiviazione interne vengono reindirizzate automaticamente al driver CSI vSphere.

Ad esempio, supponiamo che un oggetto PersistentVolumeClaim specifichi standard StorageClass, che elenca il plug-in del volume in-tree vSphere, kubernetes.io/vsphere-volume, come provisioner. In seguito, qualsiasi carico di lavoro che utilizza PersistentVolumeClaim verrà reindirizzato alle chiamate delle operazioni di archiviazione al driver CSI vSphere, csi.vsphere.vmware.com.

Controlli preflight

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

Ad esempio, i controlli preflight:

  • Verifica che le versioni vCenter ed ESXI siano appropriate.
  • Verifica che il driver CSI vSphere sia abilitato se sono presenti oggetti vSphere PersistentVolume in-tre.
  • Verifica che le StorageClass di vSphere non abbiano determinati parametri che vengono ignorati dopo la migrazione CSI.
  • Verifica le annotazioni sugli oggetti PersistentVolume in-tree creati in modo statico e sugli oggetti PersistentVolumeClaim richiesti per la migrazione di CSI.
  • Verifica che il cluster sia in grado di eseguire correttamente un carico di lavoro utilizzando un volume CSI di cui è stato eseguito il provisioning dal driver CSI vSphere.

Per maggiori informazioni, vedi 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 di VMWare vSphere CSI Driver 3.0.

Completa la migrazione a CSI

Con la funzionalità di migrazione Kubernetes CSI abilitata per impostazione predefinita in 1.15, il PersistentVolume supportato dal plug-in di volume vSphere integrato continua a funzionare in un ambiente solo CSI, ma si limita a reindirizzare le chiamate operative del plug-in integrato al plug-in CSI. Poiché la specifica PersistentVolume è immutabile, sarà la stessa del plug-in del volume in-tree.

Per questo motivo, l'intero set di funzionalità CSI, come l'espansione del volume e lo snapshot del volume, non è disponibile per questi volumi. Per sfruttare queste funzionalità, è necessario eseguire la migrazione completa del carico di lavoro stateful a CSI ricreando le specifiche delle risorse Kubernetes con i campi CSI. Abbiamo sviluppato uno strumento automatizzato per facilitare la migrazione dei carichi di lavoro stateful a CSI senza tempi di inattività delle applicazioni, che ti consentiranno di utilizzare il set di funzionalità CSI completo.

Utilizzare 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 carichi di lavoro in modo che utilizzino il valore StorageClass (esempio StatefulSet).

Partner per l'archiviazione

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

Espansione del volume

Puoi espandere la dimensione di un volume permanente dopo che ne è stato eseguito il provisioning modificando la richiesta di capacità in PersistentVolumeClaim. Puoi eseguire un'espansione online mentre il volume è utilizzato da un pod oppure un'espansione offline quando 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 Update 2.

Per impostazione predefinita, standard-rwo StorageClass imposta allowVolumeExpansion su true per i cluster appena creati in esecuzione su >= vSphere 7.0. Puoi utilizzare l'espansione sia online che offline per i volumi usando questo oggetto StorageClass. Per un cluster con upgrade eseguito, poiché gli oggetti StorageClass non vengono modificati negli upgrade del cluster, quando viene eseguito l'upgrade di un cluster dalla versione 1.7 alla versione 1.8, l'impostazione allowVolumeExpansion in standard-rwo rimane non configurata, il che significa che l'espansione del volume non è consentita.

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

Snapshot dei volumi CSI

Puoi 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 collaterale external-snapshotter deve essere incluso nel deployment del driver CSI.

Per ulteriori informazioni sugli snapshot del volume, consulta Utilizzo degli snapshot del volume.

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, mentre gli oggetti PersistentVolumeClaim e StatefulSet vengono eliminati prima di eliminare il cluster.

Risoluzione dei problemi

Consulta la sezione Risoluzione dei problemi di archiviazione.

Per approfondire