Gérer les événements de maintenance avec les TPU en mode "Toute la capacité"

Tous les hôtes TPU font l'objet d'une maintenance régulière. En mode "Toute la capacité" des TPU, vous pouvez planifier les événements de maintenance à venir et lancer les opérations de maintenance quand vous le souhaitez sur l'ensemble de votre capacité. Vous pouvez mettre à jour votre capacité utilisée et inutilisée, simultanément ou séparément. Vous pouvez également effectuer la maintenance au niveau d'une VM, d'un sous-bloc, d'un bloc ou d'une réservation. Ce contrôle précis de la maintenance vous permet de créer une séquence de maintenance optimale et de planifier les opérations de maintenance afin de minimiser l'impact sur votre activité.

Le mode "Toute la capacité" des TPU n'est compatible qu'avec la "maintenance groupée", ce qui signifie que les opérations de maintenance de toutes les instances de VM d'une réservation sont planifiées en même temps. Toutes les VM TPU d'une réservation ont le même intervalle de maintenance. Toutefois, les opérations de maintenance peuvent être effectuées séparément au niveau de l'hôte, du sous-bloc, du bloc ou de la réservation. Les notifications de maintenance sont envoyées environ 90 jours à l'avance. La maintenance n'est pas effectuée plus d'une fois tous les 90 jours.

Si vous utilisez TPU Cluster Director sur GKE et des pools de nœuds de tranche TPU multihôtes, nous vous recommandons de supprimer le pool de nœuds GKE avant de démarrer manuellement la maintenance en attente pour tous les hôtes de ce pool de nœuds. Une fois la maintenance effectuée pour tous les hôtes du pool de nœuds d'origine, vous pouvez recréer le pool de nœuds.

Voici un exemple de chronologie pour un événement de maintenance d'hôte TPU :

  1. La maintenance est planifiée. Vous recevez une notification indiquant que l'hôte sera mis à jour dans les 90 jours.
  2. Vous pouvez choisir de mettre à jour manuellement l'hôte dans les 90 jours.
  3. Après 90 jours, l'opération de maintenance est exécutée sans exception.
  4. Si un autre événement de maintenance est planifié avant l'exécution de l'événement précédent, la deuxième opération est planifiée pour être exécutée après 180 jours, soit 90 jours après la planification de l'événement de maintenance initial.

Configurer des alertes de notification de maintenance pour la capacité physique

Compute Engine vous envoie des événements Cloud Logging pour la maintenance planifiée, démarrée ou terminée. Ces événements de maintenance restent dans vos journaux. Vous pouvez ainsi créer des requêtes de journal pour obtenir une vue historique de la maintenance de votre capacité. Vous pouvez également recevoir des notifications concernant les futurs événements de maintenance pour une réservation, un bloc ou un sous-bloc en créant des règles d'alerte basées sur les journaux.

Pour créer une alerte pour les événements de maintenance sur votre capacité physique :

  1. Dans la Google Cloud console, accédez à l'Explorateur de journaux.
  2. Vérifiez que l'option Afficher la requête est activée.
  3. Dans le volet de requête, créez une requête au format indiqué dans les sections suivantes. Remplacez l'espace réservé du paramètre correspondant et exécutez la requête.
  4. Une fois que vous avez vérifié que les résultats renvoyés correspondent à ce que vous souhaitez, vous pouvez créer des alertes en sélectionnant Créer une alerte de journal dans le menu déroulant Actions de la barre d'outils des résultats de la requête et en fournissant les informations demandées.

Requête pour la maintenance à venir

Voici un exemple de requête pour la maintenance à venir :

protoPayload.methodName="compute.CAPACITY_COMPONENT.upcomingGroupMaintenance" severity>=DEFAULT
protoPayload.resourceName="projects/shared-reservation-project/reservations/RESOURCE_NAME"
protoPayload.status.message =~ "scheduled"

Remplacez CAPACITY_COMPONENT et RESOURCE_NAME par les valeurs suivantes :

