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.