Ce document explique comment mettre à niveau un déploiement Spanner Omni d'une version antérieure vers une version ultérieure.
Spanner Omni utilise une machine à états de déploiement progressif et asynchrone pour garantir des mises à niveau sécurisées sans interruption de service. La mise à niveau par phases vous permet d'effectuer les opérations suivantes :
- Appliquez les mises à jour du schéma de base de données.
- Vérifiez la compatibilité binaire lors d'un redémarrage progressif.
- Rétablissez la version précédente si vous détectez des erreurs avant la finalisation.
Workflow de mise à niveau
Le processus de mise à niveau de Spanner Omni comporte plusieurs phases séquentielles :
- Phase de schéma : prépare le déploiement en exécutant des migrations de schéma de base de données internes à l'aide de la version binaire cible. Les migrations de schéma ne peuvent pas être annulées, mais elles sont rétrocompatibles avec la version binaire antérieure.
- Phase binaire : met à jour le fichier binaire du serveur ou l'image de conteneur sur tous les serveurs du déploiement à l'aide d'un redémarrage progressif. Si vous détectez des erreurs, vous pouvez effectuer un rollback du fichier binaire ou de l'image de conteneur à la version précédente à tout moment avant le début de la finalisation.
- Phase d'activation des fonctionnalités : active les fonctionnalités compatibles avec la version et commence après la mise à niveau du binaire sur tous les serveurs. Cette phase peut ne pas s'appliquer si la mise à niveau n'inclut pas de fonctionnalités compatibles avec la version. Elle peut nécessiter plusieurs cycles si les fonctionnalités sont interdépendantes. Pour les phases facultatives qui acceptent le rollback, vous pouvez lancer un rollback à l'aide de la CLI Spanner Omni.
- Phase de finalisation : finalise le déploiement et scelle la version cible. Une fois la phase de finalisation commencée, les annulations ne sont plus possibles.
Avant de commencer
Avant de mettre à niveau votre déploiement Spanner Omni, assurez-vous de remplir les conditions préalables suivantes :
- Vous disposez d'un déploiement Spanner Omni en cours d'exécution. Pour en savoir plus, consultez Créer un déploiement sur Kubernetes ou Créer un déploiement sur des VM.
- Vous avez téléchargé et installé la CLI Spanner Omni.
- Vous avez accès au réseau pour tous les ports internes Spanner Omni (TCP 15000 à 15027) depuis la machine sur laquelle vous exécutez les commandes CLI, ou vous avez accès au réseau pour le point de terminaison de votre déploiement.
- Si votre déploiement utilise le chiffrement TLS (Transport Layer Security) ou mTLS (mutual TLS), assurez-vous que des certificats valides sont disponibles dans votre répertoire de base sous
BASE_DIR/tlsou montés dans votre cluster. - Vous avez identifié votre version cible :
- Pour les déploiements de VM : téléchargez le package de version cible
spanner-omni-server-TARGET_VERSION.tar.gz. - Pour les déploiements Helm et Kubernetes : identifiez l'image de conteneur cible dans Artifact Registry, par exemple
us-docker.pkg.dev/spanner-omni/images/spanner-omni:TARGET_VERSION.
- Pour les déploiements de VM : téléchargez le package de version cible
Étape 1 : Préparez la mise à niveau du schéma
Pour lancer la mise à niveau, préparez le déploiement pour la version cible. Au cours de cette phase, Spanner Omni exécute des migrations de schéma de base de données internes tandis que les serveurs existants continuent de diffuser du trafic.
Sélectionnez l'onglet correspondant à votre environnement de déploiement :
VM
Dans les déploiements de VM, téléchargez et extrayez le package de version cible, puis utilisez la CLI Spanner Omni extraite pour lancer la préparation du déploiement.
Connectez-vous à un serveur de votre déploiement qui dispose d'un accès réseau à tous les ports internes de Spanner Omni (TCP 15000 à 15027).
Téléchargez et extrayez le package de version cible :
tar -xzf spanner-omni-server-TARGET_VERSION.tar.gz -C EXTRACT_DIRRemplacez les éléments suivants :
TARGET_VERSION: version cible vers laquelle effectuer la mise à niveau, par exemple2026.r4-lts.EXTRACT_DIR: répertoire dans lequel vous extrayez le package de version, par exemple/tmp/target_spanner/.
Lancez la préparation du déploiement en exécutant la commande
rollouts prepareà partir de la CLI extraite :EXTRACT_DIR/bin/spanner deployment rollouts prepare \ --target-server-binary=EXTRACT_DIR/bin/spanner_server \ --root-server=ROOT_SERVERS \ --base-dir=BASE_DIRRemplacez les éléments suivants :
EXTRACT_DIR: répertoire d'extraction contenant la CLIbin/spannercible et le binairebin/spanner_server.ROOT_SERVERS: un point de terminaison de serveur racine ou une liste de plusieurs serveurs racines séparés par une virgule, par exemplelocalhost:15000ouserver1:15000,server2:15000,server3:15000.BASE_DIR: répertoire de base pour Spanner Omni, par exemple/spanner.- Si votre déploiement utilise le chiffrement TLS ou mTLS, ajoutez
--ca-certificate-file=CA_CERT_FILEet--client-certificate-directory=CERT_DIRpointant vers des certificats valides.
Helm
Dans les déploiements Helm, la préparation du schéma dépend du type de déploiement que vous exécutez (multiserveur ou monoserveur) :
Déploiements multiserveurs (haute disponibilité / production) : Helm gère automatiquement la préparation du schéma. Lorsque vous exécutez
helm upgradedans Étape 3 : Mettez à jour l'image binaire ou l'image de conteneur, le chart Helm déclenche l'exécution du job de hook de pré-mise à niveauspanner-prepare-for-upgradepour exécuter les migrations de schéma avant de mettre à jour les StatefulSets. Passez directement à l'étape 2 : Vérifiez l'état du déploiement actif.Déploiements sur un seul serveur (
deployment.singleServer=true) : étant donné que le mode à serveur unique lie les services internes strictement à l'interface de bouclage (127.0.0.1), les jobs réseau ne peuvent pas les atteindre. Exécutez la migration du schéma localement à l'intérieur du pod en cours d'exécution à l'aide d'un conteneur de débogage éphémère avec l'image de conteneur cible :kubectl debug pod/POD_NAME -n NAMESPACE \ --image=us-docker.pkg.dev/spanner-omni/images/spanner-omni:TARGET_VERSION \ --container=upgrade-prepare -i \ -- /google/spanner/bin/spanner_server prepare_for_upgrade --root_server=127.0.0.1Remplacez les éléments suivants :
POD_NAME: nom du pod de serveur, par exemplespanner-a-0.NAMESPACE: espace de noms Kubernetes du déploiement (par exemple,spanner-ns).TARGET_VERSION: version cible vers laquelle effectuer la mise à niveau, par exemple2026.r4-lts.
Kubernetes autonome
Si vous déployez Spanner Omni sur Kubernetes sans Helm, exécutez un job par lot Kubernetes autonome pour exécuter les migrations de schéma sur le serveur racine actif à l'aide de l'image cible.
Créez un fichier nommé
spanner-prepare-upgrade.yamlavec le fichier manifeste du job suivant :apiVersion: batch/v1 kind: Job metadata: namespace: NAMESPACE name: spanner-prepare-for-upgrade spec: # Fail fast on the first error to stop the rollout immediately. backoffLimit: 0 template: metadata: namespace: NAMESPACE spec: restartPolicy: Never containers: - name: spanner-upgrade image: us-docker.pkg.dev/spanner-omni/images/spanner-omni:TARGET_VERSION command: ["/google/spanner/bin/spanner_server"] args: - "prepare_for_upgrade" - "--root_server=ROOT_SERVER_ENDPOINT" volumeMounts: - name: tls-certs mountPath: "/spanner/tls" readOnly: true - name: spanner-data mountPath: /spanner volumes: - name: tls-certs secret: secretName: tls-certs optional: true defaultMode: 256 - name: spanner-data emptyDir: {}Remplacez les éléments suivants :
NAMESPACE: espace de noms Kubernetes du déploiement (par exemple,spanner-ns).TARGET_VERSION: version cible vers laquelle effectuer la mise à niveau, par exemple2026.r4-lts.ROOT_SERVER_ENDPOINT: point de terminaison d'un pod de serveur racine actif, par exemplespanner-a-0.pod.spanner-ns.
Appliquez le fichier manifeste pour exécuter le job de préparation :
kubectl apply -f spanner-prepare-upgrade.yaml
Étape 2 : Vérifiez l'état du déploiement actif
Une fois l'étape de préparation terminée, vérifiez que le déploiement a été créé et examinez l'état de ses phases.
Listez les déploiements actifs pour récupérer l'ID de déploiement :
spanner deployment rollouts list \ --deployment-endpoint=DEPLOYMENT_ENDPOINTRemplacez
DEPLOYMENT_ENDPOINTpar le point de terminaison d'un serveur de votre déploiement, par exemplelocalhost:15000ouspanner-a-0.pod.spanner-ns:15000.Le résultat ressemble à ce qui suit :
NAME STATE TARGET_VERSION START_TIME END_TIME rollouts/1788942172101727 IN_PROGRESS 2026.r3-beta 2026-09-09T08:22:52.101727Z -Inspectez l'état détaillé de la phase de déploiement :
spanner deployment rollouts describe ROLLOUT_ID \ --deployment-endpoint=DEPLOYMENT_ENDPOINTRemplacez les éléments suivants :
ROLLOUT_ID: ID numérique du déploiement, par exemple1788942172101727.DEPLOYMENT_ENDPOINT: point de terminaison d'un serveur dans votre déploiement.
Le résultat ressemble à ce qui suit :
name: rollouts/1788942172101727 phases: - name: rollouts/1788942172101727/phases/schema startTime: "2026-09-09T08:22:52.101727Z" state: SUCCEEDED - name: rollouts/1788942172101727/phases/binary startTime: "2026-09-09T08:23:29.585375Z" state: IN_PROGRESS - name: rollouts/1788942172101727/phases/finalize state: PENDING sourceVersion: 2026.r2-beta.3 startTime: "2026-09-09T08:22:52.101727Z" state: IN_PROGRESS targetVersion: 2026.r3-betaAvant de continuer, vérifiez les états suivants des phases :
schema: afficheSUCCEEDED, ce qui indique que les migrations internes du schéma de base de données sont terminées.binary: afficheIN_PROGRESS, ce qui indique que le moteur de déploiement est prêt pour les mises à jour binaires.finalize: affichePENDING, en attente de la fin de la phase binaire.
Étape 3 : Mettez à jour l'image binaire ou de conteneur
Une fois la phase de schéma réussie, mettez à jour l'image binaire ou de conteneur du serveur en cours d'exécution sur tous les nœuds du déploiement vers la version cible.
Sélectionnez l'onglet correspondant à votre environnement de déploiement :
VM
Dans les déploiements de VM, mettez à jour le binaire spanner_server sur toutes les VM à l'aide d'un redémarrage progressif :
- Mettez à jour un domaine ou une zone de défaillance à la fois : dans les déploiements multizones, mettez à jour les serveurs d'une zone et vérifiez la stabilité avant de mettre à jour la zone suivante. Cela permet de s'assurer que le groupe de consensus Paxos conserve le quorum.
- Redémarrage progressif : redémarrez au maximum 5% des serveurs simultanément pour maintenir la disponibilité continue des requêtes.
- Vérifiez l'état du serveur : assurez-vous que tous les serveurs redémarrés sont opérationnels et ont rejoint le cluster avant de mettre à jour le prochain domaine de défaillance.
Helm
Dans les déploiements Helm, exécutez helm upgrade tout en conservant vos valeurs de configuration existantes en transmettant --reuse-values ou en fournissant un fichier de valeurs :
Déploiements multiserveurs (production / haute disponibilité) :
helm upgrade spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \ --version CHART_VERSION \ -n NAMESPACE \ --reuse-values \ --set image.tag=TARGET_VERSION \ --timeout 30mHelm exécute automatiquement la phase 1 à l'aide du hook de pré-mise à niveau, puis lance une mise à jour progressive séquentielle, zone par zone, des StatefulSets (
rollout.staggered: true).Déploiements sur un seul serveur (
deployment.singleServer=true) :Transmettez explicitement
--set skipPrepareUpgrade=truepour que Helm ignore le job de hook de pré-mise à niveau, car vous avez déjà terminé la phase 1 en local :helm upgrade spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \ --version CHART_VERSION \ -n NAMESPACE \ --reuse-values \ --set skipPrepareUpgrade=true \ --set image.tag=TARGET_VERSION \ --timeout 30m
Remplacez les éléments suivants :
CHART_VERSION: version cible du chart Helm, par exemple1.0.0.NAMESPACE: espace de noms Kubernetes du déploiement (par exemple,spanner-ns).TARGET_VERSION: tag de l'image de conteneur cible, par exemple2026.r4-lts.
Kubernetes autonome
Dans les déploiements Kubernetes personnalisés sans Helm, mettez à jour l'image de conteneur dans vos spécifications StatefulSet ou Deployment sur TARGET_VERSION.
Effectuez une mise à jour progressive dans les domaines de défaillance, en mettant à jour une zone à la fois et en redémarrant au maximum 5% des pods simultanément pour préserver le quorum.
Étape 4 : Vérifier la progression de la phase binaire
Une fois que vous avez mis à jour tous les serveurs ou pods vers la version cible, vérifiez que la phase binaire s'est terminée avec succès.
Vérifiez l'état de la phase de déploiement :
spanner deployment rollouts describe ROLLOUT_ID \
--deployment-endpoint=DEPLOYMENT_ENDPOINT
Remplacez les éléments suivants :
ROLLOUT_ID: ID numérique du déploiement, par exemple1788942172101727.DEPLOYMENT_ENDPOINT: point de terminaison d'un serveur dans votre déploiement.
Le résultat ressemble à ce qui suit :
name: rollouts/1788942172101727
phases:
- name: rollouts/1788942172101727/phases/schema
startTime: "2026-09-09T08:22:52.101727Z"
state: SUCCEEDED
- name: rollouts/1788942172101727/phases/binary
startTime: "2026-09-09T08:23:29.585375Z"
state: SUCCEEDED
- name: rollouts/1788942172101727/phases/finalize
state: PENDING
sourceVersion: 2026.r2-beta.3
startTime: "2026-09-09T08:22:52.101727Z"
state: IN_PROGRESS
targetVersion: 2026.r3-beta
Vérifiez que l'état de la phase binary passe à SUCCEEDED. L'état global du déploiement reste IN_PROGRESS jusqu'à ce que toutes les phases restantes soient terminées. Une fois que phases/binary passe à SUCCEEDED, le déploiement est prêt à passer aux phases restantes.
Étape 5 : Planifier et exécuter les phases restantes
Une fois la phase binaire terminée et la stabilité de votre déploiement vérifiée, planifiez les phases restantes du déploiement jusqu'à la phase finalize.
La phase finalize (dernière phase d'un déploiement) scelle la nouvelle version dans le déploiement. Vous pouvez exécuter cette commande à partir de n'importe quelle machine ayant un accès réseau au service Spanner Omni en spécifiant --deployment-endpoint.
Pour chaque phase restante à l'état PENDING (par exemple, enable_features si elle est présente, suivie de finalize), procédez comme suit :
Planifiez la phase :
spanner deployment rollouts phases schedule PHASE_NAME \ --rollout=ROLLOUT_ID \ --deployment-endpoint=DEPLOYMENT_ENDPOINTRemplacez les éléments suivants :
PHASE_NAME: nom de la phase à planifier (par exemple,finalizeouenable_features).ROLLOUT_ID: ID numérique du déploiement, par exemple1788942172101727.DEPLOYMENT_ENDPOINT: point de terminaison d'un serveur dans votre déploiement.
Le résultat indique que la phase planifiée est
IN_PROGRESS:name: rollouts/1788942172101727 phases: - name: rollouts/1788942172101727/phases/schema startTime: "2026-09-09T08:22:52.101727Z" state: SUCCEEDED - name: rollouts/1788942172101727/phases/binary startTime: "2026-09-09T08:23:29.585375Z" state: SUCCEEDED - name: rollouts/1788942172101727/phases/finalize state: IN_PROGRESS sourceVersion: 2026.r2-beta.3 startTime: "2026-09-09T08:22:52.101727Z" state: IN_PROGRESS targetVersion: 2026.r3-betaAttendez que la phase réussisse, puis vérifiez son état :
spanner deployment rollouts describe ROLLOUT_ID \ --deployment-endpoint=DEPLOYMENT_ENDPOINTRépétez ces étapes pour chaque phase restante jusqu'à ce que toutes les phases jusqu'à
finalize(inclus) soient terminées.Une fois la dernière phase (
finalize) terminée, toutes les phases et l'état global du déploiement passent àSUCCEEDED:endTime: "2026-09-09T08:45:43.949702Z" name: rollouts/1788942172101727 phases: - name: rollouts/1788942172101727/phases/schema startTime: "2026-09-09T08:22:52.101727Z" state: SUCCEEDED - name: rollouts/1788942172101727/phases/binary startTime: "2026-09-09T08:23:29.585375Z" state: SUCCEEDED - name: rollouts/1788942172101727/phases/finalize startTime: "2026-09-09T08:45:43.898111Z" state: SUCCEEDED sourceVersion: 2026.r2-beta.3 startTime: "2026-09-09T08:22:52.101727Z" state: SUCCEEDED targetVersion: 2026.r3-betaVérifiez que l'état "Terminé" s'affiche dans la liste des déploiements :
spanner deployment rollouts list \ --deployment-endpoint=DEPLOYMENT_ENDPOINTLe résultat confirme que le déploiement est terminé :
NAME STATE TARGET_VERSION START_TIME END_TIME rollouts/1788942172101727 SUCCEEDED 2026.r3-beta 2026-09-09T08:22:52.101727Z 2026-09-09T08:45:43.949702Z
Effectuer le rollback d'une mise à niveau
Si vous rencontrez des problèmes lors d'une mise à niveau, la possibilité d'effectuer un rollback dépend de la phase de déploiement actuelle :
- Phase de schéma : impossible d'effectuer un rollback. Les migrations de schéma de base de données interne appliquées lors de la préparation sont uniquement en avant et ne peuvent pas être annulées. Toutefois, les migrations de schéma sont rétrocompatibles avec la version source, ce qui permet aux anciens binaires de serveur de continuer à fonctionner normalement.
- Phase binaire : vous pouvez revenir à la version antérieure à tout moment avant le début de la finalisation. Pour en savoir plus, consultez Restaurer l'image binaire ou de conteneur.
- Phases de déploiement facultatives : pour les phases facultatives qui acceptent le rollback automatique (comme l'activation de fonctionnalités), lancez le rollback à l'aide de Spanner Omni CLI.
- Phase de finalisation : irréversible. Une fois la finalisation commencée, la version cible est définitivement scellée pour le déploiement et les rollbacks ne sont plus possibles.
Effectuer un rollback du binaire ou de l'image de conteneur
Pour effectuer un rollback de la phase binaire avant le début de la finalisation, effectuez un redémarrage progressif sur tous les serveurs ou pods afin de restaurer la version précédente (source).
VM
Dans les déploiements de VM, effectuez un rollback du binaire spanner_server sur toutes les VM :
- Déployez la version antérieure du binaire
spanner_serversur vos hôtes. - Redémarrez les serveurs de manière progressive dans les domaines de défaillance, en mettant à jour une zone à la fois et en ne redémarrant pas plus de 5% des serveurs simultanément pour préserver le quorum Paxos.
- Vérifiez que tous les serveurs redémarrés sont opérationnels et ont rejoint le cluster avant de passer au domaine de défaillance suivant.
Helm
Dans les déploiements Helm, remplacez le tag de l'image de conteneur par la version précédente :
helm upgrade spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \
--version CHART_VERSION \
-n NAMESPACE \
--reuse-values \
--set image.tag=SOURCE_VERSION \
--timeout 30m
Remplacez les éléments suivants :
CHART_VERSION: version du graphique Helm, par exemple1.0.0.NAMESPACE: espace de noms Kubernetes du déploiement (par exemple,spanner-ns).SOURCE_VERSION: tag de l'image de conteneur antérieure à laquelle revenir, par exemple2026.r2-beta.3.
Kubernetes autonome
Dans les déploiements Kubernetes personnalisés sans Helm, remplacez l'image de conteneur dans vos spécifications StatefulSet ou Deployment par SOURCE_VERSION.
Effectuez une mise à jour progressive dans les domaines de défaillance, en mettant à jour une zone à la fois et en redémarrant au maximum 5% des pods simultanément pour préserver le quorum.
Effectuer un rollback des phases de déploiement facultatives
Pour les phases de déploiement facultatives qui acceptent le rollback (comme les phases d'activation de fonctionnalités), lancez le rollback en exécutant la commande rollouts rollback :
spanner deployment rollouts rollback ROLLOUT_ID \
--deployment-endpoint=DEPLOYMENT_ENDPOINT
Remplacez les éléments suivants :
ROLLOUT_ID: ID numérique du déploiement.DEPLOYMENT_ENDPOINT: point de terminaison d'un serveur dans votre déploiement.
Étapes suivantes
- Découvrez comment assurer la maintenance d'un déploiement.
- Découvrez comment mettre à l'échelle un déploiement Kubernetes ou mettre à l'échelle un déploiement de VM.
- En savoir plus sur la présentation de Monitoring