Inhaltsverzeichnis
So versetzen Sie einen Cloud Native PostgreSQL Operator Cluster in den Wartungsmodus
Um einen von Cloud Native PostgreSQL (CNPG) Operator verwalteten PostgreSQL-Cluster vollständig in den Wartungsmodus zu versetzen, gibt es keine einzelne, allumfassende Funktion. Stattdessen können je nach Wartungsanforderung zwei Hauptmethoden angewendet werden: die Aktivierung eines Wartungsfensters für Knoten oder das „Fencing“ des gesamten Clusters.
Methode 1: Verwendung des Knoten-Wartungsfensters (nodeMaintenanceWindow)
Diese Methode ist ideal für geplante Wartungsarbeiten an den Kubernetes-Knoten, auf denen die PostgreSQL-Instanzen laufen. Sie informiert den Operator darüber, dass ein Knoten absichtlich außer Betrieb genommen wird, sodass der Operator keine automatischen Failover-Prozesse einleitet.
Anwendungsfall: Sie planen, die Kubernetes-Knoten zu aktualisieren oder andere Wartungsarbeiten auf der Infrastrukturebene durchzuführen.
Schritte:
- Aktivieren Sie das Wartungsfenster für den Cluster. Dies geschieht durch Setzen von inProgress: true im nodeMaintenanceWindow-Abschnitt der Cluster-Konfiguration. Sie können auch festlegen, ob das persistente Volume (PVC) wiederverwendet werden soll (reusePVC).
Mit kubectl patch:
kubectl patch cluster <cluster-name> -n <namespace> --type='merge' -p '{"spec":{"nodeMaintenanceWindow":{"inProgress":true,"reusePVC":true}}}'
YAML Beispiel:
apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: <cluster-name> namespace: <namespace> spec: # ... andere Cluster-Spezifikationen nodeMaintenanceWindow: inProgress: true reusePVC: true # Empfohlen, um Datenverlust zu vermeiden
- Führen Sie die Wartungsarbeiten an den Knoten durch (z. B.
kubectl drain <node-name>
). Der CNPG-Operator wird die Pods auf dem Knoten geordnet herunterfahren. - Deaktivieren Sie das Wartungsfenster, nachdem die Wartungsarbeiten abgeschlossen sind, um den normalen Betrieb wieder aufzunehmen.
Mitkubectl patch
:
kubectl patch cluster <cluster-name> -n <namespace> --type='merge' -p '{"spec":{"nodeMaintenanceWindow":{"inProgress":false}}}'
Methode 2: Fencing des gesamten Clusters
„Fencing“ ist eine drastischere Maßnahme, die den PostgreSQL-Prozess auf einer oder allen Instanzen stoppt, ohne die Pods selbst zu löschen. Dies versetzt die Datenbank effektiv in einen Offline-Zustand und ist nützlich, um den gesamten Cluster für Untersuchungen oder andere kritische Eingriffe anzuhalten.
Anwendungsfall: Sie müssen den gesamten Datenbankbetrieb sofort unterbrechen, um beispielsweise ein Problem zu diagnostizieren, ohne dass der Operator versucht, den Cluster zu „reparieren“.
Schritte:
- Fencen Sie alle Instanzen des Clusters. Dies wird durch Hinzufügen einer Annotation zum Cluster-Objekt erreicht.
Mitkubectl annotate
:
kubectl annotate cluster <cluster-name> -n <namespace> cnpg.io/fencedInstances='["*"]'
Das["*"]
ist ein Wildcard-Zeichen, das alle Instanzen des Clusters betrifft. - Überprüfen Sie den Status. Die PostgreSQL-Prozesse in den Pods werden beendet, aber die Pods laufen weiter. Anwendungen können keine Verbindung zur Datenbank herstellen.
- Heben Sie das Fencing auf, um den normalen Betrieb wiederherzustellen.
Mit kubectl annotate:
kubectl annotate cluster <cluster-name> -n <namespace> cnpg.io/fencedInstances-
Das-
am Ende des Befehls entfernt die Annotation.
Wichtige Überlegungen
- Anwendungsverbindungen: Bevor Sie den Cluster in einen Wartungsmodus versetzen, sollten Sie idealerweise die Anwendungen, die auf die Datenbank zugreifen, herunterfahren oder skalieren. Dies verhindert unerwartete Fehler und Verbindungsabbrüche auf der Anwendungsseite.
- Auswirkungen von Fencing: Wenn der primäre Server gefenct wird, findet kein Failover statt. Der Cluster ist für Schreibvorgänge nicht verfügbar, bis das Fencing aufgehoben wird.
kubectl cnpg
Plugin: Der CNPG-Operator verfügt über einkubectl
-Plugin, das einige dieser Operationen vereinfachen kann. Zum Beispiel kann der Befehlkubectl cnpg maintenance
verwendet werden, um dasnodeMaintenanceWindow
zu setzen.
Zusammenfassend lässt sich sagen, dass das nodeMaintenanceWindow
für geplante Infrastrukturwartungen gedacht ist, während das Fencing des gesamten Clusters die beste Methode ist, um den Datenbankbetrieb vollständig und sofort zu stoppen.