Créer des groupes d'instances gérés

Vous trouverez sur cette page la procédure à suivre pour créer un groupe d'instances géré au sein d'une zone. Les groupes d'instances gérés contiennent des instances identiques que vous pouvez gérer comme une seule entité. Ils maintiennent la haute disponibilité de vos applications en s'assurant de manière proactive que vos instances restent disponibles, c'est-à-dire dotées de l'état RUNNING. Ils sont compatibles avec l'autoscaling, l'équilibrage de charge, les mises à jour progressives, l'autoréparation, etc.

Vous pouvez également créer des groupes d'instances gérés régionaux, qui contiennent des instances dans plusieurs zones d'une même région. Pour en savoir plus sur les groupes d'instances, consultez la présentation des groupes d'instances.

Avant de commencer

Restrictions

  • Chaque groupe d'instances géré peut contenir jusqu'à 1 000 instances de machine virtuelle (VM).
  • Lors de la mise à jour d'un groupe d'instances géré, vous ne pouvez pas spécifier plus de 1 000 instances dans une même requête.

Utiliser des groupes d'instances gérés pour les applications sans état

Les groupes d'instances gérés sont conçus pour fonctionner avec des applications sans état, qui ne dépendent pas de l'état spécifique des instances de VM sous-jacentes à exécuter. Cela vous permet d'utiliser des fonctionnalités telles que l'autoscaling ou l'autoréparation, grâce auxquelles le groupe d'instances géré peut supprimer et recréer des instances automatiquement. En outre, si une instance qui n'est pas configurée pour migrer à chaud est supprimée d'un groupe d'instances géré à la suite d'une action utilisateur, dans le cadre d'une autoréparation ou bien en raison d'une maintenance de l'infrastructure, le groupe recrée automatiquement l'instance avec un nouveau disque persistant racine.

Comme les groupes d'instances gérés sont sans état par nature, vous devez concevoir ou adapter votre application pour qu'elle ne dépende pas de propriétés d'instance spécifiques non persistantes, telles qu'une adresse IP ou des données en mémoire. De même, les disques de démarrage persistants sont supprimés par défaut lorsque l'instance de VM correspondante est supprimée. Évitez donc de dépendre de disques de démarrage pour conserver vos données persistantes dans un groupe d'instances géré.

Pour conserver vos données, nous vous recommandons de mettre régulièrement à jour les images de l'OS, d'utiliser des scripts de démarrage et de sauvegarder vos données dans un autre emplacement centralisé, tel que Google Cloud Storage.

Vous pouvez spécifier une image du conteneur ou une image personnalisée et les scripts de démarrage pertinents dans vos modèles d'instance. Ainsi, lorsqu'une instance est recréée, elle dispose des applications logicielles nécessaires et d'un accès aux données requises. Pour lire d'autres recommandations sur la création de modèles d'instance, consultez la page Modèles d'instances déterministes.

Si vous voulez conserver les disques de démarrage associés à vos groupes d'instances gérés, vous pouvez désactiver l'option disks.autoDelete pour éviter leur suppression. Gardez toutefois à l'esprit que cela empêchera le groupe d'instances géré de créer des instances, raison pour laquelle cette opération n'est pas recommandée.

Créer un groupe d'instances géré

Avant de créer un groupe d'instances géré, vous devez créer un modèle d'instance qui spécifie l'image du système d'exploitation ou l'image du conteneur, ainsi que les paramètres de chaque instance du groupe.

Une fois que vous avez créé le modèle, créez le groupe d'instances géré via la console Google Cloud Platform, l'outil gcloud compute ou l'API.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Cliquez sur Créer un groupe d'instances.
  3. Saisissez un nom pour le groupe d'instances géré, puis sélectionnez la zone dans laquelle vous souhaitez le créer.
  4. Dans la section Type de groupe, sélectionnez Groupe d'instances géré.
  5. Dans la section Modèle d'instance, sélectionnez un modèle d'instance. Si aucun modèle n'est disponible, créez-en un.
  6. Spécifiez le nombre d'instances que vous souhaitez créer au sein du groupe. Vous pouvez également activer l'autoscaling pour que le groupe puisse ajouter ou supprimer automatiquement des instances en fonction de l'utilisation du processeur d'instance, ou l'autoréparation pour pouvoir vérifier l'état des instances du groupe.
  7. Cliquez sur Créer pour créer le groupe.

gcloud

Créez un groupe d'instances à l'aide de la commande instance-groups managed create :

gcloud compute instance-groups managed create [NAME] \
    --base-instance-name [BASE_NAME] \
    --size [SIZE] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

où vous remplacez les valeurs suivantes :

  • [NAME] par le nom du groupe d'instances.
  • [BASE_NAME] par le nom à utiliser pour les instances créées au sein du groupe. Comme les instances sont identiques, une chaîne aléatoire est automatiquement attribuée à leur nom. Cette chaîne aléatoire est précédée du nom de base. Par exemple, si des instances portent le nom de base example, elles peuvent s'appeler example-yahs, example-qtyz, etc.
  • [SIZE] par la taille du groupe d'instances.
  • [INSTANCE_TEMPLATE] par le nom du modèle d'instance à utiliser pour le groupe.
  • [ZONE] est l'une des zones disponibles pour Compute Engine.

    Par exemple, la commande suivante permet de créer un groupe d'instances appelé "example-group", dont le nom de base est test. Le groupe contient trois instances :

    gcloud compute instance-groups managed create example-group
    --base-instance-name test
    --size 3
    --template an-instance-template

API

Dans l'API, envoyez une requête POST au service instanceGroupManagers. Spécifiez le nom du groupe, sa taille, le nom de base de ses instances et l'URL de son modèle d'instance dans le corps de la requête.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

{
  "baseInstanceName": "[BASE_NAME]",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
  ],
  "name": "[NAME]",
  "targetSize": [SIZE]
}

où vous remplacez les valeurs suivantes :

  • [PROJECT_ID] par l'ID du projet concerné par la requête.
  • [ZONE] par la zone associée à la requête.
  • [NAME] par le nom du groupe d'instances.
  • [BASE_NAME] par le nom à utiliser pour les instances créées au sein du groupe. Comme les instances sont identiques, une chaîne aléatoire est automatiquement attribuée à leur nom. Cette chaîne aléatoire est précédée du nom de base. Par exemple, si des instances portent le nom de base example, elles peuvent s'appeler example-yahs, example-qtyz, etc.
  • [SIZE] par la taille du groupe d'instances.
  • [INSTANCE_TEMPLATE] par le modèle d'instance à utiliser pour le groupe.

Récupérer des groupes existants et leur description

Vous pouvez obtenir des informations sur vos groupes d'instances gérés existants à l'aide de la console, de l'outil de ligne de commande gcloud ou de l'API. Pour obtenir l'id du groupe, vous devez utiliser gcloud ou l'API.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

    Cette page répertorie les groupes d'instances dont vous disposez, ainsi que les groupes d'instances non gérés.

  2. Dans la colonne Nom de la liste, cliquez sur le nom du groupe d'instances que vous souhaitez examiner. La page qui s'ouvre affiche les propriétés du groupe ainsi que la liste des instances qui en font partie.

gcloud

Pour répertorier tous les groupes d'instances gérés d'un projet, exécutez la commande suivante :

