Auf dieser Seite werden Speicherkonzepte von GKE on VMware erläutert.
Fazit
Die Einbindung von GKE on VMware in externe Block- oder Dateispeichersysteme erfolgt über:
- CSI-Treiber (vSphere Container Storage Interface)
- CSI-Treiber von Drittanbietern
- Integrierte Kubernetes-Volume-Plug-ins
vSphere-Datenspeicher
Wenn Sie einen Administratorcluster erstellen, geben Sie einen vorhandenen vSphere-datastore für die etcd-Daten des Clusters an.
Wenn Sie einen Nutzercluster erstellen, können Sie denselben Datenspeicher wie den Administratorcluster verwenden oder einen anderen Datenspeicher angeben. Sie können auch Datenspeicher für einzelne Knotenpools angeben.
Die von den Administrator- und Nutzerclustern verwendeten vSphere-Datenspeicher können durch NFS, vSAN oder VMFS auf einem Blockgerät, z. B. einem externen Speicherarray, gesichert werden. In einer Umgebung mit mehreren Hosts muss jedes blockorientierte Gerät mit allen Hosts in der Umgebung verbunden sein und der Datenspeicher muss auf jedem Host über die Option Datastore auf zusätzlichen Hosts bereitstellen konfiguriert werden.
StorageClasses
Beim Erstellen eines PersistentVolumeClaim können Sie eine Speicherklasse angeben, die Informationen dazu liefert, wie der Speicher bereitgestellt wird. Wenn Sie keine Speicherklasse angeben, wird die Standard-Speicherklasse verwendet.
Speicherklasse des Administratorclusters
In Administratorclustern gibt es eine Speicherklasse mit dem Namen standard
, die als Standard-Speicherklasse festgelegt wird. Die Speicherklasse standard
listet das integrierte vSphere-Volume-Plug-in als Bereitsteller auf.
So rufen Sie die Speicherklasse standard
auf:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \ standard --output yaml
In der Ausgabe sehen Sie, dass standard
die Standard-Speicherklasse und der Bereitsteller das integrierte vSphere-Volume-Plug-in kubernetes.io/vsphere-volume
ist. Außerdem wird der Name eines vSphere-Datenspeichers angezeigt.
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 ...
Speicherklassen von Nutzerclustern
In Nutzerclustern gibt es eine Speicherklasse mit dem Namen standard
und eine weitere Speicherklasse mit dem Namen standard-rwo
.
Die Speicherklasse standard-rwo
wird als Standard-Speicherklasse festgelegt und listet den vSphere-CSI-Treiber als Bereitsteller auf.
So rufen Sie die Speicherklasse standard-rwo
auf:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \ standard-rwo --output yaml
In der Ausgabe sehen Sie, dass standard-rwo
die Standard-Speicherklasse und der Bereitsteller der vSphere-CSI-Treiber csi.vsphere.vmware.com
ist. Sie können auch die URL eines vSphere-Datenspeichers sehen:
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 ...
Integrierte Kubernetes-Volume-Plug-ins
Kubernetes wird mit einer Reihe von integrierten Volume-Plug-ins ausgeliefert. Die meisten dieser integrierten Volume-Plug-ins wurden jedoch verworfen (einschließlich des integrierten vSphere-Volume-Plug-ins). Weitere Informationen finden Sie im Projekt CSI-Migration.
CSI-Migration für den vSphere-Speichertreiber
In der Vergangenheit wurde die Standard-Storage-Klasse in Nutzerclustern durch das integrierte vSphere-Volume-Plug-in bereitgestellt. Jetzt wurde jedoch das integrierte vSphere-Volume-Plug-in verworfen und der vSphere-CSI-Treiber ist der Bereitsteller für die Standard-Speicherklasse in Nutzerclustern. Wir empfehlen die Verwendung des vSphere-CSI-Treibers anstelle des integrierten Volume-Plug-ins.
Ab Version 1.15 von GKE on VMware ist das CSI-Migrationsfeature von Kubernetes für das integrierte vSphere-Volume-Plug-in standardmäßig aktiviert. Wenn also eine Arbeitslast ein integriertes vSphere-Volume verwendet, werden alle internen Speichervorgänge automatisch an den vSphere-CSI-Treiber weitergeleitet.
Angenommen, ein nichtflüchtiges Speichermedium gibt die Speicherklasse standard
an, die das integrierte vSphere-Volume-Plug-in kubernetes.io/vsphere-volume
als Bereitsteller auflistet. Anschließend werden die Speichervorgangsaufrufe für Arbeitslasten, die diesen nichtflüchtiger Speicher verwenden, an den vSphere CSI-Treiber csi.vsphere.vmware.com
weitergeleitet.
Preflight-Prüfungen
Wenn Sie einen neuen Cluster erstellen oder einen Cluster upgraden, wird mithilfe von Preflight-Prüfungen sichergestellt, dass Ihre Umgebung für die CSI-Migration geeignet ist.
Die Preflight-Prüfungen haben beispielsweise folgende Auswirkungen:
- Prüfen Sie, ob Ihre vCenter- und ESXI-Versionen geeignet sind.
- Prüfen Sie, ob der vSphere-CSI-Treiber aktiviert ist, wenn integrierte vSphere-Volumes vorhanden sind.
- Achten Sie darauf, dass die vSphere StorageClasses bestimmte Parameter nicht haben, die nach der CSI-Migration ignoriert werden.
- Prüfen Sie Annotationen zu statisch erstellten integrierten nichtflüchtigen Volumes und PersistentClaims, die für die CSI-Migration erforderlich sind.
- Prüfen Sie, ob der Cluster eine Arbeitslast mit einem vom vSphere-CSI-Treiber bereitgestellten CSI-Volume ausführen kann.
Weitere Informationen finden Sie unter Preflight-Prüfungen ausführen.
Bekannte Probleme
Im Zusammenhang mit dem vSphere-CSI-Treiber gibt es mehrere bekannte Probleme. Informationen und Problemumgehungen finden Sie im Abschnitt „Bekannte Probleme“ in den Versionshinweisen für VMware vSphere CSI-Treiber 3.0.
Migration zu CSI abschließen
Wenn das CSI-Migrationsfeature von Kubernetes in 1.15 standardmäßig aktiviert ist, funktioniert das vom integrierten vSphere-Volume-Plug-in unterstützte PersistentVolume
in einer reinen CSI-Umgebung weiterhin. Es leitet nur integrierte Plug-in-Vorgangsaufrufe an das CSI-Plug-in weiter. Da die PersistentVolume
-Spezifikation unveränderlich ist, entspricht die Spezifikation der für das integrierte Volume-Plug-in.
Aus diesem Grund ist für solche Volumes nicht der gesamte Funktionsumfang von CSI wie Volume-Erweiterung und Volume-Snapshot verfügbar. Damit Sie diese Features nutzen können, muss die zustandsorientierte Arbeitslast vollständig zu CSI migriert werden. Dazu müssen Sie die Kubernetes-Ressourcenspezifikation mit CSI-Feldern neu erstellen. Wir haben automatisierte Tools entwickelt, mit denen Sie zustandsorientierte Arbeitslasten ohne Ausfallzeiten der Anwendung zu CSI migrieren können. So können Sie alle CSI-Features nutzen.
Treiber von Drittanbietern verwenden
Wenn Sie andere Speicher-Volumes als vSphere-Datenspeicher bereitstellen möchten, können Sie eine neue StorageClass in einem Cluster erstellen, der einen anderen Speichertreiber verwendet. Anschließend können Sie die Speicherklasse als Standard für den Cluster festlegen oder Ihre Arbeitslasten für die Verwendung der Speicherklasse konfigurieren (StatefulSet-Beispiel).
Speicherpartner
Wir arbeiten mit vielen Speicheranbietern zusammen, um ihre Speichersysteme für GKE on VMware zu qualifizieren. Vollständige Liste der qualifizierten Speicherpartner.
Volume-Erweiterung
Sie können die Größe eines nichtflüchtigen Volumes nach der Bereitstellung erweitern. Bearbeiten Sie dazu die Kapazitätsanfrage in nichtflüchtigem Speicher. Sie können eine Onlineerweiterung ausführen, während das Volume von einem Pod verwendet wird, oder eine Offlineerweiterung, wenn das Volume nicht verwendet wird.
Für den vSphere-CSI-Treiber ist die Offlineerweiterung in vSphere-Versionen ab 7.0 und die Onlineerweiterung in vSphere-Versionen ab 7.0 Update 2 verfügbar.
Die Speicherklasse standard-rwo
setzt allowVolumeExpansion
für neu erstellte Cluster, die auf vSphere 7.0 ausgeführt werden, standardmäßig auf „true“. Mit dieser Speicherklasse können Sie für Volumes sowohl die Online- als auch die Offlineerweiterung verwenden. Bei einem aktualisierten Cluster bleibt die Einstellung allowVolumeExpansion
in standard-rwo
nicht festgelegt, da StorageClasses bei Clusterupgrades nicht geändert werden. Das bedeutet, dass die Volume-Erweiterung nicht zulässig ist.
Weitere Informationen zur Volume-Erweiterung finden Sie unter Volume-Erweiterung verwenden.
Snapshots des CSI-Volumes
Mit den Ressourcen VolumeSnapshot und VolumeSnapshotClass können Sie Snapshots des nichtflüchtigen Speichers erstellen. Zur Verwendung dieses Features auf einem CSI-Volume muss der CSI-Treiber Volume-Snapshots unterstützen und der Sidecar-Container external-snapshotter
muss in der CSI-Treiberbereitstellung enthalten sein.
Weitere Informationen zu Volume-Snapshots finden Sie unter Volume-Snapshots verwenden
Die CSI-Snapshot-Controller werden automatisch bereitgestellt, wenn Sie einen Cluster erstellen.
Volume-Bereinigung
Wenn Sie einen Nutzercluster löschen, werden vom vSphere-CSI-Treiber bereitgestellte Volumes nicht gelöscht. Löschen Sie vor dem Löschen des Clusters alle Volumes, PersistentVolumeClaims und StatefulSets.
Fehlerbehebung
Siehe Fehlerbehebung für Speicher.