Recevoir une notification de maintenance à venir pour CAPACITY_COMPONENT RESOURCE_NAME
Toutes les réservations reservations Omettre RESOURCE_NAME
Une réservation spécifique reservations YOUR_RESERVATION_NAME
Blocs pour toutes les réservations reservations.blocks Omettre RESOURCE_NAME
Un bloc spécifique reservations.blocks YOUR_RESERVATION_NAME/reservationBlocks/YOUR_RESERVATION_BLOCK_ID
Sous-blocs pour toutes les réservations reservations.blocks.subblocks Omettre RESOURCE_NAME
Un sous-bloc spécifique reservations.blocks.subblocks YOUR_RESERVATION_NAME/reservationBlocks/YOUR_RESERVATION_BLOCK_ID/reservationSubBlocks/YOUR_RESERVATION_SUBBLOCK_ID

Requête pour l'ouverture de l'intervalle de maintenance

protoPayload.methodName="compute.reservations.CAPACITY_COMPONENT.startGroupMaintenance" severity>=DEFAULT
protoPayload.status.message =~ "started"

Remplacez CAPACITY_COMPONENT par l'une des valeurs suivantes :

Recevoir une notification pour l'ouverture d'un intervalle de maintenance pour CAPACITY_COMPONENT
Blocs dans une réservation reservations.blocks
Sous-blocs dans une réservation reservations.blocks.subblocks

Requête pour la maintenance terminée

Voici un exemple de requête pour la maintenance terminée :

protoPayload.methodName="compute.reservations.CAPACITY_COMPONENT.completedGroupMaintenance" severity>=DEFAULT
protoPayload.resourceName="projects/YOUR_RESERVATION_PROJECT/reservations/RESOURCE"
protoPayload.status.message =~ "completed"

Remplacez CAPACITY_COMPONENT et RESOURCE_NAME par les valeurs suivantes :

Recevoir une notification pour la maintenance terminée pour CAPACITY_COMPONENT RESOURCE_NAME
Toutes les réservations reservations Omettre RESOURCE_NAME
Une réservation spécifique reservations YOUR_RESERVATION_NAME
Blocs pour toutes les réservations reservations.blocks Omettre RESOURCE_NAME
Un bloc spécifique reservations.blocks YOUR_RESERVATION_NAME/reservationBlocks/YOUR_RESERVATION_BLOCK_ID
Sous-blocs pour toutes les réservations reservations.blocks.subblocks Omettre RESOURCE_NAME
Un sous-bloc spécifique reservations.blocks.subblocks YOUR_RESERVATION_NAME/reservationBlocks/YOUR_RESERVATION_BLOCK_ID/reservationSubBlocks/YOUR_RESERVATION_SUBBLOCK_ID

Afficher l'état de maintenance de la capacité physique

Vous pouvez connaître l'état de maintenance de votre capacité via Cloud Logging, les API et la CLI. Les informations sur l'état de maintenance sont fournies à quatre niveaux : réservation, bloc, sous-bloc et hôte.

Cloud Logging

L'exemple JSON suivant a été généré en réponse à cette exemple de requête :

{
"protoPayload": {
  "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
  "status": {
    "message": "Maintenance is scheduled for this block in reservation
    YOUR_RESERVATION. Review the maintenance schedule
    by describing the reservation and block via gcloud CLI"
  },
  "metadata": {
    "type":SCHEDULED
    "canReschedule":True
    "windowGroupStartTime": '2025-09-12T13:00:00.000-07:00',
    "windowGroupEndTime": '2025-09-12T17:00:00.000-07:00',
    "maintenanceGroupStatus":PENDING,
    "maintenancePendingCount":128 # Used and Unused Machines,
    "instanceMaintenancePendingCount": 64 # VMs Only
  },
"methodName": "compute.reservations.block.upcomingGroupMaintenance",

},
}

gcloud

gcloud compute reservations blocks describe YOUR_RESERVATION \
--block-name=YOUR_BLOCK \
--project=YOUR_PROJECT \
--zone=YOUR_ZONE

Le résultat ressemble à ce qui suit :

