Speicher

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.

Weitere Informationen