gcloud compute instance-groups managed list

Pour obtenir des informations sur un groupe spécifique, exécutez la commande suivante :

gcloud compute instance-groups managed describe [INSTANCE_GROUP] \
    --zone [ZONE]

API

Pour répertorier tous les groupes d'instances gérés d'une zone, créez une requête GET auprès du service instanceGroupManagers :

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

Pour obtenir des informations sur un groupe spécifique, créez une requête GET auprès du service instanceGroupManagers et incluez le nom d'un groupe d'instances géré spécifique :

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

Pour les groupes d'instances gérés régionaux (multizones), utilisez plutôt la ressource regionInstanceGroupManagers : regionInstanceGroupManagers.list et regionInstanceGroupManagers.get.

Modifier le modèle d'instance d'un groupe d'instances géré

Vous pouvez modifier le modèle d'instance d'un groupe géré sans affecter les instances existantes. Le groupe utilise alors le nouveau modèle lorsque vous exécutez une requête d'ajout ou de recréation d'instances, mais ce modèle ne met pas automatiquement à jour les instances existantes du groupe. Cela vous permet de contrôler exactement quelles instances sont mises à jour, mais en contrepartie, votre groupe contiendra des instances différentes.

Après avoir créé un modèle d'instance, modifiez le modèle d'un groupe d'instances existant.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Dans la colonne Nom de la liste, cliquez sur le nom du groupe dont vous souhaitez modifier le modèle d'instance.
  3. Cliquez sur Modifier le groupe pour modifier le groupe d'instances géré.
  4. Dans la section Modèle d'instance, sélectionnez le nouveau modèle d'instance que vous souhaitez utiliser pour le groupe.
  5. Cliquez sur Enregistrer pour appliquer le nouveau modèle.

gcloud

Pour mettre à jour un modèle à l'aide de la méthode set-instance-template, transmettez le nouveau modèle à la sous-commande instance-groups managed set-instance-template :

gcloud compute instance-groups managed set-instance-template [INSTANCE_GROUP] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en indiquant le nom du groupe d'instances géré cible. Spécifiez l'URL du nouveau modèle d'instance dans le corps de la requête :

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers[INSTANCE_GROUP]/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]
}

Une fois le modèle d'instance modifié, recréez des instances individuelles ou mettez à jour toutes les instances du groupe en déployant une mise à jour progressive.

Redimensionner automatiquement un groupe d'instances géré

Vous pouvez configurer des groupes d'instances gérés pour qu'ils ajoutent ou suppriment automatiquement des instances en fonction de leurs charges de travail. Cela permet à vos applications de gérer de façon optimale les hausses de trafic, et vous aide à réduire vos coûts lorsque les besoins en ressources de calcul sont moins importants. Pour découvrir comment mettre à l'échelle vos groupes d'instances gérés, consultez la page Procéder à l'autoscaling de groupes d'instances.

Redimensionner manuellement un groupe d'instances géré

Si un groupe d'instances géré n'est pas déjà configuré pour s'adapter automatiquement, vous pouvez le redimensionner manuellement afin de modifier le nombre d'instances qui le composent. Lorsque vous augmentez sa taille, le groupe d'instances géré exploite le modèle d'instance actuel pour ajouter de nouvelles instances. Si, au contraire, vous réduisez sa taille, le groupe d'instances géré supprime des instances du groupe. Le groupe supprime d'abord les instances dont le champ currentAction correspond à DELETING, CREATING ou RECREATING avant de supprimer les instances en cours d'exécution sans action planifiée.

Si le groupe fait partie d'un service de backend sur lequel le drainage de connexion est activé, le retrait ou la suppression de l'instance de VM peut prendre jusqu'à 60 secondes après la fin de la période de drainage.

Vous pouvez redimensionner un groupe d'instances géré à l'aide de la console Google Cloud Platform, de l'outil gcloud compute ou de l'API.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Dans la colonne Nom de la liste, cliquez sur le nom du groupe dont vous souhaitez modifier la taille.
  3. Cliquez sur Modifier le groupe pour modifier le groupe d'instances géré.
  4. Dans la section Nombre d'instances, spécifiez le nombre d'instances que vous souhaitez inclure au sein du groupe. Si l'autoscaling est activé, le groupe ajoute ou supprime automatiquement des instances, si nécessaire. Vous pouvez toutefois modifier les champs Nombre minimal d'instances et Nombre maximal d'instances pour ajuster indirectement la taille du groupe par le biais d'un autoscaler.
  5. Cliquez sur Enregistrer pour appliquer le nouveau modèle.

gcloud

Vous pouvez redimensionner un groupe d'instances géré à l'aide de la commande suivante :

gcloud compute instance-groups managed resize [INSTANCE_GROUP ] \
    --size [NEW_SIZE] \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en indiquant le nom du groupe d'instances géré cible. Spécifiez la nouvelle taille d'instance en tant que paramètre.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resize?size=[NEW_SIZE]

Une fois votre requête de redimensionnement envoyée, les instances démarrent ou s'arrêtent dès que le système est en mesure de les provisionner ou de les supprimer. Ce processus peut prendre un certain temps selon le nombre d'instances au sein du groupe. Vérifiez l'état des instances de votre groupe d'instances géré.

Désactiver le mode de répétition des tentatives de création

Par défaut, lorsque la création initiale d'une instance de VM échoue, le groupe d'instances géré réessaie continuellement de créer chaque instance jusqu'à la réussite de l'opération. Toutefois, si vous ne souhaitez pas effectuer automatiquement de nouvelles tentatives de création, vous pouvez désactiver le mode de répétition des tentatives de création en ajoutant l'indicateur --nocreation-retries lors du redimensionnement du groupe d'instances. Lorsque ce mode est activé, le groupe d'instances géré n'essaie de créer toutes les instances qu'une seule fois. Si une erreur se produit lors de la création, le groupe d'instances géré ne crée pas l'instance en question et réduit la taille cible du groupe d'instances géré à la place.

Ce mode ne s'applique que lors de la première tentative de création d'une instance. Si la création réussit lorsque ce mode est activé, l'instance se comporte de la même manière que toutes les autres instances créées à l'aide d'une requête de redimensionnement standard. Plus précisément, si une instance en cours d'exécution cesse de fonctionner de manière inattendue et doit être recréée par la suite, ce mode n'affecte pas le comportement de la recréation dans ce scénario.

Il peut être particulièrement utile de désactiver le mode de répétition des tentatives de création lorsque des systèmes créent automatiquement des groupes d'instances qui n'ont pas besoin de disposer d'un nombre exact d'instances. Vous préférerez peut-être choisir rapidement une taille fixe pour votre groupe géré et vous montrer plus flexible quant au nombre d'instances, plutôt que d'attendre indéfiniment la fin de la création de toutes les instances demandées (qui pourrait être retardée de façon temporaire ou permanente en raison d'erreurs de quotas ou d'autres problèmes).

Pour redimensionner un groupe d'instances géré avec le mode de répétition des tentatives de création désactivé, utilisez l'outil gcloud compute ou l'API.

gcloud

À l'aide de l'outil de ligne de commande gcloud, exécutez la commande resize en ajoutant l'indicateur --no-creation-retries :