count: 128 # Host count
creationTimestamp: '2025-08-19T18:23:32.825-07:00'
id: '6404259976725386932'
inUseCount: 64 # In use host count
kind: compute#reservationBlock
name: exr1-block-0002
…
reservationMaintenance:
instanceMaintenanceOngoingCount: 0
instanceMaintenancePendingCount: 64 # VMs Only
maintenanceOngoingCount: 0
maintenancePendingCount: 128 # Used and Unused Hosts
schedulingType: GROUPED
subblockInfraMaintenanceOngoingCount: 0
subblockInfraMaintenancePendingCount: 0
upcomingGroupMaintenance:
  canReschedule: true
  maintenanceReasons:
  - PLANNED_UPDATE
  maintenanceStatus: PENDING
  type: SCHEDULED
  windowEndTime: '2025-09-12T17:00:00.000-07:00'
  windowStartTime: '2025-09-12T13:00:00.000-07:00'

Les valeurs suivantes du résultat décrivent les informations de maintenance :

  • reservationMaintenance.instanceMaintenanceOngoingCount : nombre d'hôtes utilisés en cours de mise à jour
  • reservationMaintenance.instanceMaintenancePendingCount : nombre d'hôtes utilisés en attente de maintenance
  • reservationMaintenance.maintenanceOngoingCount : nombre d'hôtes inutilisés en cours de mise à jour
  • reservationMaintenance.maintenancePendingCount : nombre d'hôtes inutilisés en attente de maintenance
  • reservationMaintenance.upcomingGroupMaintenance.maintenanceReasons : type de maintenance
  • reservationMaintenance.upcomingGroupMaintenance.maintenanceStatus : état de l'opération de maintenance
  • reservationMaintenance.upcomingGroupMaintenance.type : type de maintenance (SCHEDULED pour la maintenance planifiée ou UNSCHEDULED pour la maintenance non planifiée ou d'urgence)
  • reservationMaintenance.upcomingGroupMaintenance.windowEndTime : fin prévue de l'intervalle de temps pour l'opération de maintenance
  • reservationMaintenance.upcomingGroupMaintenance.windowStartTime : début prévu de l'intervalle de temps pour l'opération de maintenance

Configurer des alertes de notification de maintenance pour les VM TPU

Vous pouvez créer des alertes pour les événements de maintenance sur vos VM TPU :

  1. Dans la Google Cloud console, accédez à l'Explorateur de journaux.
  2. Définissez le bouton Afficher la requête sur "Activé".
  3. Dans le volet de requête, créez une requête au format indiqué dans les sections suivantes.
  4. Une fois que vous avez vérifié que les résultats renvoyés correspondent à ce que vous souhaitez, vous pouvez créer une alerte en cliquant sur le menu déroulant Actions, en sélectionnant Créer une alerte de journal et en renseignant les informations du volet Créer une règle d'alerte basée sur les journaux.

Requête pour la planification de la maintenance d'une instance de VM

protoPayload.methodName="compute.instances.upcomingMaintenance" severity>=DEFAULT
protoPayload.status.message =~ "scheduled"

Requête pour l'ouverture de l'intervalle de maintenance d'une instance de VM

protoPayload.methodName="compute.instances.upcomingMaintenance" severity>=DEFAULT
protoPayload.status.message =~ "ongoing"

Requête pour le démarrage de la maintenance d'instances de VM

protoPayload.methodName="compute.instances.blocks.terminateOnHostMaintenance" severity>=DEFAULT

Requête pour la fin de la maintenance d'une instance de VM

protoPayload.methodName="compute.instances.upcomingMaintenance" severity>=DEFAULT
protoPayload.status.message =~ "completed"

Afficher l'état de maintenance d'une VM Cloud TPU

Vous pouvez récupérer l'état de maintenance d'une VM Cloud TPU avec l'API d'instance Compute Engine ou avec une commande curl depuis le système d'exploitation invité.

Décrire une instance

gcloud

gcloud compute instances describe INSTANCE --zone ZONE

Cette commande renvoie une sortie semblable à la suivante :

…
upcomingMaintenance:{
"type":"SCHEDULED"
"canReschedule":True
"windowStartTime": '2025-09-12T13:00:00.000-07:00'
"windowEndTime": '2025-09-12T17:00:00.000-07:00'
"latestWindowStartTime": '2025-09-12T13:00:00.000-07:00'
"maintenanceStatus":"PENDING"
...

curl

curl http://metadata.google.internal/computeMetadata/v1/instance/upcoming-maintenance?alt=json -H "Metadata-Flavor: Google"

Cette commande renvoie une sortie semblable à la suivante :

{
"maintenanceType":"SCHEDULED"
"canReschedule":True
"windowStartTime": '2025-09-12T13:00:00.000-07:00'
"windowEndTime": '2025-09-12T17:00:00.000-07:00'
"latestWindowStartTime": '2025-09-12T13:00:00.000-07:00'
"maintenanceStatus":"PENDING"
}

Vous pouvez également trouver des notifications de maintenance dans Cloud Logging.

Voici un exemple de message de journal d'une maintenance planifiée en attente. Pour obtenir un exemple de requête, consultez Afficher l'état de maintenance de la capacité physique.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "message": "Maintenance is scheduled for this instance. Review the maintenance schedule by describing the VM with gcloud CLI or querying the http://metadata.google.internal/computeMetadata/v1/instance/upcoming-maintenance metadata key."
    },
    "metadata": {
      "canReschedule": true
      "latestWindowStartTime": "2024-01-01:00:00:00PST"
      "maintenanceStatus": "PENDING"
      "type": "SCHEDULED"
      "windowEndTime": "2024-01-01:00:02:00PST"
      "windowStartTime": "2024-01-01:00:00:00PST"
    },
},
  "operation": {
    "id": "systemevent-1702539760425-60c736da2db40-701ddf19-b5424b20",
    "producer": "compute.instances.upcomingMaintenance",
    "first": true,
    "last": false
  },
}

