Storage

Auf dieser Seite werden Speicherkonzepte für Google Distributed Cloud (nur Software) für VMware erläutert.

Zusammenfassung

Google Distributed Cloud lässt sich über folgende Komponenten in externe Block- oder Dateispeichersysteme einbinden:

  • vSphere-CSI-Treiber (Container Storage Interface)
  • CSI-Treiber von Drittanbietern
  • Integrierte Kubernetes-Volume-Plug-ins

vSphere-Datenspeicher

Wenn Sie einen Administratorcluster erstellen, geben Sie einen vorhandenen vSphere-Datenspeicher für die etcd-Daten des Clusters an.

Wenn Sie einen Nutzercluster erstellen, können Sie denselben Datenspeicher wie für 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 blockorientierten Gerät wie einem externen Speicherarray unterstützt 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

Wenn Sie einen PersistentVolumeClaim erstellen, können Sie eine StorageClass angeben, die Informationen zur Bereitstellung des Speichers enthält. Wenn Sie keine StorageClass angeben, wird die Standard-StorageClass verwendet.

StorageClass des Administratorclusters

In Administratorclustern gibt es eine StorageClass mit dem Namen standard, die als Standard-StorageClass festgelegt ist. In der StorageClass standard wird das integrierte vSphere-Volume-Plug-in als Bereitsteller aufgeführt.

So rufen Sie die StorageClass standard auf:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \
    standard --output yaml

In der Ausgabe sehen Sie, dass standard die Standard-StorageClass und der Bereitsteller das integrierte vSphere-Volume-Plug-in kubernetes.io/vsphere-volume ist. Sie können auch den Namen 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: admin-storage-class
  name: standard
...
parameters:
  datastore: vsanDatastore
provisioner: kubernetes.io/vsphere-volume
...

StorageClasses für Nutzercluster

In Nutzerclustern gibt es eine StorageClass mit dem Namen standard und eine weitere StorageClass mit dem Namen standard-rwo.

Die StorageClass standard-rwo wird als Standard-StorageClass festgelegt und der vSphere-CSI-Treiber wird als Bereitsteller aufgeführt.

So rufen Sie die StorageClass standard-rwo auf:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \
    standard-rwo --output yaml

In der Ausgabe sehen Sie, dass standard-rwo die Standard-StorageClass 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 In-Tree-Volume-Plug-ins sind jedoch veraltet (einschließlich des vSphere-In-Tree-Volume-Plug-ins). Weitere Informationen finden Sie im Projekt CSI-Migration.

CSI-Migration für den vSphere-Speichertreiber

In der Vergangenheit war das integrierte vSphere-Volume-Plug-in der Bereitsteller für die Standard-StorageClass in Nutzerclustern. Das integrierte vSphere-Volume-Plug-in wurde jedoch eingestellt und der vSphere-CSI-Treiber ist der Bereitsteller für die Standard-StorageClass in Nutzerclustern. Wir empfehlen, den vSphere-CSI-Treiber anstelle des integrierten Volume-Plug-ins zu verwenden.

Ab Version 1.15 von Google Distributed Cloud ist die Kubernetes-CSI-Migrationsfunktion für das integrierte vSphere-Volume-Plug-in standardmäßig aktiviert. Wenn eine Arbeitslast ein integriertes vSphere-Volume verwendet, werden alle internen Speicheraufrufe automatisch an den vSphere-CSI-Treiber weitergeleitet.

Angenommen, ein PersistentVolumeClaim gibt die StorageClass standard an, die das vSphere-In-Tree-Volume-Plug-in kubernetes.io/vsphere-volume als Bereitsteller auflistet. Anschließend werden die Aufrufe von Speichervorgängen für alle Arbeitslasten, die diesen PersistentVolumeClaim verwenden, an den vSphere-CSI-Treiber csi.vsphere.vmware.com weitergeleitet.

Preflight-Prüfungen

Wenn Sie einen neuen Cluster erstellen oder einen Cluster aktualisieren, wird mit Preflight-Prüfungen sichergestellt, dass Ihre Umgebung für die CSI-Migration geeignet ist.