gcloud beta compute instance-groups managed resize [INSTANCE_GROUP] --size [NEW_SIZE] \
    --nocreation-retries \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en indiquant le nom du groupe d'instances géré cible. Spécifiez la nouvelle taille d'instance et le champ noCreationRetries dans le corps de la requête.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resizeAdvanced

{
 "targetSize": [SIZE]
 "noCreationRetries": true
}

Vous pouvez répertorier les instances en cours de création et vérifier leur mode de création à l'aide de la méthode listManagedInstances. Les instances en cours de création pour lesquelles le mode de répétition des tentatives de création est désactivé possèdent l'état CREATING_WITHOUT_RETRIES.

Configurer la vérification de l'état et l'autoréparation des groupes d'instances gérés

Pour améliorer la disponibilité de votre application et vérifier que cette dernière répond, vous pouvez configurer une règle d'autoréparation pour votre groupe d'instances géré. Une règle d'autoréparation repose sur une vérification de l'état basée sur l'application pour vérifier qu'une application répond comme prévu. Vérifier qu'une application répond est une méthode plus précise que de simplement vérifier si une instance se trouve à l'état RUNNING.

Si l'autoréparation détermine qu'une application ne répond pas, le groupe d'instances géré recrée automatiquement cette instance. Dans le cas d'une instance préemptive, le groupe recrée l'instance lorsque les ressources nécessaires sont à nouveau disponibles.

Vous pouvez utiliser les signaux associés aux vérifications de l'état pour vérifier qu'une instance est créée et que son application répond. Lorsqu'une instance gérée est en cours de création, le champ currentAction a la valeur CREATING. Si une règle d'autoréparation est associée, une fois que l'instance gérée est créée et en cours d'exécution, le champ currentAction de l'instance bascule sur VERIFYING, et le vérificateur de l'état commence à vérifier l'application de l'instance. Si cette vérification de l'état initiale est concluante dans le délai requis au démarrage de l'application, l'instance est vérifiée, et le champ currentAction bascule sur NONE. Lorsque vous associez une vérification de l'état à un groupe d'instances géré pour la première fois, le processus de vérification peut prendre 15 minutes. Consultez la section Vérifier l'état des instances d'un groupe d'instances géré pour plus d'informations.

Vous pouvez configurer une règle d'autoréparation pour un groupe d'instances géré.

En guise d'exemple, suivez les instructions ci-dessous afin de créer une vérification de l'état qui examine la réponse d'un serveur Web sur le port 80. Vous allez ensuite appliquer cette vérification de l'état à un groupe d'instances géré pour vous assurer que les serveurs Web de ce groupe fonctionnent correctement :

Console

  1. Créez une vérification de l'état pour l'autoréparation plus conservatrice que les vérifications de l'état destinées aux équilibreurs de charge.

    Par exemple, créez une vérification de l'état qui recherche une réponse sur le port 80 et dispose d'une marge d'erreur avant de marquer des instances comme UNHEALTHY, entraînant ainsi leur recréation. Dans cet exemple, une instance est marquée comme saine dès qu'un message de réussite s'affiche. Elle est marquée comme non saine après 3 messages d'échec consécutifs.

    1. Accédez à la page "Créer une vérification d'état" dans la console GCP.

      Accéder à la page "Créer une vérification d'état"

    2. Donnez un nom à la vérification de l'état (example-check, par exemple).
    3. Dans la section Protocole, sélectionnez HTTP si l'option n'est pas déjà sélectionnée.
    4. Dans la section Port, saisissez 80.
    5. Dans la section Intervalle entre deux tests, saisissez 5.
    6. Dans la section Délai avant expiration, saisissez 5.
    7. Définissez un Seuil sanitaire pour déterminer combien de vérifications de l'état consécutives réussies doivent s'afficher avant qu'une instance défaillante soit marquée comme saine. Saisissez 1 pour cet exemple.
    8. Définissez un Seuil non sanitaire pour déterminer combien de vérifications de l'état consécutives non réussies doivent s'afficher avant qu'une instance saine soit marquée comme non saine. Saisissez 3 pour cet exemple.
    9. Cliquez sur Créer pour créer la vérification de l'état.
  2. Créez une règle de pare-feu permettant aux enquêtes de la vérification de l'état de se connecter à votre application.

    Les enquêtes de vérification de l'état proviennent des adresses des plages 130.211.0.0/22 et 35.191.0.0/16. Assurez-vous donc que les règles de pare-feu de votre réseau autorisent la vérification de l'état à se connecter. Dans cet exemple, notre groupe d'instances géré utilise le réseau default, et ses instances écoutent le port 80. Si le port 80 n'est pas déjà ouvert sur le réseau par défaut, créez une règle de pare-feu.

    1. Accédez à la page "Créer une règle de pare-feu" dans la console GCP.

      Accéder à la page "Créer une règle de pare-feu"

    2. Dans la section Nom, saisissez le nom de la règle de pare-feu (par exemple, allow-health-check).
    3. Dans la section Réseau, sélectionnez le réseau default.
    4. Dans la section Filtre source, sélectionnez IP ranges.
    5. Dans la section Plages d'adresses IP sources, saisissez 130.211.0.0/22 et 35.191.0.0/16.
    6. Dans la section Protocoles et ports, sélectionnez Protocoles et ports spécifiés, puis saisissez tcp:80.
    7. Cliquez sur Créer.
  3. Appliquez la vérification de l'état en configurant une règle d'autoréparation pour votre groupe d'instances géré régional ou zonal.

    1. Dans la console GCP, accédez à la page "Groupes d'instances".

      Accéder à la page "Groupes d'instances"

    2. Dans la colonne Nom de la liste, cliquez sur le nom du groupe d'instances auquel vous souhaitez appliquer la vérification de l'état.
    3. Cliquez sur Modifier le groupe pour modifier le groupe d'instances géré.
    4. Dans la section Autoréparation, sélectionnez la vérification de l'état que vous avez créée précédemment.
    5. Modifiez ou conservez le paramètre Délai initial. Il permet de retarder l'autoréparation et la potentielle recréation prématurée de l'instance si celle-ci est en cours de démarrage. Le délai initial commence au moment où le champ currentAction de l'instance passe à l'état VERIFYING.
    6. Cliquez sur Enregistrer pour appliquer les modifications.

    L'autoréparation peut mettre quelques minutes avant de commencer à surveiller les instances du groupe.

gcloud

  1. Créez une vérification de l'état pour l'autoréparation plus conservatrice que les vérifications de l'état destinées aux équilibreurs de charge.

    Par exemple, créez une vérification de l'état qui recherche une réponse sur le port 80 et dispose d'une marge d'erreur avant de marquer des instances comme UNHEALTHY, entraînant ainsi leur recréation. Dans cet exemple, une instance est marquée comme saine dès qu'un message de réussite s'affiche. Elle est marquée comme non saine après 3 messages d'échec consécutifs.

    gcloud compute health-checks create http example-check --port 80 \
        --check-interval 30s \
        --healthy-threshold 1 \
        --timeout 10s \
        --unhealthy-threshold 3
    
  2. Créez une règle de pare-feu permettant aux enquêtes de la vérification de l'état de se connecter à votre application.

    Les enquêtes de vérification de l'état proviennent des adresses des plages 130.211.0.0/22 et 35.191.0.0/16. Assurez-vous donc que vos règles de pare-feu autorisent la vérification de l'état à se connecter. Dans cet exemple, notre groupe d'instances géré utilise le réseau default, et ses instances écoutent le port 80. Si le port 80 n'est pas déjà ouvert sur le réseau par défaut, créez une règle de pare-feu.

    gcloud compute firewall-rules create allow-health-check \
        --allow tcp:80 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --network default
    
  3. Appliquez la vérification de l'état en configurant une règle d'autoréparation pour votre groupe d'instances géré régional ou zonal.

    Pour appliquer la vérification de l'état au groupe d'instances géré, exécutez la commande update.

    Le paramètre initial-delay permet de retarder l'autoréparation et la potentielle recréation prématurée de l'instance si celle-ci est en cours de démarrage. Le délai initial commence au moment où le champ currentAction de l'instance passe à l'état VERIFYING.

    Exemple :

    gcloud compute instance-groups managed update my-mig \
        --health-check example-check \
        --initial-delay 300 \
        --zone us-east1-b
    

    L'autoréparation peut mettre 15 minutes avant de commencer à surveiller les instances du groupe.