L'exemple suivant est un message de journal d'une maintenance non planifiée en cours. Pour obtenir un exemple de requête, consultez Requête pour l'ouverture d'un intervalle de maintenance.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "message": "Maintenance window has started for this instance. Review the maintenance schedule by describing the VM with gcloud CLI or querying the http://metadata.google.internal/computeMetadata/v1/instance/upcoming-maintenance metadata key."
    },
    "metadata": {
      "canReschedule": true
      "latestWindowStartTime": "2024-01-01:00:00:00PST"
      "maintenanceStatus": "ONGOING"
      "type": "UNSCHEDULED"
      "windowEndTime": "2024-01-01:00:02:00PST"
      "windowStartTime": "2024-01-01:00:00:00PST"
    },
},
  "operation": {
    "id": "systemevent-1702539760425-60c736da2db40-701ddf19-b5424b20",
    "producer": "compute.instances.upcomingMaintenance",
    "first": true,
    "last": false
  },
}

L'exemple suivant est un message de journal pour une maintenance terminée. Pour obtenir un exemple de requête, consultez Requête pour la fin de la maintenance d'une instance de VM.

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "message": "Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed."
    },
  "operation": {
    "id": "systemevent-1702539760425-60c736da2db40-701ddf19-b5424b20",
    "producer": "compute.instances.upcomingMaintenance",
    "first": false,
    "last": true
  },
}

Démarrer manuellement la maintenance en attente pour la capacité physique

Une fois qu'un événement de maintenance est planifié (maintenanceStatus est défini sur PENDING), vous pouvez démarrer manuellement la maintenance pour vos réservations, blocs ou sous-blocs dont la propriété canReschedule est définie sur True. Lorsque vous démarrez manuellement un événement de maintenance en attente, ce qui se passe dépend de l'état de maintenance de votre réservation, de vos blocs ou de vos sous-blocs. Le tableau suivant décrit ce qui se passe pour chacun d'eux :

État de la maintenance Description Ce que vous voyez
Planifié Compute Engine a planifié la maintenance de la réservation. Vous pouvez démarrer manuellement la maintenance avant l'heure prévue. Dans Google Cloud CLI ou l'API REST, le champ maintenanceStatus est défini sur PENDING.
En cours La maintenance est en cours. Vous ne pouvez pas la reprogrammer. Dans Google Cloud CLI ou l'API REST, le maintenanceStatus champ est défini sur ONGOING.
Terminé La maintenance est terminée. Compute Engine a supprimé toutes les notifications de maintenance de la VM. Dans Google Cloud CLI ou l'API REST, le maintenanceStatus champ n'existe pas.

Démarrer manuellement la maintenance sur l'ensemble de la réservation

La commande suivante démarre la maintenance d'une réservation. Utilisez le paramètre --scope pour spécifier l'une des valeurs suivantes qui spécifient le champ d'application de l'opération de maintenance :

  • Tous les hôtes : --scope=all
  • Hôtes avec des VM en cours d'exécution : --scope=running
  • VM inutilisées, arrêtées ou suspendues : --scope=unused

