Limiter l'exécution des VM dans un MIG


Ce document explique comment arrêter automatiquement des machines virtuelles (VM) dans un groupe d'instances géré (MIG) en spécifiant une limite de temps 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 une limite de temps pour les VM d'un MIG. Lorsqu'une VM atteint sa limite de temps, le MIG l'arrête automatiquement (la supprime). Limiter la durée d'exécution des VM dans un MIG permet de réduire les coûts et de libérer des quotas.

Pour savoir comment spécifier 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 Autoscaling groups of instances (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 en sélectionnant l'une des options suivantes:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. 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.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

Limiter l'exécution des VM dans un MIG

Vous pouvez limiter l'exécution des VM dans 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, la limite de temps est appliquée à chaque VM.

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

  • Limite de temps en tant que durée d'exécution
  • Durée limite 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 groupe d'instances géré existant.

Limites

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 une certaine durée d'exécution, 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 une limite de temps 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 instance-templates create. Pour supprimer automatiquement les VM après une durée spécifique, incluez l'option --max-run-duration et définissez l'option --instance-termination-action sur DELETE comme suit :

  gcloud 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).

Terraform

Pour créer un modèle d'instance à l'aide de Terraform, utilisez la ressource google_compute_instance_template. Pour créer un modèle d'instance qui supprime automatiquement les VM après une durée spécifique, vous devez inclure l'argument max_run_duration et définir l'argument instance_termination_action sur DELETE.

Pour en savoir plus, consultez la documentation Terraform de la ressource google_compute_instance_template.

REST

Exécutez la méthode instanceTemplates.insert. Pour supprimer automatiquement les VM après une durée spécifique, incluez le champ maxRunDuration et définissez le champ instanceTerminationAction sur DELETE comme suit :

POST https://compute.googleapis.com/compute/v1/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 family/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 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 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

Exécutez la méthode instanceTemplates.insert. Pour supprimer automatiquement des VM à une heure spécifique, incluez le champ terminationTime et définissez le champ instanceTerminationAction sur DELETE comme suit :

POST https://compute.googleapis.com/compute/v1/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 family/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 du délai pour les VM dans un MIG

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

En fonction du type de délai que vous spécifiez, l'horodatage d'arrêt d'une VM est défini comme suit:

  • Limite de temps sous la forme d'une durée 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, reprise ou remplacée, l'horodatage de fin est recalculé. Le code temporel d'arrêt peut varier entre les VM d'un MIG en fonction de l'heure à laquelle chaque VM a été créée ou démarrée pour la dernière fois. Par exemple, si une VM est réparée, l'horodatage de fin de la VM est recalculé en ajoutant la durée à l'heure à laquelle la VM a été recréée lors de la réparation.

  • Limite de temps 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 qu'elle soit future. Si l'heure d'arrêt est passée, toute action MIG qui tente de créer, de redémarrer ou de remplacer une VM échoue et renvoie une erreur. Pour résoudre ce problème, vous devez créer un nouveau modèle d'instance avec une heure d'arrêt ultérieure et appliquer ce modèle au MIG. Si vous souhaitez utiliser les propriétés de modèle existantes dans le nouveau modèle, créez un modèle d'instance basé sur le modèle existant.

Lors d'une actualisation de VM, le code temporel d'arrêt ne change pas. Par exemple, si vous définissez le niveau de perturbation pour les mises à jour sur 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, le code temporel d'arrêt est automatiquement effacé, quel que soit le type de limite de temps. Lorsque vous reprenez ou démarrez une VM, l'horodatage de fin est défini à nouveau en fonction du type de limite de temps, 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 leur code temporel d'arrêt, il crée des VM pour maintenir la taille recommandée par l'autoscaler. Les nouvelles VM s'exécutent pendant la durée spécifiée. Si la recommandation de l'autoscaler est de réduire le nombre de VM, le MIG supprime les VM même avant qu'elles n'atteignent leurs limites de temps.

Si vous avez configuré des horaires de mise à l'échelle, les VM ne s'exécutent que jusqu'à la fin d'un calendrier ou jusqu'à ce qu'une VM atteigne son code temporel d'arrêt, selon la première éventualité.

Étapes suivantes