API

  1. Créez une vérification de l'état pour l'autoréparation plus conservatrice que les vérifications de l'état destinées aux équilibreurs de charge.

    Par exemple, créez une vérification de l'état qui recherche une réponse sur le port 80 et dispose d'une marge d'erreur avant de marquer des instances comme UNHEALTHY, entraînant ainsi leur recréation. Dans cet exemple, une instance est marquée comme saine dès qu'un message de réussite s'affiche. Elle est marquée comme non saine après 3 messages d'échec consécutifs.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks
    
    {
     "name": "example-check",
     "type": "http",
     "port": 80,
     "checkIntervalSec": 30,
     "healthyThreshold": 1,
     "timeoutSec": 10,
     "unhealthyThreshold": 3
    }
    
  2. Créez une règle de pare-feu permettant aux enquêtes de la vérification de l'état de se connecter à votre application.

    Les enquêtes de vérification de l'état proviennent des adresses des plages 130.211.0.0/22 et 35.191.0.0/16. Assurez-vous donc que vos règles de pare-feu autorisent la vérification de l'état à se connecter. Dans cet exemple, notre groupe d'instances géré utilise le réseau default, et ses instances écoutent le port 80. Si le port 80 n'est pas déjà ouvert sur votre réseau par défaut, créez une règle de pare-feu.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls
    
    {
     "name": "allow-health-check",
     "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
     "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
     ],
     "allowed": [
      {
       "ports": [
        "80"
       ],
       "IPProtocol": "tcp"
      }
     ]
    }
    
  3. Appliquez la vérification de l'état en configurant une règle d'autoréparation pour votre groupe d'instances géré régional ou zonal.

    Une règle d'autoréparation fait partie d'une ressource instanceGroupManager ou regionInstanceGroupManager.

    Vous pouvez définir une règle d'autoréparation à l'aide des méthodes insert ou patch.

    L'exemple suivant définit une règle d'autoréparation à l'aide de la méthode instanceGroupManagers.patch.

    PATCH https://www.googleapis.com/compute/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]
    {
      "autoHealingPolicies": [
        {
          "healthCheck": "global/healthChecks/example-check",
          "initialDelaySec": 300
        }
      ],
    }
    

    Le paramètre initialDelaySec permet de retarder l'autoréparation et la potentielle recréation prématurée de l'instance si celle-ci est en cours de démarrage. Le délai initial commence au moment où le champ currentAction de l'instance passe à l'état VERIFYING.

    L'autoréparation peut mettre quelques minutes avant de commencer à surveiller les instances du groupe.

    Pour désactiver l'autoréparation basée sur l'application, définissez la règle d'autoréparation sur une valeur vide (autoHealingPolicies[]). Le groupe d'instances géré ne recrée que les instances qui ne possèdent pas l'état RUNNING.

    Vous pouvez obtenir la règle d'autoréparation d'un groupe d'instances géré en lisant le champ instanceGroupManagers.autoHealingPolicies. Vous pouvez obtenir une ressource de groupe d'instances géré à l'aide de l'une des méthodes suivantes :

Comportement de l'autoréparation

L'autoréparation recrée les instances non opérationnelles à l'aide du modèle d'instance utilisé à l'origine pour créer l'instance de VM (il ne s'agit pas nécessairement du modèle d'instance actuel dans le groupe d'instances géré). Par exemple, si une instance de VM a été créée à l'aide du modèle instance-template-a et que vous mettez ensuite à jour le groupe d'instances géré de façon à ce qu'il utilise le modèle instance-template-b en mode OPPORTUNISTIC, l'autoréparation recréera quand même l'instance avec instance-template-a. En effet, comme les recréations liées à l'autoréparation ne sont pas initiées par l'utilisateur, Compute Engine ne veut pas supposer que l'instance de VM devrait utiliser le nouveau modèle. Si vous souhaitez appliquer un nouveau modèle, consultez la section Modifier le modèle d'instance d'un groupe d'instances géré.

Le nombre d'instances faisant simultanément l'objet d'une autoréparation est toujours inférieur à la taille du groupe d'instances géré. Cela garantit que le groupe continue à exécuter un sous-ensemble d'instances même si, par exemple, la règle d'autoréparation ne correspond pas à la charge de travail, si les règles de pare-feu sont mal configurées, ou si une instance saine est identifiée comme étant non saine en raison de problèmes de connectivité réseau ou d'infrastructure. Toutefois, si un groupe d'instances géré zonal ne comporte qu'une seule instance ou si un groupe d'instances géré régional ne compte qu'une seule instance par zone, l'autoréparation recréera ces instances si elles ne sont plus saines.

L'autoréparation ne recréera pas une instance UNHEALTHY au cours de la période d'initialisation de cette dernière, comme spécifié par la propriété autoHealingPolicies[].initialDelaySec. Cela permet de retarder la vérification et l'éventuelle recréation prématurée de l'instance si celle-ci est en cours de démarrage. Le délai initial commence au moment où le champ currentAction de l'instance prend la valeur VERIFYING.

Autoréparation et disques

Lors de la recréation d'une instance à partir de son modèle, le processus d'autoréparation traite les divers types de disques différemment. En cas de tentative de recréation d'une instance gérée, certaines configurations de disque peuvent entraîner l'échec de l'autoréparation.

Type de disque autodelete Comportement lors d'une opération d'autoréparation
Nouveau disque persistant true Le disque est recréé comme spécifié dans le modèle de l'instance. Toutes les données écrites sur ce disque sont perdues lorsque le disque et son instance sont recréés.
Nouveau disque persistant false L'ancien disque est dissocié, mais il reste disponible. Toutefois, la recréation d'instances de VM échoue, car Compute Engine ne peut pas recréer un disque existant.
Disque persistant existant true L'ancien disque est supprimé. La recréation d'instances de VM échoue, car Compute Engine ne peut pas réassocier un disque supprimé à l'instance.
Disque persistant existant false L'ancien disque est réassocié comme spécifié dans le modèle de l'instance. Les données figurant sur le disque sont conservées. Toutefois, pour les disques en lecture-écriture existants, un groupe d'instances géré ne peut contenir qu'une seule VM, car un même disque persistant ne peut pas être associé à plusieurs instances en mode lecture-écriture.
Nouveau disque SSD local N/A Le disque est recréé comme spécifié dans le modèle de l'instance. Les données figurant sur un disque SSD local sont perdues en cas de recréation ou de suppression d'une instance.

