Mit dem zustandsorientierten Operator für Hochverfügbarkeit (Stateful High Availability, HA) können Sie das in GKE integrierte regionale Persistent Disk verwenden, um die Geschwindigkeit von StatefulSet Pod-Failover zu automatisieren und zu steuern. Während des Failovers übernimmt der Operator automatisch die Erkennung von Knotenausfällen, das Trennen eines Volumes von einem ausgefallenen Knoten und das sichere Anhängen von Volumes an den Failover-Knoten.
Vorteile des zustandsorientierten Operators für Hochverfügbarkeit
Eine gängige zustandsorientierte Architektur zum Erreichen von Hochverfügbarkeit verwendet regionales Persistent Disk als Speicherebene. Diese Laufwerke ermöglichen die synchrone Replikation von Daten zwischen zwei Zonen in einer Region. Bei Knoten- oder zonalen Netzwerkausfällen ermöglicht diese Architektur für Ihre Arbeitslasten ein failover (durch erzwungenes Anhängen) in den Speicher auf einem anderen Knoten in einer anderen Zone.
Mit dem zustandsorientierten Operator für Hochverfügbarkeit können Sie folgende Optimierungen vornehmen:
- Wiederherstellungszeit von Anwendungen mit einem einzelnen Replikat verbessern: Wenn Sie nur ein Replikat verwenden, können Sie den zustandsorientierten Operator für Hochverfügbarkeit verwenden und zonalen Speicher gegen regionalen Speicher austauschen, wenn Ihre Anwendung bereitgestellt wird, um Erhöhen der Langlebigkeit und Verfügbarkeit von Daten im Falle eines Knotenausfalls.
- Zonenübergreifende Netzwerkkosten reduzieren: Die Replikation von Daten über mehrere Zonen kann bei Anwendungen mit hohem Durchsatz kostspielig sein. Mit dem zustandsorientierten Operator für Hochverfügbarkeit können Sie Ihre Anwendung in einer einzelnen Zone ausführen. Gleichzeitig muss ein Failover-Pfad zu einer anderen Zone beibehalten werden, die dem SLA Ihrer Anwendung entspricht.
Beschränkungen
Mit einer Architektur für zustandsorientierte Operatoren für Hochverfügbarkeit speichert GKE Ihre Daten mit einem einzelnen Replikat über regionales Persistent Disk in zwei Zonen. Die Daten sind jedoch nur zugänglich, wenn Ihr Anwendungsreplikat fehlerfrei ist. Während eines Failovers ist Ihre Anwendung vorübergehend nicht verfügbar, während das Replikat auf einen neuen fehlerfreien Knoten neu geplant wird. Wenn Ihre Anwendung ein sehr niedriges Recovery Time Objective (RTO) hat, empfehlen wir die Verwendung eines Ansatzes mit mehreren Replikaten.
Hinweise
Führen Sie die folgenden Schritte durch, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
Voraussetzungen
- Auf der Steuerungsebene und den Knoten Ihres Clusters muss die GKE-Version 1.28 oder höher ausgeführt werden.
- Wenn Sie einen zustandsorientierten Operator für Hochverfügbarkeit verwenden, wird das verknüpfte StatefulSet automatisch für die Verwendung regionaler nichtflüchtiger Persistent Disks konfiguriert. Sie müssen jedoch dafür sorgen, dass die Pods für die Verwendung dieser Laufwerke konfiguriert sind und in allen Zonen ausgeführt werden können, die dem zugrunde liegenden Speicher zugeordnet sind.
- Achten Sie darauf, dass Ihre Anwendung auf Maschinenformen ausgeführt wird, die von regionalem Persistent Disk unterstützt werden: E2, N1, N2, N2D.
- Achten Sie darauf, dass der CSI-Treiber für Persistent Disk von Compute Engine aktiviert ist. Der CSI-Treiber für Persistent Disk ist in neuen Autopilot- und Standardclustern standardmäßig aktiviert und kann bei Verwendung von Autopilot nicht deaktiviert oder bearbeitet werden. Wenn Sie den CSI-Treiber für Persistent Disk aus Ihrem Cluster manuell hinzufügen müssen, finden Sie weitere Informationen unter CSI-Treiber für Persistent Disk auf einem vorhandenen Cluster aktivieren.
- Wenn Sie eine benutzerdefinierte StorageClass verwenden, konfigurieren Sie den CSI-Treiber für Persistent Disk mit dem Bereitsteller
pd.csi.storage.gke.io
und diesen Parametern:availability-class: regional-hard-failover
replication-type: regional-pd
Zustandsorientierte Operator für Hochverfügbarkeit einrichten und verwenden
So richten Sie den zustandsorientierten Operator für Hochverfügbarkeit für Ihre zustandsorientierten Arbeitslasten ein:
- Aktivieren Sie das Add-on
StatefulHA
. - Installieren Sie eine HighAvailabilityApplication-Ressource.
- Installieren Sie StatefulSet.
- Prüfen Sie die HighAvailabilityApplication-Ressource.
StatefulHA
-Add-on aktivieren
Damit Sie den zustandsorientierten Operator für Hochverfügbarkeit verwenden können, muss das Add-on StatefulHA
in Ihrem Cluster aktiviert sein.
Autopilot-Cluster: GKE aktiviert das Add-on
StatefulHA
beim Erstellen des Clusters automatisch. Wenn Sie den zustandsorientierten Operator für Hochverfügbarkeit für eine vorhandene Arbeitslast verwenden möchten, stellen Sie Ihre Arbeitslast in einem neuen Autopilot-Cluster noch einmal bereit.Standardcluster:
- Neue Clustererstellung: Folgen Sie der Anleitung zur gcloud CLI, um einen Standardcluster zu erstellen und fügen Sie das folgende Flag hinzu:
--add-on=StatefulHA
. - Vorhandener Standardcluster: Folgen Sie der Anleitung der gcloud CLI, um die Einstellungen eines Standardclusters zu aktualisieren, und verwenden Sie das folgende Flag, um das Add-on zu aktivieren:
--update-addons=StatefulHA=ENABLED
.
- Neue Clustererstellung: Folgen Sie der Anleitung zur gcloud CLI, um einen Standardcluster zu erstellen und fügen Sie das folgende Flag hinzu:
GKE installiert automatisch eine StorageClass mit dem Namen standard-rwo-regional
, wenn das Add-on aktiviert ist.
HighAvailabilityApplication-Ressource installieren
HighAvailabilityApplication
ist eine Kubernetes-Ressource, die die StatefulSet-Einstellungen vereinfacht und die Pod-Verfügbarkeit in GKE erhöht.
Zustandsorientierter Operator für Hochverfügbarkeit gleicht HighAvailabilityApplication
-Ressourcen in GKE ab.
In der Spezifikation HighAvailabilityApplication
müssen Sie für HighAvailabilityApplication.spec.resourceSelection.resourceKind
den Wert StatefulSet
festlegen.
Informationen zum Konfigurieren der HighAvailability-Ressource finden Sie in der Referenzdokumentation zu HighAvailabilityApplication
.
Sehen Sie sich das folgende Beispiel für PostgreSQL an:
Speichern Sie folgendes Manifest in einer Datei mit dem Namen
stateful-ha-example-resource.yaml
:kind: HighAvailabilityApplication apiVersion: ha.gke.io/v1 metadata: name: APP_NAME namespace: APP_NAMESPACE spec: resourceSelection: resourceKind: StatefulSet policy: storageSettings: requireRegionalStorage: true failoverSettings: forceDeleteStrategy: AfterNodeUnreachable afterNodeUnreachable: afterNodeUnreachableSeconds: 20
Ersetzen Sie Folgendes:
- APP_NAME ist der Name einer Anwendung in Ihrem Cluster, die Sie schützen möchten. Dieser Name muss sowohl von HighAvailabilityApplication als auch von StatefulSet freigegeben werden.
- APP_NAMESPACE ist der Namespace der Anwendung. Dieser Namespace muss sowohl von der HighAvailabilityApplication als auch vom StatefulSet freigegeben werden, das geschützt wird.
In diesem Fall gilt Folgendes:
HighAvailabilityApplication.spec.policy.storageSettings.requireRegionalSettings
ist auftrue
gesetzt. Dadurch wird Regional Storage erzwungen.HighAvailabilityApplication.spec.policy.failoverSettings
ist aufAfterNodeUnreachable
gesetzt. Dies bestimmt, wie ein erzwungenes Löschen bei einem Knotenfehler ausgelöst wird.HighAvailabilityApplication.spec.policy.failoverSettings.afterNodeUnreachable
ist auf 20 gesetzt. Dies ist das Zeitlimit, mit dem das Löschen eines Pods erzwungen wird, nachdem der Knoten, auf dem er ausgeführt wird, als nicht erreichbar markiert wird.
Erstellen Sie die Ressource. Die
HighAvailabilityApplication
-Ressource identifiziert ein StatefulSet mit einem übereinstimmenden Namespace und Namen.kubectl apply -f stateful-ha-example-resource.yaml
StatefulSet installieren
Installieren Sie StatefulSet. Sie können beispielsweise ein PostgreSQL-StatefulSet mit Helm installieren (Helm ist in Cloud Shell vorinstalliert):
helm install postgresql oci://registry-1.docker.io/bitnamicharts/postgresql \
--namespace=APP_NAMESPACE \
--set fullnameOverride=APP_NAME
Die Ressource HighAvailabilityApplication
ändert die StorageClass des StatefulSets automatisch in standard-rwo-regional
, die regionales Persistent Disk verwendet.
HighAvailabilityApplication-Ressource überprüfen
Führen Sie den folgenden Befehl aus, um zu prüfen, ob für die Beispielanwendung das automatische Failover aktiviert ist:
kubectl describe highavailabilityapplication APP_NAME
Die Ausgabe sollte in etwa so aussehen:
Status:
Conditions:
Last Transition Time: 2023-08-09T23:59:52Z
Message: Application is protected
Observed Generation: 1
Reason: ApplicationProtected
Status: True
Type: Protected