Beispiele für Preflight-Prüfungen:

  • Prüfen Sie, ob Ihre vCenter- und ESXI-Versionen geeignet sind.
  • Prüfen Sie, ob der vSphere CSI-Treiber aktiviert ist, wenn es In-Tree-vSphere-PersistentVolumes gibt.
  • Prüfen Sie, ob die vSphere-StorageClasses bestimmte Parameter haben, die nach der CSI-Migration ignoriert werden.
  • Prüfen Sie die Annotationen für statisch erstellte In-Tree-PersistentVolumes und ‑PersistentVolumeClaims, die für die CSI-Migration erforderlich sind.
  • Prüfen Sie, ob der Cluster eine Arbeitslast mit einem CSI-Volume ausführen kann, das vom vSphere-CSI-Treiber bereitgestellt wird.

Weitere Informationen finden Sie unter Vorabprüfungen ausführen.

Bekannte Probleme

Es gibt mehrere bekannte Probleme im Zusammenhang mit dem vSphere-CSI-Treiber. Informationen und Problemumgehungen finden Sie im Abschnitt „Bekannte Probleme“ in den Versionshinweisen zu VMware vSphere CSI Driver 3.0.

Migration zu CSI abschließen

Wenn die Kubernetes-CSI-Migrationsfunktion standardmäßig in 1.15 aktiviert ist, funktionieren die PersistentVolume, die vom In-Tree-vSphere-Volume-Plug-in unterstützt werden, weiterhin in einer reinen CSI-Umgebung. Es werden lediglich In-Tree-Plug-in-Vorgangsaufrufe an das CSI-Plug-in weitergeleitet. Da die PersistentVolume-Spezifikation unveränderlich ist, ist sie mit der Spezifikation für das In-Tree-Volume-Plug-in identisch.

Aus diesem Grund ist der vollständige Umfang von CSI-Funktionen, z. B. Volume Expansion und Volume Snapshot, für solche Volumes nicht verfügbar. Damit Sie diese Funktionen nutzen können, muss die zustandsorientierte Arbeitslast vollständig zu CSI migriert werden. Dazu muss die Kubernetes-Ressourcenspezifikation mit CSI-Feldern neu erstellt werden. Wir haben ein automatisiertes Tool entwickelt, mit dem Sie zustandsorientierte Arbeitslasten ohne Anwendungsausfallzeiten zu CSI migrieren können. So können Sie den vollständigen CSI-Funktionsumfang 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 StorageClass als Standard für den Cluster festlegen oder Ihre Arbeitslasten für die Verwendung der StorageClass konfigurieren (StatefulSet-Beispiel).

Storage-Partner

Wir arbeiten mit vielen Speicheranbietern zusammen, um ihre Speichersysteme für Google Distributed Cloud zu qualifizieren. Vollständige Liste der qualifizierten Speicherpartner.

Volume-Erweiterung

Sie können die Größe eines nichtflüchtigen Volumes nach der Bereitstellung erweitern, indem Sie die Kapazitätsanfrage im PersistentVolumeClaim bearbeiten. 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 Offline-Erweiterung in vSphere-Versionen ab 7.0 und die Online-Erweiterung in vSphere-Versionen ab 7.0 Update 2 verfügbar.

Die StorageClass standard-rwo setzt allowVolumeExpansion standardmäßig auf „true“ für neu erstellte Cluster, die auf >= vSphere 7.0 ausgeführt werden. Sie können sowohl die Online- als auch die Offline-Erweiterung für Volumes verwenden, die diese StorageClass nutzen. Bei einem aktualisierten Cluster wird 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

Sie können Snapshots des nichtflüchtigen Speichers mit den Ressourcen VolumeSnapshot und VolumeSnapshotClass 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 die vom vSphere-CSI-Treiber bereitgestellten Volumes nicht gelöscht. Sie sollten alle Volumes, PersistentVolumeClaims und StatefulSets löschen, bevor Sie den Cluster löschen.

Fehlerbehebung

Siehe Fehlerbehebung für Speicher.

Weitere Informationen