Pour démarrer la maintenance sur tous les blocs d'une réservation, exécutez la commande suivante :

gcloud compute reservations perform-maintenance YOUR_RESERVATION \
  --zone=YOUR_ZONE \
  --scope=all

Pour vérifier la progression d'un événement de maintenance, exécutez la commande suivante :

gcloud compute reservations describe YOUR_RESERVATION  \
  --project=YOUR_PROJECT \
  --zone=YOUR_ZONE

Le résultat ressemble à ce qui suit :

ResourceStatus
  upcomingGroupMaintenance:
    "type":"SCHEDULED"
    "canReschedule":True
    "maintenanceStatus":"PENDING"  "ONGOING"
    "maintenancePendingCount":512  0 # all hosts are moved into an ongoing state.
    "maintenanceOngoingCount":0  512  256  0 # this number first increases to all hosts
                                           # as machines complete, this number reduces.

Démarrer manuellement la maintenance sur un bloc

La commande suivante démarre la maintenance d'un bloc. Utilisez le paramètre --scope pour spécifier l'une des valeurs suivantes qui spécifient le champ d'application de l'opération de maintenance :

  • Tous les hôtes : --scope=all
  • Hôtes avec des VM en cours d'exécution : --scope=running
  • VM inutilisées, arrêtées ou suspendues : --scope=unused

La commande suivante montre comment démarrer la maintenance sur les hôtes en cours d'exécution :

gcloud compute reservations perform-maintenance YOUR_RESERVATION
    --scope=RUNNING \
    --project=YOUR_PROJECT \
    --zone=YOUR_ZONE

La commande suivante montre comment vérifier la progression de la maintenance d'un bloc :

gcloud compute reservations blocks describe YOUR_RESERVATION --block-name=YOUR_BLOCK_NAME  \
    --project=YOUR_PROJECT \
    --zone=YOUR_ZONE

Le résultat ressemble à ce qui suit :

ResourceStatus
  upcomingGroupMaintenance:
    "maintenanceType":"SCHEDULED"    "maintenanceGroupStatus":"PENDING"  "ONGOING"
    "maintenancePending":0
 "maintenanceOngoing":70  0

Démarrer manuellement la maintenance sur un sous-bloc

Lorsque vous démarrez la maintenance sur un sous-bloc, vous ne spécifiez pas le paramètre --scope, car un sous-bloc est le plus petit champ d'application de la maintenance.

La commande suivante démarre la maintenance sur tous les hôtes d'un bloc :

gcloud compute reservations sub-blocks perform-maintenance YOUR_RESERVATION
    --block-name=YOUR_BLOCK_NAME \
    --sub-block-name=YOUR_SUBBLOCK_NAME \
    --project=YOUR_PROJECT \
    --zone=YOUR_ZONE

La commande suivante vérifie la progression de la maintenance :

gcloud compute reservations sub-blocks describe YOUR_RESERVATION
    --block-name=YOUR_BLOCK_NAME \
    --sub-block-name=YOUR_SUBBLOCK_NAME \
    --project=YOUR_PROJECT \
    --zone=YOUR_ZONE

Le résultat ressemble à ce qui suit :

ResourceStatus
  groupMaintenance:
    "maintenanceType":"SCHEDULED"
    "canReschedule":True
    "maintenanceGroupStatus":"PENDING"  "ONGOING"
    "maintenancePendingCount": 32  0 # 32 hosts updated
    "maintenanceOngoingCount":0  32  0
    "instanceMaintenancePendingCount": 64  0
    "instanceMaintenanceOngoingCount": 0  64  0 # 64 instances updated

Démarrer manuellement la maintenance en attente pour une VM TPU

Si un hôte exécute plusieurs VM, le démarrage de la maintenance sur une VM déclenche la maintenance de toutes les VM de l'hôte.

L'exemple suivant montre comment déclencher manuellement la maintenance d'un hôte Trillium comportant deux VM, vm-1 et vm-2 :

gcloud compute instances perform-maintenance vm-1

Le démarrage de la maintenance de vm-1 déclenchera la maintenance de vm-2.