Questa pagina descrive i concetti di Google Distributed Cloud (solo software) per l'archiviazione VMware.
Riepilogo
Google Distributed Cloud si integra con sistemi di archiviazione a blocchi o di file esterni tramite:
- Il driver Container Storage Interface (CSI) di vSphere
- Driver CSI di terze parti
- Plug-in di volumi 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 oppure puoi specificarne uno diverso. Puoi anche specificare i datastore per i 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 dell'ambiente e il datastore deve essere configurato su ogni host tramite l'opzione Monta datastore su host aggiuntivi.
StorageClasses
Quando crei un PersistentVolumeClaim, puoi specificare una StorageClass che fornisca informazioni su come verrà eseguito il provisioning dello spazio di archiviazione. Se non specifichi un oggetto StorageClass, viene utilizzato quello predefinito.
StorageClass del cluster di amministrazione
Nei cluster di amministrazione, esiste una risorsa StorageClass denominata standard
, che
è designata come StorageClass predefinita. standard
StorageClass elenca
il plug-in del volume in-tree di vSphere come provisioner.
Per visualizzare l'oggetto StorageClass standard
:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \ standard --output yaml
Nell'output, puoi vedere che standard
è StorageClass predefinita e
il provisioner è il plug-in del volume in-tree di vSphere,
kubernetes.io/vsphere-volume
. Puoi anche visualizzare 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 ...
StorageClasses del cluster utente
Nei cluster utenti, esiste una StorageClass denominata standard
e un'altra
StorageClass denominata standard-rwo
.
La risorsa StorageClass standard-rwo
è designata come StorageClass predefinita e
elenca il driver CSI di 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
è StorageClass predefinita 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 in-tree di Kubernetes
Kubernetes viene fornito con una serie di plugin di volumi in-tree. Tuttavia, la maggior parte di questi plug-in di volumi in-tree sono ritirati (incluso il plug-in di volumi in-tree vSphere). Per ulteriori informazioni, consulta il progetto Migrazione CSI.
Migrazione CSI per il driver di archiviazione vSphere
In passato, il plugin del volume vSphere in-tree era il provisioner per la classe di archiviazione predefinita nei cluster utente. Tuttavia, ora il plug-in del volume vSphere in-tree è ritirato e il driver CSI vSphere è il provisioner per la classe StorageClass predefinita 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 Google Distributed Cloud, la funzionalità di migrazione CSI di Kubernetes è abilitata per impostazione predefinita per il plug-in di volume vSphere integrato. Ciò significa che se un workload 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 PersistentVolumeClaim specifichi la StorageClass standard
, che elenca il plug-in del volume in-tree di vSphere, kubernetes.io/vsphere-volume
, come provisioner. Quindi, tutte le operazioni di archiviazione di qualsiasi workload che utilizza
PersistentVolumeClaim verranno reindirizzate 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 assicurarsi che l'ambiente sia adatto alla migrazione CSI.
Ad esempio, i controlli preflight:
- Verifica che le versioni di vCenter ed ESXI siano appropriate.
- Verifica che il driver CSI vSphere sia abilitato se sono presenti PersistentVolume vSphere in-tree.
- Verifica che le StorageClass di vSphere non abbiano determinati parametri che vengono ignorati dopo la migrazione CSI.
- Verifica le annotazioni su PersistentVolume e PersistentVolumeClaim in-tree creati staticamente richiesti per la migrazione CSI.
- Verifica che il cluster possa eseguire correttamente un workload utilizzando un volume CSI di cui è stato eseguito il provisioning dal driver CSI vSphere.
Per saperne di più, consulta la sezione Esecuzione dei controlli preflight.
Problemi noti
Esistono diversi problemi noti relativi al driver vSphere CSI. Per informazioni e soluzioni alternative, consulta la sezione Problemi noti delle note di rilascio del driver 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 integrato continua
a funzionare in un ambiente solo CSI, reindirizza solo le chiamate di operazione del plug-in integrato
al plug-in CSI. Poiché la specifica PersistentVolume
è immutabile,
la specifica sarà la stessa del plug-in del volume in-tree.
Per questo motivo, l'insieme completo di funzionalità CSI come l'espansione del volume e gli snapshot del volume non sono disponibili per questi volumi. Per sfruttare queste funzionalità, il workload stateful deve essere completamente migrato a CSI ricreando la specifica della risorsa Kubernetes con i campi CSI. Abbiamo sviluppato uno strumento automatizzato per facilitare la migrazione del carico di lavoro stateful a CSI senza tempi di inattività dell'applicazione, che ti consentirà 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 una nuova StorageClass in un cluster che utilizza un driver di archiviazione diverso. Poi, puoi impostare StorageClass come predefinita del cluster o configurare i carichi di lavoro in modo che utilizzino StorageClass (esempio di StatefulSet).
Partner di archiviazione
Abbiamo collaborato con molti fornitori di spazio di archiviazione per qualificare i loro sistemi di archiviazione con Google Distributed Cloud. Consulta l'elenco completo dei partner di archiviazione qualificati.
Espansione del volume
Puoi espandere le dimensioni di un volume permanente dopo che è stato sottoposto a provisioning modificando la richiesta di capacità in PersistentVolumeClaim. Puoi eseguire un'espansione online mentre il volume è in uso da 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 Update 2.
La risorsa StorageClass standard-rwo
imposta allowVolumeExpansion
su true per impostazione predefinita
per i cluster appena creati che vengono eseguiti su vSphere 7.0 o versioni successive. Puoi utilizzare l'espansione sia online che offline per i volumi che utilizzano questa StorageClass. Per un cluster di cui è stato eseguito l'upgrade, poiché le StorageClass non vengono modificate durante gli upgrade del cluster, quando un cluster viene aggiornato dalla versione 1.7 alla 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 Utilizzo dell'espansione del volume.
Snapshot volume CSI
Puoi creare snapshot dell'archiviazione permanente utilizzando le risorse VolumeSnapshot e VolumeSnapshotClass. Per utilizzare questa funzionalità su un volume CSI, il driver CSI deve supportare
gli snapshot dei volumi e il contenitore secondario external-snapshotter
deve essere
incluso nel deployment del driver CSI.
Per ulteriori informazioni sugli snapshot dei volumi, consulta Utilizzo degli snapshot dei volumi.
I controller snapshot CSI vengono implementati 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. Prima di eliminare il cluster, devi eliminare tutti i volumi, PersistentVolumeClaims e StatefulSet.
Risoluzione dei problemi
Consulta la sezione Risoluzione dei problemi di archiviazione.