Le processus d'autoréparation ne réassocie pas les disques qui ne sont pas spécifiés dans le modèle de l'instance, tels que les disques que vous avez associés manuellement à une VM après sa création.

Pour conserver les données importantes écrites sur le disque, vous devez prendre des précautions, par exemple :

  • prendre des instantanés réguliers des disques persistants ;

  • exporter des données vers une autre source, telle que Cloud Storage.

Si vous souhaitez conserver des paramètres importants de vos instances, Google vous recommande également d'utiliser dans votre modèle d'instance une image personnalisée contenant tous les paramètres personnalisés dont vous avez besoin. Ainsi, lorsqu'une instance est recréée, le groupe d'instances géré utilise l'image personnalisée que vous avez spécifiée.

Afficher l'historique des opérations d'autoréparation

Vous pouvez afficher les événements d'autoréparation passés à l'aide de l'outil gcloud ou de l'API.

gcloud

Exécutez la commande gcloud compute operations list avec un filtre pour n'afficher que les événements d'autoréparation compris dans votre projet.

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

Pour afficher plus d'informations sur une opération de réparation spécifique, exécutez la commande describe. Exemple :

gcloud compute operations describe repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5 --zone us-east1-b

API

Pour les groupes d'instances gérés zonaux, envoyez une demande GET à la ressource operations de la zone et incluez un filtre pour étendre la liste de sortie aux événements compute.instances.repair.*.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

Pour les groupes d'instances gérés régionaux, utilisez la ressource operations de la région plutôt que celle d'une zone.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/region/[REGION]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

Pour afficher plus d'informations sur une opération de réparation spécifique, envoyez une requête GET pour celle-ci.

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/operations/repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5

Identifier des instances appartenant à un groupe

Pour afficher la liste de toutes les instances d'un groupe, consultez la section Récupérer des groupes existants et leur description.

Pour vérifier si une instance spécifique appartient actuellement à un groupe, vous pouvez utiliser la console ou l'API.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page "Instances de VM"

  2. Cliquez sur une instance pour accéder aux informations sur l'instance de VM.
  3. Si l'instance de machine virtuelle appartient à un groupe d'instances gérés, le nom de ce groupe apparaît sous l'en-tête Utilisée par. Si l'instance de VM n'appartient pas à un groupe, l'en-tête Utilisée par n'apparaît pas sur la page des détails de l'instance.

API

Reportez-vous à la section Afficher les référents associés à des instances de VM.

Pour vérifier si une instance appartient ou appartenait à un groupe d'instances géré, recherchez les deux clés de métadonnées suivantes dans les métadonnées de l'instance :

  • instance-template indique le modèle à partir duquel l'instance a été créée.
  • created-by indique le groupe d'instances géré qui a créé l'instance.

Même si vous abandonnez l'instance, elle possédera toujours ces entrées de métadonnées, à moins que vous ne les supprimiez manuellement.

Par exemple, si vous disposez d'une instance random-instance-biy et souhaitez savoir si elle a été créée par un groupe d'instances géré, vous pouvez la décrire et rechercher les clés de métadonnées mentionnées ci-dessus. Exemple :

gcloud compute instances describe random-instance-biy --zone us-central1-f

gcloud affiche une réponse semblable à la suivante :

canIpForward: false
cpuPlatform: Intel Ivy Bridge
creationTimestamp: '2016-08-24T14:11:38.012-07:00'
disks:
- autoDelete: true
  boot: true
  deviceName: persistent-disk-0
  index: 0
  interface: SCSI
  kind: compute#attachedDisk
...[snip]...
metadata:
  items:
  - key: instance-template
    value: projects/123456789012/global/instanceTemplates/example-it
  - key: created-by
    value: projects/123456789012/zones/us-central1-f/instanceGroupManagers/igm-metadata

Supprimer des instances individuelles d'un groupe

Vous pouvez supprimer des instances individuelles d'un groupe d'instances géré. Cette opération réduit la valeur targetSize spécifiée pour le groupe d'instances et retire les instances des pools cibles auxquels elles appartiennent.

La suppression des instances d'un groupe géré n'entraîne aucune modification des paramètres d'autoscaler définis. Si l'autoscaler détecte une augmentation de la charge de travail sur les autres instances du groupe, il peut alors lui réattribuer sa taille précédente. Pour éviter cela, arrêtez l'autoscaler avant d'essayer de supprimer les instances.

Si le groupe fait partie d'un service de backend sur lequel le drainage de connexion est activé, le retrait ou la suppression de l'instance de VM peut prendre jusqu'à 60 secondes après la fin de la période de drainage.

Supprimez des instances d'un groupe d'instances géré à l'aide de la console Google Cloud Platform, de l'outil gcloud compute ou de l'API.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Dans la colonne Nom de la liste, cliquez sur le nom du groupe qui contient les instances individuelles que vous souhaitez supprimer. La page qui s'ouvre affiche les propriétés du groupe, ainsi que la liste des instances qui en font partie.
  3. Dans la liste des instances, sélectionnez une ou plusieurs instances à supprimer.
  4. Cliquez sur Supprimer. Les instances sélectionnées sont supprimées.

gcloud

Pour supprimer une instance à l'aide de gcloud, exécutez la sous-commande instance-groups managed delete-instances :

gcloud compute instance-groups managed delete-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en indiquant le nom du groupe d'instances géré cible. Dans le corps de la requête, spécifiez les URL de la ou des instances que vous souhaitez supprimer.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/deleteInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

Une fois votre requête de suppression d'instances envoyée, les instances s'arrêtent dès que le système est en mesure de les supprimer. Ce processus peut prendre un certain temps selon le nombre d'instances que vous supprimez du groupe. Vérifiez l'état des instances de votre groupe d'instances géré.

Abandonner des instances d'un groupe

Vous pouvez séparer une instance d'un groupe d'instances géré pour déboguer plus facilement des problèmes liés aux instances individuelles sans affecter le groupe dans son ensemble. Lorsque vous abandonnez une instance, celle-ci est également retirée des équilibreurs de charge attribués au groupe d'instances géré. Les pools cibles qui ont été manuellement assignés à des instances individuelles spécifiques ne sont pas retirés.

L'abandon d'instances réduit la taille targetSize spécifiée pour le groupe d'instances, mais n'entraîne aucune modification des paramètres d'autoscaler définis. Les groupes d'instances gérés dotés d'un autoscaler continuent d'ajouter ou de retirer automatiquement des instances, si nécessaire.

Si le groupe fait partie d'un service de backend sur lequel le drainage de connexion est activé, le retrait ou la suppression de l'instance de VM peut prendre jusqu'à 60 secondes après la fin de la période de drainage.

Abandonnez des instances d'un groupe d'instances géré à l'aide de la console Google Cloud Platform, de l'outil gcloud compute ou de l'API.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Dans la colonne Nom de la liste, cliquez sur le nom du groupe qui contient les instances que vous souhaitez retirer. La page qui s'ouvre affiche les propriétés du groupe ainsi que la liste des instances qui en font partie.
  3. Dans la liste des instances, sélectionnez une ou plusieurs instances à retirer du groupe.
  4. Cliquez sur Retirer du groupe. Les instances sélectionnées ne font plus partie du groupe, mais continuent de s'exécuter en dehors de celui-ci.

