Les environnements Kubernetes vous permettent de faire évoluer vos ressources de base de données de manière dynamique en fonction de l'évolution des exigences de la charge de travail. Suivez ces procédures de scaling si vous avez déployé Spanner Omni à l'aide du chart Helm.
Avant de commencer
Avant de procéder au scaling de votre déploiement Kubernetes, vous devez effectuer les opérations suivantes :
Téléchargez et installez la CLI Spanner Omni.
Installez Helm et créez une configuration de chart Helm.
Nous vous recommandons d'effectuer un scaling vertical jusqu'à au moins 32 Go de mémoire par serveur avant d'ajouter d'autres serveurs pour effectuer un scaling horizontal.
Limites
Le scaling dans Kubernetes présente les limites suivantes :
Serveurs non racine uniquement : le scaling horizontal est compatible avec les instances non racine. Le scaling du serveur racine n'est pas pris en charge.
Contraintes de stockage StatefulSet : étant donné que les objets
volumeClaimTemplatesKubernetes sont immuables, vous ne pouvez pas étendre les disques de pod à l'aide d'une seule commandehelm upgrade. À la place, le scaling du stockage nécessite des étapes d'extension manuelle du volume.
Effectuer un scaling vertical
Pour ajuster les ressources de processeur ou de mémoire de vos serveurs, mettez à jour votre configuration à l'aide d'une mise à niveau Helm :
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set resources.cpu=CPU_CORES \
--set resources.memory=MEMORY_LIMIT \
-n NAMESPACE
Remplacez les éléments suivants :
HELM_CHART_PATH: chemin d'accès à votre chart Helm, par exempleoci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: version du chart Helm, par exemple1.1.0.CPU_CORES: nombre de cœurs de processeur virtuel à attribuer à chaque pod de serveur, par exemple8.MEMORY_LIMIT: limite de RAM pour chaque pod de serveur, par exemple32Gi.NAMESPACE: espace de noms Kubernetes du déploiement, par exemplespanner-ns.
Effectuer un scaling horizontal
Pour effectuer un scaling horizontal, ajoutez des serveurs à votre déploiement. Le scaling horizontal est compatible avec les serveurs non racine.
Ajouter des serveurs non racine
Pour ajouter des serveurs non racine, augmentez le nombre d'instances répliquées dans la configuration du chart Helm. Vous pouvez effectuer un scaling uniforme de toutes les zones ou un scaling d'une zone spécifique.
Mettre à l'échelle de manière uniforme
Pour faire passer chaque zone du déploiement à 15 serveurs, exécutez la commande suivante :
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set deployment.replicasPerZone=REPLICAS \
-n NAMESPACE
Remplacez les éléments suivants :
HELM_CHART_PATH: chemin d'accès à votre chart Helm, par exempleoci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: version du chart Helm, par exemple1.1.0.REPLICAS: nombre cible d'instances répliquées de serveur par zone, par exemple15.NAMESPACE: espace de noms Kubernetes (par exemple,spanner-ns).
Effectuer un scaling d'une zone spécifique
Si votre déploiement initial a configuré différents nombres de serveurs pour des zones individuelles, vous pouvez cibler une seule zone. Par exemple, pour augmenter à 15 le nombre d'instances répliquées de la première zone du premier emplacement, exécutez la commande suivante :
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set locations[0].zones[0].replicas=REPLICAS \
-n NAMESPACE
Remplacez REPLICAS par le nombre d'instances répliquées de votre zone cible, par exemple 15.
Pour vérifier que les nouveaux serveurs ont bien rejoint le déploiement, interrogez la CLI Spanner Omni pour lister les serveurs de déploiement ou consultez votre tableau de bord Grafana.
spanner deployment servers list \
--zone=ZONE \
--deployment-endpoint=ENDPOINT
Remplacez les éléments suivants :
ZONE: zone que vous souhaitez lister, par exempleus-central1-a.ENDPOINT: point de terminaison externe de votre déploiement, par exemple${ENDPOINT}:15000.
Supprimer les serveurs non racine
La réduction de la capacité des serveurs nécessite des étapes supplémentaires, car le système doit déplacer en toute sécurité les partitions de données des serveurs mis hors service. Étant donné que les StatefulSets Kubernetes suppriment les pods de l'index le plus élevé au plus bas, vous devez d'abord cibler les serveurs non racine avec l'index le plus élevé pour la suppression.
Pour réduire le nombre de serveurs, procédez comme suit :
Répertoriez les serveurs de votre zone pour identifier ceux à supprimer :
spanner deployment servers list \ --zone=ZONE \ --deployment-endpoint=ENDPOINTExemple de résultat :
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 - -Supprimez le serveur non racine mis hors service avec l'index le plus élevé (par exemple,
spanner-a-1.pod.spanner-ns:15000) :spanner deployment servers delete SERVER_NAME \ --zone=ZONE \ --deployment-endpoint=ENDPOINTRemplacez
SERVER_NAMEpar l'identifiant du serveur, par exemplespanner-a-1.pod.spanner-ns:15000.Vérifiez la liste des serveurs jusqu'à ce que le serveur cible soit supprimé de la liste. Après la suppression, le serveur passe à un état non opérationnel dans le système et est supprimé du chemin d'accès au service actif.
Réduisez la capacité du déploiement Helm en exécutant une commande de mise à niveau Helm pour qu'elle corresponde au nombre d'instances répliquées cible. Par exemple, pour réduire le nombre d'instances répliquées par zone à
1pod, exécutez la commande suivante :helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set deployment.replicasPerZone=REPLICAS \ -n NAMESPACERemplacez
REPLICASpar le nombre d'instances répliquées mis à jour, par exemple1.Supprimez les demandes de volumes persistants (PVC) Kubernetes associées aux pods supprimés. Pour éviter toute perte accidentelle de données, Helm et Kubernetes ne suppriment pas automatiquement les PVC lors du scaling à la baisse d'un StatefulSet. Supprimez manuellement les PVC pour récupérer complètement l'espace de stockage :
kubectl delete pvc LOGS_PVC DATA_PVC -n NAMESPACEPar exemple, pour supprimer les volumes de journaux et de données pour
spanner-a-1dans l'espace de nomsspanner-ns:kubectl delete pvc logs-volume-spanner-a-1 data-volume-spanner-a-1 -n spanner-ns
Ajouter une zone
L'ajout d'une zone à votre déploiement augmente la disponibilité et protège votre base de données contre les pannes d'une seule zone.
Par exemple, la commande suivante initialise un déploiement à zone unique en cours d'exécution sur Google Kubernetes Engine (GKE) dans la zone us-east1-b de la région us :
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
Ajoutez la zone us-east1-c à cette configuration en procédant comme suit :
Lancez les pods dans la nouvelle zone en exécutant la commande
helm upgradeet en transmettant un bloc JSON mis à jour qui inclut la nouvelle zone d'emplacement :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 NAMESPACEAjoutez la nouvelle zone à l'aide de la CLI Spanner Omni. Attendez que les pods du serveur racine de la zone nouvellement créée passent à l'état
Runninget prêt. Ensuite, exécutez la commande de création de zone :spanner deployment zones create NEW_ZONE \ --location=LOCATION \ --root-servers=ROOT_SERVERS_LIST \ --deployment-endpoint=ENDPOINTRemplacez les éléments suivants :
NEW_ZONE: identifiant de la zone à ajouter, par exempleus-east1-c.LOCATION: emplacement du déploiement (par exemple,us).ROOT_SERVERS_LIST: liste de points de terminaison de serveur racine séparés par une virgule dans la nouvelle zone, par exemplespanner-east-c-0.pod.spanner-ns:15000,spanner-east-c-1.pod.spanner-ns:15000,spanner-east-c-2.pod.spanner-ns:15000.ENDPOINT: point de terminaison de déploiement externe, par exemple${ENDPOINT}:15000.
Attendez que la création de la zone soit terminée. La réplication des schémas et des tables de base de données existants vers une nouvelle zone prend du temps. Surveillez la progression de la synchronisation des zones en listant les zones de déploiement :
spanner deployment zones list --deployment-endpoint=ENDPOINT
Supprimer une zone
Vous pouvez mettre hors service une zone active de votre déploiement multizone pour réduire les ressources ou vous aligner sur les modifications de topologie.
Supprimez la zone us-east1-c créée dans la section précédente en procédant comme suit :
Supprimez la zone et lancez sa suppression dans Spanner Omni :
spanner deployment zones delete ZONE --deployment-endpoint=ENDPOINTRemplacez
ZONEpar la zone à supprimer (par exemple,us-east1-c).Vérifiez que la zone a bien été supprimée. Exécutez une commande de liste et attendez que la zone n'apparaisse plus dans le résultat :
spanner deployment zones list --deployment-endpoint=ENDPOINTSupprimez les serveurs du cluster Kubernetes en exécutant une commande helm upgrade et en transmettant un bloc JSON d'emplacements mis à jour qui exclut la zone supprimée :
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
Faire évoluer le stockage
Étant donné que les volumeClaimTemplates Kubernetes sont immuables, vous ne pouvez pas augmenter les capacités de stockage des pods à l'aide de la commande helm upgrade directement. Vous devez plutôt effectuer une expansion manuelle du volume. Pour en savoir plus, consultez le
guide d'expansion de volume StatefulSet GKE.
Pour étendre votre espace de stockage sur disque, procédez comme suit :
Définissez les paramètres de l'extension de volume en tant que variables d'environnement dans votre 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"Remplacez les éléments suivants :
NEW_SIZE: taille de la capacité de stockage cible, par exemple200Gi.NAMESPACE: espace de noms Kubernetes (par exemple,spanner-ns).STATEFULSET_NAME_1,STATEFULSET_NAME_2, … : noms des StatefulSets de votre déploiement, correspondant généralement aux noms courts de vos zones (par exemple,spanner-east-b spanner-east-c).HELM_CHART_PATH: chemin d'accès à votre chart Helm (par exemple,oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni).VERSION: version du chart Helm, par exemple1.1.0.
Exécutez les commandes pour corriger les PVC, supprimer les StatefulSets (en laissant les pods de backend intacts) et mettre à niveau le déploiement Helm :
# 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
Étapes suivantes
- Découvrez comment gérer un déploiement.