Limiter la durée d'exécution des VM d'un MIG


Ce document explique comment arrêter automatiquement des machines virtuelles (VM) dans un groupe d'instances géré (MIG) en spécifiant un délai pour les VM. Il décrit également le fonctionnement du délai pour les VM dans un MIG.

Vous pouvez optimiser les charges de travail temporaires en spécifiant un délai pour les VM d'un MIG. Lorsqu'une VM atteint son délai d'expiration, le groupe d'instances géré arrête automatiquement cette VM (la supprime). Limiter la durée d'exécution des VM d'un MIG par une limite de temps permet de minimiser les coûts et de libérer des quotas.

Pour en savoir plus sur la spécification d'une limite de temps pour une VM autonome, consultez la section Limiter la durée d'exécution d'une VM. Si vous souhaitez qu'un MIG ajoute ou supprime automatiquement des VM en fonction de vos charges de travail, consultez la page Procéder à l'autoscaling de groupes d'instances.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Limiter la durée d'exécution des VM d'un MIG

Vous pouvez limiter la durée d'exécution des VM d'un MIG en spécifiant une limite de temps dans le modèle d'instance utilisé pour le MIG. Lorsque le MIG crée des VM basées sur le modèle, le délai avant expiration est appliqué à chaque VM.

Vous pouvez spécifier l'un des deux types de limites de temps suivants:

  • Durée maximale d'exécution
  • Délai en tant qu'heure de fin

Pour spécifier une limite de temps pour les VM d'un MIG, procédez comme suit:

  1. Créez un modèle d'instance avec une durée d'exécution pour les VM ou avec une heure d'arrêt pour les VM.

  2. Utilisez le modèle d'instance pour créer un groupe d'instances géré ou mettre à jour un MIG existant.

Limites

  • Lorsque vous créez un modèle d'instance pour spécifier une limite de temps pour les VM d'un MIG, les limites suivantes s'appliquent:

    • Vous ne pouvez pas définir l'action d'arrêt sur STOP. Les MIG ne sont compatibles qu'avec DELETE.
    • Vous ne pouvez pas utiliser de VM Spot.
  • Vous ne pouvez pas créer de requête de redimensionnement dans un MIG qui utilise un modèle d'instance qui limite le temps d'exécution de la VM.

  • Vous ne pouvez pas limiter la durée d'exécution des VM dans un MIG régional avec la forme de distribution cible EVEN et la redistribution proactive des instances activées.

Créer un modèle d'instance avec une durée d'exécution pour les VM

Pour arrêter automatiquement les VM d'un MIG après leur exécution pendant une certaine durée, définissez une durée d'exécution maximale (maxRunDuration) dans le modèle d'instance.

Console

  1. Dans la console Google Cloud, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

  2. Cliquez sur Créer un modèle d'instance.

  3. Sélectionnez l'emplacement comme suit :

    • Si vous souhaitez utiliser le modèle d'instance dans plusieurs régions, sélectionnez Global.
    • Si vous souhaitez réduire la dépendance interrégionale, sélectionnez Régional.
  4. Si vous avez choisi régional, sélectionnez la région dans laquelle vous souhaitez créer votre modèle d'instance.

  5. Dans la section Règles de disponibilité, développez Paramètres avancés du modèle de provisionnement de VM.

  6. Cochez la case Définir un délai pour la VM.

  7. Dans le champ Type de délai, sélectionnez Par heure (par défaut) pour spécifier le délai sous la forme d'une durée. Dans le champ suivant, saisissez la durée en heures.

  8. Dans la liste À l'arrêt de la VM, sélectionnez Supprimer.

  9. Pour les autres champs, acceptez les valeurs par défaut ou modifiez-les si nécessaire.

  10. Cliquez sur Créer.

gcloud

Exécutez la commande bêta instance-templates create. Pour supprimer automatiquement des VM après une certaine durée, incluez l'option --max-run-duration et définissez l'option --instance-termination-action sur DELETE comme suit:

  gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --max-run-duration=DURATION \
      --instance-termination-action=DELETE

Remplacez les éléments suivants :

  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance.
  • DURATION : durée d'exécution des VM demandée. Le MIG supprime automatiquement la VM après la durée spécifiée.

    Formatez la durée en nombre de jours, d'heures, de minutes et de secondes, suivis respectivement de d, h, m et s. Par exemple, spécifiez 30m pour définir une durée de 30 minutes ou 1d2h3m4s pour une durée d'un jour, deux heures, trois minutes et quatre secondes. La durée minimale est de 30 secondes (30s) et la durée maximale est de 120 jours (120d).

REST

Utilisez la méthode instanceTemplates.insert en version bêta. Pour supprimer automatiquement des VM après une certaine durée, incluez le champ maxRunDuration et définissez le champ instanceTerminationAction sur DELETE comme suit:

POST http://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "maxRunDuration":
      {
        "seconds": DURATION
      },
      "instanceTerminationAction": "DELETE"
    }
  }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel vous souhaitez créer le modèle d'instance.
  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance.
  • MACHINE_TYPE: type de machine prédéfini ou personnalisé pour les VM du groupe.
  • IMAGE_PROJECT : projet contenant l'image, par exemple, debian-cloud.
  • IMAGE ou IMAGE_FAMILY : spécifiez l'un des éléments suivants :

    • IMAGE : version spécifique de l'image de l'OS. Exemple : debian-10-buster-v20200309.

    • IMAGE_FAMILY : famille d'images. Cela permet de spécifier l'image d'OS non obsolète la plus récente. Par exemple, si vous spécifiez debian-10, la dernière version de la famille d'images Debian 10 est utilisée.

  • DURATION : durée d'exécution des VM demandée. Le MIG supprime automatiquement la VM après la durée spécifiée.

    Formatez la durée en nombre de jours, d'heures, de minutes et de secondes, suivis respectivement de d, h, m et s. Par exemple, spécifiez 30m pour définir une durée de 30 minutes ou 1d2h3m4s pour une durée d'un jour, deux heures, trois minutes et quatre secondes. La durée minimale est de 30 secondes (30s) et la durée maximale est de 120 jours (120d).

Créer un modèle d'instance avec une heure d'arrêt pour les VM

Pour arrêter automatiquement les VM d'un MIG à une heure spécifique, définissez une heure d'arrêt (terminationTime) dans le modèle d'instance. Vous pouvez définir une date et une heure auxquelles vous souhaitez qu'un MIG arrête les VM.

Console

  1. Dans la console Google Cloud, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

  2. Cliquez sur Créer un modèle d'instance.

  3. Sélectionnez l'emplacement comme suit :

    • Si vous souhaitez utiliser le modèle d'instance dans plusieurs régions, sélectionnez Global.
    • Si vous souhaitez réduire la dépendance interrégionale, sélectionnez Régional.
  4. Si vous avez choisi régional, sélectionnez la région dans laquelle vous souhaitez créer votre modèle d'instance.

  5. Dans la section Règles de disponibilité, développez Paramètres avancés du modèle de provisionnement de VM.

  6. Dans le champ Type de délai, sélectionnez Par date pour spécifier le délai sous la forme d'un code temporel (date et heure). Dans le champ suivant, cliquez sur Sélectionner une date et une heure, puis sélectionnez la date, l'heure et le fuseau horaire pour l'arrêt automatique.

  7. Dans la liste À l'arrêt de la VM, sélectionnez Supprimer.

  8. Pour les autres champs, acceptez les valeurs par défaut ou modifiez-les si nécessaire.

  9. Cliquez sur Créer.

gcloud

Exécutez la commande bêta instance-templates create. Pour supprimer automatiquement des VM à une heure spécifique, incluez l'option --termination-time et définissez l'option --instance-termination-action sur DELETE comme suit:

  gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --termination-time=TIME \
      --instance-termination-action=DELETE

Remplacez les éléments suivants :

  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance.
  • TIME : heure à laquelle cette VM doit être arrêtée automatiquement. L'heure que vous spécifiez doit être une heure à venir, comprise entre 30 secondes et 120 jours par rapport à l'heure active. Formatez l'heure sous la forme d'un code temporel RFC 3339 :

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Remplacez les éléments suivants :

    • YYYY-MM-DD : date respectant la syntaxe année (valeur à quatre chiffres), mois à deux chiffres et jour à deux chiffres du mois, séparés par des traits d'union.
    • HH:MM:SS : heure respectant la syntaxe heures au format 2 chiffres sur 24 heures, minutes à deux chiffres et secondes à deux chiffres, séparés par des signes deux-points.
    • OFFSET : fuseau horaire mis en forme en tant que décalage par rapport au temps universel coordonné (UTC). Par exemple, pour utiliser l'heure normale du Pacifique (PST), soit huit heures avant l'heure UTC, spécifiez -08:00. Pour utiliser un décalage (UTC+0), spécifiez Z.

REST

Utilisez la méthode instanceTemplates.insert en version bêta. Pour supprimer automatiquement des VM à une heure spécifique, incluez le champ terminationTime et définissez le champ instanceTerminationAction sur DELETE comme suit:

POST http://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "terminationTime": TIME,
      "instanceTerminationAction": "DELETE"
    }
  }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel vous souhaitez créer le modèle d'instance.
  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance.
  • MACHINE_TYPE: type de machine prédéfini ou personnalisé pour les VM du groupe.
  • IMAGE_PROJECT : projet contenant l'image, par exemple, debian-cloud.
  • IMAGE ou IMAGE_FAMILY : spécifiez l'un des éléments suivants :

    • IMAGE : version spécifique de l'image de l'OS. Exemple : debian-10-buster-v20200309.

    • IMAGE_FAMILY : famille d'images. Cela permet de spécifier l'image d'OS non obsolète la plus récente. Par exemple, si vous spécifiez debian-10, la dernière version de la famille d'images Debian 10 est utilisée.

  • TIME : heure à laquelle cette VM doit être arrêtée automatiquement. L'heure que vous spécifiez doit être une heure à venir, comprise entre 30 secondes et 120 jours par rapport à l'heure active. Formatez l'heure sous la forme d'un code temporel RFC 3339 :

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    Remplacez les éléments suivants :

    • YYYY-MM-DD : date respectant la syntaxe année (valeur à quatre chiffres), mois à deux chiffres et jour à deux chiffres du mois, séparés par des traits d'union.
    • HH:MM:SS : heure respectant la syntaxe heures au format 2 chiffres sur 24 heures, minutes à deux chiffres et secondes à deux chiffres, séparés par des signes deux-points.
    • OFFSET : fuseau horaire mis en forme en tant que décalage par rapport au temps universel coordonné (UTC). Par exemple, pour utiliser l'heure normale du Pacifique (PST), soit huit heures avant l'heure UTC, spécifiez -08:00. Pour utiliser un décalage (UTC+0), spécifiez Z.

Fonctionnement d'une limite de temps pour les VM d'un MIG

Lorsque vous spécifiez une limite de temps pour les VM d'un MIG, l'heure à laquelle un MIG arrête une VM est automatiquement définie dans le champ d'horodatage de fin (terminationTimestamp) de la VM.

Selon le type de délai spécifié, l'horodatage de fin d'une VM est défini comme suit:

  • Durée maximale d'exécution (maxRunDuration):

    terminationTimestamp d'une VM = dernière création ou heure de début de la VM + maxRunDuration

    Lorsque vous spécifiez une durée, l'horodatage de fin est défini par rapport à la dernière heure de création ou de début de la VM. Si la VM est recréée, redémarrée, réactivée ou remplacée, l'horodatage de fin est recalculé. L'horodatage de fin peut varier entre les VM d'un MIG en fonction de l'heure de la dernière création ou du démarrage de chaque VM. Par exemple, si une VM est réparée, son horodatage de fin est recalculé en ajoutant la durée à l'heure à laquelle la VM a été recréée lors de la réparation.

  • Délai en tant qu'heure de fin (terminationTime):

    terminationTimestamp d'une VM = terminationTime

    Lorsque vous spécifiez une heure, l'horodatage de fin est défini sur cette heure, à condition que cette heure soit postérieure à l'heure actuelle. Si l'heure d'arrêt est passée, toute action de MIG qui tente de créer, de redémarrer ou de remplacer une VM échoue avec une erreur. Pour résoudre ce type d'erreur, vous devez créer un modèle d'instance avec une heure de fin dans le futur et appliquer ce modèle au MIG. Si vous souhaitez utiliser les propriétés du modèle existant dans le nouveau modèle, créez un modèle d'instance basé sur le modèle existant.

Lors d'une actualisation de VM, l'horodatage de fin ne change pas. Par exemple, si vous définissez le niveau de perturbation pour les mises à jour de REFRESH, l'horodatage de fin est conservé chaque fois que le MIG met à jour la VM.

Lorsque vous suspendez ou arrêtez une VM dans un MIG, l'horodatage de fin est automatiquement effacé, quel que soit le type de délai. Lorsque vous réactivez ou démarrez une VM, l'horodatage de fin est défini à nouveau en fonction du type de délai, comme expliqué précédemment dans cette section.

Fonctionnement de l'autoscaling lorsqu'une limite de temps est définie

L'autoscaling permet à votre MIG d'ajouter ou de supprimer automatiquement des VM en fonction de l'augmentation ou de la diminution de la charge. Lorsqu'un MIG supprime des VM qui ont atteint leurs horodatages de fin, il crée des VM pour conserver la taille recommandée par l'autoscaler. Les nouvelles VM s'exécutent pendant le délai spécifié. Si la recommandation de l'autoscaler consiste à réduire le nombre de VM, le MIG les supprime avant même qu'elles n'atteignent leurs limites de temps.

Si vous avez configuré des planifications de scaling, les VM ne s'exécutent que jusqu'à la fin d'une planification ou jusqu'à ce qu'une VM atteigne son horodatage de fin, selon l'événement qui se produit en premier.

Étapes suivantes