gcloud

Pour retirer une instance du groupe sans la supprimer, exécutez la sous-commande abandon-instances.

gcloud compute instance-groups managed abandon-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en indiquant le nom du groupe d'instances géré cible. Dans le corps de la requête, spécifiez les URL des instances que vous souhaitez abandonner.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/abandonInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

Une fois votre requête d'abandon d'instances envoyée, le groupe retire les instances dès que possible. Vérifiez l'état des instances de votre groupe d'instances géré.

Recréer des instances au sein du groupe

Le processus de recréation d'instances supprime les instances spécifiées et en crée d'autres à partir du modèle d'instance attribué au groupe géré.

Utilisez cette méthode pour mettre à jour les instances sélectionnées afin qu'elles utilisent le dernier modèle d'instance. Si vous devez recréer toutes les instances d'un groupe d'instances géré, lancez plutôt une mise à jour progressive.

Si le groupe fait partie d'un service de backend sur lequel le drainage de connexion est activé, le retrait ou la suppression de l'instance de VM peut prendre jusqu'à 60 secondes après la fin de la période de drainage.

Recréez des instances au sein d'un groupe d'instances géré à l'aide de l'outil gcloud compute ou de l'API.

gcloud

Exécutez la sous-commande instance-groups managed recreate-instances.

gcloud compute instance-groups managed recreate-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en indiquant le nom du groupe d'instances géré cible. Dans le corps de la requête, spécifiez les URL des instances que vous souhaitez recréer.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/recreateInstances

{
 "instances": [
  "zones/[ZONE]/instances/example-instance-i3n2",
  "zones/[ZONE]/instances/example-instance-l6n1"
 ]
}

Une fois votre requête de recréation d'instances envoyée, les nouvelles instances démarrent dès que le système est en mesure de les provisionner. Ce processus peut prendre un certain temps selon le nombre d'instances que vous recréez. Vérifiez l'état des instances de votre groupe d'instances géré.

Vérifier l'état des instances d'un groupe d'instances géré

Plusieurs commandes et requêtes permettent de créer, de supprimer et de modifier les instances d'un groupe géré. Un message DONE s'affiche lorsque le groupe planifie ces actions pour les instances. Celles-ci ne sont toutefois créées, supprimées ou mises à jour qu'une fois les actions planifiées terminées. Vous devez vérifier l'état de ces instances à l'aide de l'outil gcloud compute ou de l'API.

gcloud

Répertoriez les instances du groupe et les actions actuelles qui leur sont associées à l'aide de la commande instance-groups managed list-instances.

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP] \
    --zone [ZONE]

Exemple :

gcloud compute instance-groups managed list-instances example-group \
    --zone [ZONE]
NAME               STATUS  ACTION   LAST_ERROR
example-group-0gnk RUNNING NONE
example-group-15xy         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-18ep         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0, Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-1u1y         CREATING

Dans cet exemple, example-group contient quatre instances : une instance en cours d'exécution, deux instances dont la création a échoué en raison de limites de quotas d'adresses et de processeurs, et une instance en cours de création qui n'a pas encore rencontré d'erreur.

Pour les groupes d'instances préemptives, si la capacité préemptive est indisponible, les actions de création échouent avec l'erreur suivante : ZONE_RESOURCE_POOL_EXHAUSTED. Pour afficher les événements de préemption passés, consultez la section Détecter si une instance a été préemptée.

Attendre que les instances soient stables

Exécutez la commande instance-groups managed wait-until-stable pour vérifier automatiquement un groupe d'instances et demander à votre script d'attendre que toutes les instances du groupe soient stables.

gcloud compute instance-groups managed wait-until-stable example-group \
    --zone [ZONE]

API

Envoyez une requête au service instanceGroupManagers en spécifiant le nom du groupe d'instances géré qui contient les instances à vérifier.

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/listManagedInstances

Exemple :

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instanceGroupManagers/example-group/listManagedInstances

La requête reçoit la réponse suivante :

{
 "managedInstances": [
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-0gnk",
   "id": "16960422116594945029",
   "instanceStatus": "RUNNING",
   "currentAction": "NONE"
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-15xy",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-18ep",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0"
      },
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-1u1y",
   "id": "7239700230861444556",
   "instanceStatus": "RUNNING",
   "currentAction": "CREATING"
  }
 ]
}

Dans cet exemple, example-group contient quatre instances : une instance en cours d'exécution, deux instances dont la création a échoué en raison de limites de quotas d'adresses et de processeurs, et une instance en cours de création qui n'a pas encore rencontré d'erreur.

Pour les groupes d'instances préemptives, si la capacité préemptive est indisponible, les actions de création échouent avec l'erreur suivante : ZONE_RESOURCE_POOL_EXHAUSTED. Pour afficher les événements de préemption passés, consultez la section Détecter si une instance a été préemptée.

Supprimer un groupe d'instances géré

Lorsque vous supprimez un groupe d'instances géré à l'aide de la console Google Cloud Platform ou de gcloud, toutes les instances du groupe et tous les autoscalers associés sont également supprimés. Si vous devez conserver des instances appartenant au groupe concerné, abandonnez-les d'abord afin de les retirer du groupe. Supprimez ensuite le groupe d'instances géré à l'aide de delete.

Avant de pouvoir supprimer un groupe d'instances géré à l'aide de l'API, vous devez d'abord envoyer des requêtes distinctes pour supprimer tous les autoscalers associés.

Supprimez l'intégralité d'un groupe d'instances géré et ses instances à l'aide de la console Google Cloud Platform, de l'outil gcloud compute ou de l'API.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Dans la liste, sélectionnez un ou plusieurs groupes à supprimer.
  3. Cliquez sur Supprimer pour supprimer le groupe et toutes les instances qui le composent.

gcloud

Exécutez la sous-commande instance-groups managed delete.

gcloud compute instance-groups managed delete [INSTANCE_GROUP] \
    --zone [ZONE]

API

Envoyez une requête DELETE au service instanceGroupManagers en spécifiant le nom du groupe d'instances géré que vous souhaitez supprimer.

DELETE https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

Créer des groupes d'instances préemptives

Les groupes d'instances gérés vous permettent de créer rapidement plusieurs instances préemptives, ce qui vous aide à réduire les coûts liés aux instances de vos groupes. Par exemple, vous pouvez créer un groupe d'instances préemptives, exécuter une tâche de traitement par lot à l'aide de ces instances, puis supprimer le groupe une fois la tâche terminée.

Pour créer un groupe d'instances préemptives, activez l'option "Préemption" dans un modèle d'instance, puis créez le groupe d'instances géré à partir du modèle.

Console

  1. Accédez à la page "Modèles d'instances" de la console GCP.

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

  2. Cliquez sur Nouveau modèle d'instance.
  3. Spécifiez les propriétés souhaitées dans votre modèle d'instance.
  4. Cliquez sur Afficher les options avancées pour développer la section Règles de disponibilité.
  5. Activez l'option Préemption.
  6. Cliquez sur Créer pour générer le modèle.
  7. Créez un groupe d'instances géré à partir du modèle.

gcloud

Dans gcloud compute, créez un modèle d'instance à l'aide de la commande instance-templates create, en spécifiant l'indicateur --preemptible.

gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
    --preemptible

Une fois le modèle d'instance généré, créez un groupe d'instances géré à partir de celui-ci.

API

Pour créer un modèle d'instance, faites appel à la méthode instanceTemplates().insert. Ajoutez la propriété preemptible sous scheduling, puis définissez-la sur true.

{
"name": "[INSTANCE_TEMPLATE]",
"properties": {
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "scheduling":
  {
    "preemptible": true
  },
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

Une fois le modèle d'instance généré, créez un groupe d'instances géré à partir de celui-ci.

Ajouter un groupe d'instances géré à un équilibreur de charge

La fonctionnalité d'équilibrage de charge de Google Cloud Platform diffuse le trafic à l'aide de groupes d'instances, gérés ou non. Selon le type d'équilibreur de charge que vous utilisez, vous pouvez ajouter des groupes d'instances à un service de backend ou à un pool cible. Pour en savoir plus sur l'équilibrage de charge, consultez la page Choisir un équilibreur de charge.

Ajouter un groupe d'instances géré à un service de backend

Vous devez disposer d'un service de backend pour pouvoir créer un équilibreur de charge interne, proxy TCP, proxy SSL ou HTTP(S). Ce type de service contient des backends individuels qui comportent chacun un groupe d'instances, géré ou non. Les instances du groupe répondent au trafic provenant de l'équilibreur de charge. Le service de backend sait à son tour quelles instances il peut exploiter, quel volume de trafic il peut traiter et quel volume il traite actuellement. En outre, le service de backend vérifie l'état et n'envoie pas de nouvelles connexions aux instances défectueuses.

Pour découvrir comment ajouter un groupe d'instances à un service de backend, consultez la section Ajouter des groupes d'instances à un service de backend.

Ajouter un groupe d'instances géré à un pool cible

Un pool cible est un objet qui contient une ou plusieurs instances de VM. Il permet à un équilibreur de charge réseau de transférer des requêtes utilisateur vers le pool cible associé. Les instances qui appartiennent à ce pool cible traitent ces requêtes et renvoient une réponse. Vous pouvez ajouter un groupe d'instances géré à un pool cible pour que, lorsque des instances sont ajoutées ou supprimées dans ce groupe, le pool soit lui aussi automatiquement mis à jour avec les modifications.

Le pool cible dans lequel vous ajoutez un groupe d'instances géré doit avoir été créé au préalable. Pour en savoir plus, consultez la section Ajouter un pool cible.

Pour ajouter un groupe d'instances géré existant à un pool cible, suivez les instructions ci-dessous. Ce processus permet d'ajouter toutes les instances de VM faisant partie du groupe géré au pool cible.

Console

  1. Accédez à la page "Pools cibles" de la console GCP.

    Accéder à la page "Pools cibles"

  2. Cliquez sur le pool cible auquel vous souhaitez ajouter le groupe d'instances.
  3. Cliquez sur le bouton Modifier.
  4. Faites défiler l'écran vers le bas jusqu'à la section Instances de VM, puis cliquez sur Sélectionner des groupes d'instances.
  5. Sélectionnez un groupe d'instances dans le menu déroulant.
  6. Enregistrez les modifications.

gcloud

Dans l'outil de ligne de commande gcloud, exécutez la commande set-target-pools :

gcloud compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--zone ZONE]

où :

  • [INSTANCE_GROUP] est le nom du groupe d'instances.
  • [TARGET_POOL] est le nom du ou des pools cibles auxquels vous souhaitez ajouter le groupe d'instances.
  • [ZONE] est la zone du groupe d'instances.

API

Dans l'API, envoyez une demande POST à l'adresse URI suivante :

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

où :

  • [PROJECT_ID] est l'ID de projet pour cette requête.
  • [ZONE] est la zone du groupe d'instances.
  • [INSTANCE_GROUP] est le nom du groupe d'instances.

Le corps de la requête doit contenir une liste d'URI pointant vers les pools cibles auxquels vous souhaitez ajouter le groupe. Exemple :

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

Attribuer des ports nommés à des groupes d'instances gérés

Les ports nommés sont des paires clé/valeur qui représentent un nom de service et le numéro de port sur lequel le service s'exécute. Ils permettent aux services d'équilibrage de charge de rediriger le trafic vers des ports spécifiques sur des instances individuelles. Par exemple, si vous définissez un port nommé sur http:80, puis configurez votre service de backend pour qu'il envoie du trafic vers un port nommé http, l'équilibrage de charge transfère le trafic au port 80 des instances individuelles appartenant au groupe d'instances.

Les ports nommés sont des métadonnées simples utilisées par l'équilibrage de charge. Ils ne permettent de contrôler ni les ressources réseau, ni le pare-feu dans Compute Engine.

Vous pouvez attribuer plusieurs ports à chaque nom de service, et plusieurs noms de service à chaque port. Gardez toutefois à l'esprit qu'un service de backend ne peut transférer le trafic qu'à un seul port nommé à la fois.

Console

  1. Dans la console GCP, accédez à la page "Groupes d'instances".

    Accéder à la page "Groupes d'instances"

  2. Cliquez sur le nom du groupe d'instances dans lequel vous souhaitez spécifier des ports nommés. La page qui s'ouvre affiche les propriétés du groupe.
  3. Cliquez sur Modifier le groupe pour modifier le groupe d'instances géré.
  4. Cliquez sur Préciser le mappage des noms des ports pour développer les options relatives aux ports nommés.
  5. Cliquez sur Ajouter un élément, puis saisissez le nom de port souhaité, ainsi que les numéros de port que vous voulez associer à ce nom. Cliquez à nouveau sur Ajouter un élément pour ajouter d'autres entrées le cas échéant.
  6. Cliquez sur Enregistrer pour enregistrer les modifications et appliquer les ports nommés aux instances du groupe géré.

gcloud

Définissez un ou plusieurs ports nommés à l'aide de la commande set-named-ports :

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports [PORT_NAME]:[PORT],[PORT_NAME]:[PORT]

Exemple :

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:80,name2:8080

Pour attribuer plusieurs ports à chaque nom de service, ou plusieurs noms à chaque service, créez plusieurs entrées pour chaque nom ou port. Par exemple, attribuez le nom name1 aux ports 10, 20 et 80. Assignez ensuite les noms name2 et name3 au port 80. Enfin, attribuez le port 9000 au nom name4.

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:10,name1:20,name1:80,\
                name2:8080,name3:8080,\
                name4:9000

Vous pouvez vérifier les attributions des ports nommés d'un groupe d'instances géré à l'aide de la commande get-named-ports :

gcloud compute instance-groups managed get-named-ports [INSTANCE_GROUP]
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

API

L'API Instance Group Manager n'offre pas de méthode API setNamedPorts, mais vous pouvez effectuer cette tâche à l'aide de l'API Instance Group à la place.

Envoyez une requête à l'API Instance Group en spécifiant le nom du groupe d'instances. Récupérez la valeur fingerprint actuelle associée au groupe en obtenant des informations sur un groupe spécifique. Incluez la valeur fingerprint et une ou plusieurs paires de valeurs namedPorts dans le corps de la requête :

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  },
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  }
 ]
}

Exemple :

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 80
  },
  {
   "name": "name2",
   "port": 8080
  }
 ]
}

