In Kubernetes-Umgebungen können Sie Ihre Datenbankressourcen dynamisch skalieren, wenn sich die Anforderungen an die Arbeitslast ändern. Verwenden Sie diese Skalierungsverfahren, wenn Sie Spanner Omni mit dem Helm-Diagramm bereitgestellt haben.
Hinweis
Bevor Sie Ihre Kubernetes-Bereitstellung skalieren, müssen Sie Folgendes tun:
Installieren Sie Helm und erstellen Sie eine Helm-Diagrammkonfiguration.
Als Best Practice empfehlen wir, die vertikale Skalierung auf mindestens 32 GB Arbeitsspeicher pro Server zu erhöhen, bevor Sie weitere Server hinzufügen, um horizontal zu skalieren.
Beschränkungen
Für die Skalierung in Kubernetes gelten die folgenden Einschränkungen:
Nur Nicht-Root-Server: Die horizontale Skalierung wird für Nicht-Root- Instanzen unterstützt. Die Skalierung von Root-Servern wird nicht unterstützt.
Speicherbeschränkungen für StatefulSets: Da Kubernetes
volumeClaimTemplatesunveränderlich sind, können Sie Pod-Festplatten nicht mit einem einzigenhelm upgradeBefehl erweitern. Stattdessen erfordert die Skalierung des Speichers manuelle Schritte zur Volume-Erweiterung.
Vertikal skalieren
Wenn Sie die CPU- oder Arbeitsspeicherressourcen für Ihre Server anpassen möchten, aktualisieren Sie Ihre Konfiguration mit einem Helm-Upgrade:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set resources.cpu=CPU_CORES \
--set resources.memory=MEMORY_LIMIT \
-n NAMESPACE
Ersetzen Sie Folgendes:
HELM_CHART_PATH: Der Pfad zu Ihrem Helm-Diagramm, z. B.oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: Die Version des Helm-Diagramms, z. B.0.2.0.CPU_CORES: Die Anzahl der vCPU-Kerne, die jedem Server-Pod zugewiesen werden sollen, z. B.8.MEMORY_LIMIT: Das RAM-Limit für jeden Server-Pod, z. B.32Gi.NAMESPACE: Der Kubernetes-Namespace der Bereitstellung, z. B.spanner-ns.
Horizontal skalieren
Wenn Sie horizontal skalieren möchten, fügen Sie Ihrer Bereitstellung weitere Server hinzu. Die horizontale Skalierung wird für Nicht-Root-Server unterstützt.
Nicht-Root-Server hinzufügen
Wenn Sie Nicht-Root-Server hinzufügen möchten, erhöhen Sie die Anzahl der Replikate in der Helm-Diagrammkonfiguration. Sie können alle Zonen einheitlich oder eine bestimmte Zone skalieren.
Einheitlich skalieren
Wenn Sie jede Zone in der Bereitstellung auf 15 Server skalieren möchten, führen Sie den folgenden Befehl aus:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set deployment.replicasPerZone=REPLICAS \
-n NAMESPACE
Ersetzen Sie Folgendes:
HELM_CHART_PATH: Der Pfad zu Ihrem Helm-Diagramm, z. B.oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: Die Version des Helm-Diagramms, z. B.0.2.0.REPLICAS: Die Zielanzahl der Serverreplikate pro Zone, z. B.15.NAMESPACE: Der Kubernetes-Namespace, z. B.spanner-ns.
Bestimmte Zone skalieren
Wenn in Ihrer ersten Bereitstellung unterschiedliche Serveranzahlen für einzelne Zonen konfiguriert wurden, können Sie eine einzelne Zone auswählen. Wenn Sie beispielsweise die Replikate der ersten Zone am ersten Standort auf 15 erhöhen möchten, führen Sie den folgenden Befehl aus:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set locations[0].zones[0].replicas=REPLICAS \
-n NAMESPACE
Ersetzen Sie REPLICAS durch die Zielanzahl der Zonenreplikate, z. B. 15.
Wenn Sie prüfen möchten, ob die neuen Server der Bereitstellung erfolgreich beigetreten sind, fragen Sie die Spanner Omni CLI ab, um die Bereitstellungsserver aufzulisten, oder rufen Sie Ihr Grafana-Dashboard auf.
spanner deployment servers list \
--zone=ZONE \
--deployment-endpoint=ENDPOINT
Ersetzen Sie Folgendes:
ZONE: Die Zone, die Sie auflisten möchten, z. B.us-central1-a.ENDPOINT: Der externe Endpunkt Ihrer Bereitstellung, z. B.${ENDPOINT}:15000.
Nicht-Root-Server entfernen
Das Herunterskalieren von Servern erfordert zusätzliche Schritte, da das System Datenpartitionen sicher von außer Betrieb genommenen Servern verschieben muss. Da Kubernetes-StatefulSets Pods vom höchsten zum niedrigsten Index entfernen, müssen Sie zuerst die Nicht-Root-Server mit dem höchsten Index entfernen.
So reduzieren Sie die Anzahl der Server:
Listen Sie die Server in Ihrer Zone auf, um Kandidaten für die Entfernung zu identifizieren:
spanner deployment servers list \ --zone=ZONE \ --deployment-endpoint=ENDPOINTBeispielausgabe:
NAME HOST PORT_BASE ROOT STATE zones/us-central1-a/servers/spanner-a-0.pod.spanner-ns:15000 spanner-a-0.pod.spanner-ns 15000 true - zones/us-central1-a/servers/spanner-a-1.pod.spanner-ns:15000 spanner-a-1.pod.spanner-ns 15000 - -Löschen Sie den außer Betrieb genommenen Nicht-Root-Server mit dem höchsten Index (z. B.
spanner-a-1.pod.spanner-ns:15000):spanner deployment servers delete SERVER_NAME \ --zone=ZONE \ --deployment-endpoint=ENDPOINTErsetzen Sie
SERVER_NAMEdurch die Server-ID, z. B.spanner-a-1.pod.spanner-ns:15000.Prüfen Sie die Serverliste, bis der Zielserver aus der Liste entfernt wurde. Nach dem Löschen wechselt der Server in einen fehlerhaften Zustand im System und wird aus dem aktiven Dienstpfad entfernt.
Skalieren Sie die Helm-Bereitstellung herunter, indem Sie einen Helm-Upgrade-Befehl ausführen, um die Zielanzahl der Replikate zu erreichen. Wenn Sie beispielsweise die Replikate pro Zone auf
1Pod reduzieren möchten, führen Sie den folgenden Befehl aus:helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set deployment.replicasPerZone=REPLICAS \ -n NAMESPACEErsetzen Sie
REPLICASdurch die aktualisierte Anzahl der Replikate, z. B.1.Löschen Sie die Kubernetes-PVCs (Persistent Volume Claims), die mit den entfernten Pods verknüpft sind. Um versehentlichen Datenverlust zu vermeiden, werden PVCs von Helm und Kubernetes nicht automatisch gelöscht, wenn ein StatefulSet herunterskaliert wird. Löschen Sie die PVCs manuell, um den Speicher vollständig freizugeben:
kubectl delete pvc LOGS_PVC DATA_PVC -n NAMESPACEBeispiel: So löschen Sie die Protokoll- und Datenvolumes für
spanner-a-1im Namespacespanner-ns:kubectl delete pvc logs-volume-spanner-a-1 data-volume-spanner-a-1 -n spanner-ns
spanner deployment servers delete
Zone hinzufügen
Wenn Sie Ihrer Bereitstellung eine neue Zone hinzufügen, erhöht sich die Verfügbarkeit und Ihre Datenbank ist vor Ausfällen in einer einzelnen Zone geschützt.
Mit dem folgenden Befehl wird beispielsweise eine aktive Einzelzonen
bereitstellung in Google Kubernetes Engine (GKE) in der us-east1-b Zone der
Region us initialisiert:
helm upgrade --install spanner-omni HELM_CHART_PATH \
--version VERSION \
--set resources.cpu=2 \
--set resources.memory=8Gi \
--set global.platform=gke \
--set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"}]}]' \
-n NAMESPACE
Führen Sie die folgenden Schritte aus, um dieser Konfiguration die Zone us-east1-c hinzuzufügen:
Starten Sie die Pods in der neuen Zone, indem Sie den Befehl
helm upgradeausführen und einen aktualisierten JSON-Block übergeben, der die neue Zone enthält:helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"},{"name":"us-east1-c","shortName":"east-c"}]}]' \ -n NAMESPACEFügen Sie die neue Zone mit der Spanner Omni CLI hinzu. Warten Sie, bis die Root-Server-Pods in der neu erstellten Zone den Status
Runningund „Bereit“ erreicht haben. Führen Sie dann den Befehl zur Zonenerstellung aus:spanner deployment zones create NEW_ZONE \ --location=LOCATION \ --root-servers=ROOT_SERVERS_LIST \ --deployment-endpoint=ENDPOINTErsetzen Sie Folgendes:
NEW_ZONE: Die ID der Zone, die hinzugefügt werden soll, z. B.us-east1-c.LOCATION: Der Bereitstellungsort, z. B.us.ROOT_SERVERS_LIST: Eine durch Kommas getrennte Liste der Root-Server-Endpunkte in der neuen Zone, z. B.spanner-east-c-0.pod.spanner-ns:15000,spanner-east-c-1.pod.spanner-ns:15000,spanner-east-c-2.pod.spanner-ns:15000.ENDPOINT: Der externe Bereitstellungsendpunkt, z. B.${ENDPOINT}:15000.
Warten Sie, bis die Zonenerstellung abgeschlossen ist. Die Replikation vorhandener Datenbankschemas und ‑tabellen in eine neue Zone dauert einige Zeit. Überwachen Sie den Fortschritt der Zonensynchronisierung, indem Sie die Bereitstellungszonen auflisten:
spanner deployment zones list --deployment-endpoint=ENDPOINT
Zone entfernen
Sie können eine aktive Zone aus Ihrer Bereitstellung mit mehreren Zonen außer Betrieb nehmen, um Ressourcen zu reduzieren oder Änderungen an der Topologie vorzunehmen.
Entfernen Sie die im vorherigen Abschnitt erstellte Zone us-east1-c. Führen Sie dazu die folgenden Schritte aus:
Löschen Sie die Zone und starten Sie die Zonenentfernung in Spanner Omni:
spanner deployment zones delete ZONE --deployment-endpoint=ENDPOINTErsetzen Sie
ZONEdurch die zu entfernende Zone, z. B.us-east1-c.Prüfen Sie, ob die Zone entfernt wurde. Führen Sie einen List-Befehl aus und warten Sie, bis die Zone nicht mehr in der Ausgabe angezeigt wird:
spanner deployment zones list --deployment-endpoint=ENDPOINTEntfernen Sie die Server aus dem Kubernetes-Cluster, indem Sie einen Helm-Upgrade-Befehl ausführen und einen aktualisierten JSON-Block mit den Standorten übergeben, der die entfernte Zone nicht enthält:
helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"}]}]' \ -n NAMESPACE
Speicher skalieren
Da Kubernetes-volumeClaimTemplates unveränderlich sind, können Sie die Speicherkapazitäten von Pods nicht direkt mit dem Befehl helm upgrade erhöhen. Stattdessen müssen Sie eine manuelle Volume-Erweiterung durchführen. Weitere Informationen finden Sie im
Leitfaden zur Volume-Erweiterung für GKE-StatefulSets.
So erweitern Sie Ihren Festplattenspeicher:
Definieren Sie die Parameter für die Volume-Erweiterung als Umgebungsvariablen in Ihrem Terminal:
NEW_SIZE="NEW_SIZE" NAMESPACE="NAMESPACE" RELEASE_NAME="spanner-omni" STATEFULSET_NAMES="STATEFULSET_NAME_1 STATEFULSET_NAME_2 STATEFULSET_NAME_3" HELM_CHART_PATH="HELM_CHART_PATH" VERSION="VERSION"Ersetzen Sie Folgendes:
NEW_SIZE: Die Zielgröße der Speicherkapazität, z. B.200Gi.NAMESPACE: Der Kubernetes-Namespace, z. B.spanner-ns.STATEFULSET_NAME_1,STATEFULSET_NAME_2, ...: Die Namen der StatefulSets in Ihrer Bereitstellung, die in der Regel den Kurznamen Ihrer Zonen entsprechen (z. B.spanner-east-b spanner-east-c).HELM_CHART_PATH: Der Pfad zu Ihrem Helm-Diagramm, z. B.oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: Die Version des Helm-Diagramms, z. B.0.2.0.
Führen Sie die Befehle aus, um die PVCs zu patchen, die StatefulSets zu löschen (die Backend-Pods bleiben erhalten) und die Helm-Bereitstellung zu aktualisieren:
# Patch all associated PVCs directly. for pvc in $(kubectl get pvc -n $NAMESPACE \ -l app.kubernetes.io/instance=$RELEASE_NAME \ -o name | grep "data-volume"); do kubectl patch $pvc -n $NAMESPACE -p "{\"spec\":{\"resources\":{\"requests\":{\"storage\":\"$NEW_SIZE\"}}}}" done # Delete the StatefulSet while leaving backend pods intact (orphan cascade). kubectl delete statefulset $STATEFULSET_NAMES -n $NAMESPACE --cascade=orphan # Run Helm upgrade to align the templates with the expanded size. helm upgrade $RELEASE_NAME $HELM_CHART_PATH \ --version $VERSION \ --reuse-values \ --set storage.data.size=$NEW_SIZE \ -n $NAMESPACE
Nächste Schritte
- Erfahren Sie, wie Sie eine Bereitstellung verwalten.