Pour attribuer plusieurs ports à chaque nom de service, créez plusieurs entrées pour ce nom de service. Par exemple, vous pouvez attribuer les ports 10, 20 et 80 au nom name1. Affectez également le port 8080 au nom name2.

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 10
  },
  {
   "name": "name1",
   "port": 20
  }
  {
   "name": "name1",
   "port": 80
  }
  {
   "name": "name2",
   "port": 8080
  }
  {
   "name": "name3",
   "port": 80
  }
  {
   "name": "name4",
   "port": 8080
  }
 ]
}

Pour répertorier les ports nommés déjà attribués à un groupe d'instances géré, envoyez une requête GET qui pointe vers le groupe :

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

Fonctionnement des champs instanceTemplate et versions

Lorsque vous créez un groupe d'instances géré, vous fournissez un modèle d'instance qui permet au groupe de créer des instances de VM individuelles. Par défaut, Compute Engine décrit le modèle d'instance utilisé dans deux propriétés d'API distinctes : la propriété de niveau supérieur instanceTemplate et la propriété versions. Par exemple, dans le groupe d'instances géré suivant, les champs instanceTemplate et versions sont tous deux renseignés :

{

 "name": "example-group",
 "zone": "zones/us-central1-a",
 "instanceTemplate": "global/instanceTemplates/example-it",
 "versions": [
  {
   "name": "v3",
   "instanceTemplate": "global/instanceTemplates/example-it",
   "targetSize": {
    "calculated": 3
   }
  }
 ]...
}

Compute Engine renseigne automatiquement le champ de niveau supérieur instanceTemplate et le champ versions pour permettre la rétrocompatibilité. Nous vous recommandons de spécifier versions et d'omettre instanceTemplates dans la mesure du possible. Si votre code d'application définit toutefois le champ de niveau supérieur instanceTemplate, la requête reste valide.

Pour en savoir plus sur l'outil de mise à jour des groupes d'instances gérés, consultez la page Mettre à jour les groupes d'instances gérés.

(Avancé) Créer des versions Canary des modèles d'instance avec un groupe d'instances géré

Il est possible de créer un groupe d'instances géré composé de deux groupes de VM exploitant des modèles d'instance différents. Par exemple, vous voudrez peut-être créer un groupe d'instances géré comportant 20 instances de VM, mais n'en exécuter que 10 sur une image d'OS spécifique et exécuter le reste sur une autre image d'OS. Cette fonctionnalité vous permet de comparer les deux versions de modèle d'instance avant d'en choisir une.

Dans l'API, envoyez une requête POST à l'URL suivante :

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

Votre corps de requête doit omettre le champ de niveau supérieur instanceTemplates, mais inclure la propriété versions avec deux modèles d'instance définis. Dans chaque objet versions, vous spécifiez un modèle d'instance. Pour l'un des objets versions (et non les deux), vous devez également spécifier l'élément targetSize. Par exemple, la requête suivante crée un groupe d'instances dans lequel 50 % des instances de VM utilisent le modèle d'instance example-template, tandis que le reste des instances de VM exploite le modèle small-machine-type :

{
  "baseInstanceName": "example-instances",
  "name": "example-group",
  "targetSize": 5,
  "versions":
  [
    {
      "instanceTemplate": "global/instanceTemplates/example-template",
      "targetSize":
      {
        "percent": 50
      }
    },
   {
     "instanceTemplate": "global/instanceTemplates/small-machine-type"
   }
  ]
}

Groupes d'instances gérés et IAM

Toutes les opérations effectuées par Compute Engine dans le cadre du groupe d'instances géré sont exécutées à l'aide du compte de service des API Google qui est associé à votre projet. Ce compte de service basé sur un projet possède une adresse e-mail au format suivant :

[PROJECT_ID]@cloudservices.gserviceaccount.com

où :

  • [PROJECT_ID] est l'ID numérique du projet correspondant.

Le compte de service des API Google est différent du compte de service Compute Engine par défaut.

Il vous incombe de vérifier que le compte de service utilisé par le groupe d'instances géré dispose des privilèges suffisants pour créer des instances de VM basées sur le modèle d'instance. Plus spécifiquement, le compte de service doit détenir le rôle compute.instanceAdmin.v1 (et éventuellement le rôle serviceAccountUser) pour créer et gérer des instances au sein du groupe d'instances. Le rôle serviceAccountUser n'est requis que si le groupe géré doit créer des instances pouvant s'exécuter en tant que compte de service. Gardez également à l'esprit que ce compte est utilisé par d'autres processus, y compris Deployment Manager.

Lorsque vous créez un groupe d'instances géré ou mettez à jour un modèle d'instance, Compute Engine confirme que le compte de service des API Google répond aux exigences suivantes :

  • Si vous envisagez de créer des instances pouvant s'exécuter en tant que compte de service, le compte de service des API Google doit détenir le rôle serviceAccountUser sur le modèle d'instance.
  • Le compte de service doit être autorisé à accéder à toutes les ressources référencées dans les modèles d'instance, telles que des images, disques, réseaux VPC et sous-réseaux.

Pour en savoir plus sur les comptes de service, lisez la présentation des comptes de service.

Mettre à jour toutes les instances d'un groupe d'instances géré

Consultez la page Mettre à jour les groupes d'instances gérés.

Dépannage

Mon groupe d'instances géré ne parvient pas à créer une instance. Que se passe-t-il ?

Plusieurs problèmes peuvent empêcher le groupe d'instances de créer ou de recréer une instance. Voici les problèmes les plus courants :

  • Le groupe d'instances géré tente de créer ou de recréer à la fois l'instance et le disque de démarrage persistant, mais le disque persistant existe déjà. Par défaut, les disques de démarrage persistants sont créés en même temps que les nouvelles instances. Ils sont en outre nommés d'après l'instance. Si une instance porte le nom my-awesome-instance, le disque s'appelle également my-awesome-instance. Cependant, si un disque persistant existant porte déjà ce nom, la requête échoue. Supprimez le disque persistant existant pour résoudre le problème.

  • Votre modèle d'instance a défini l'option disks.autoDelete sur false pour les disques de démarrage persistants. Par conséquent, le disque persistant d'une instance a été conservé lorsque celle-ci a dû être supprimée (en raison d'une autoréparation, par exemple). Quand le groupe d'instances géré a tenté de recréer l'instance avec le même nom, le problème ci-dessus est survenu (un disque persistant existant portait déjà le même nom). Supprimez le disque persistant existant pour résoudre le problème immédiat et mettez à jour le modèle d'instance en définissant disks.autoDelete sur true si vous voulez supprimer les disques de démarrage persistants en même temps que l'instance.

  • Votre modèle d'instance n'est peut-être pas valide. Si vous l'avez récemment mis à jour, il est possible qu'une propriété non valide empêche le groupe géré de créer l'instance. Voici des exemples de propriétés non valides :

    • Vous avez spécifié une ressource qui n'existe pas, telle qu'une image source.
    • Vous avez mal orthographié le nom d'une ressource.
    • Vous avez essayé d'associer d'autres disques persistants non amorçables en mode lecture-écriture. Comme un groupe d'instances contient plusieurs instances, les disques supplémentaires que vous souhaitez partager avec les autres instances du groupe ne peuvent être associés qu'en mode lecture seule.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine