Créer et gérer des MIG régionaux

Ce document décrit les procédures spécifiques à la création et à la gestion de groupes d'instances gérés (MIG) régionaux. Pour obtenir des informations générales sur la création de MIG, consultez la page Créer des groupes d'instances gérés.

Un MIG régional répartit vos instances sur plusieurs zones d'une région, ce qui augmente la résilience de vos charges de travail basées sur les MIG. L'utilisation de plusieurs zones vous protège des cas extrêmes où toutes les instances d'une même zone échouent.

Pour plus d'informations sur les MIG régionaux, y compris sur la raison de leur choix, leurs options de configuration supplémentaires et les différences avec les MIG zonaux, consultez la présentation sur les MIG régionaux.

Avant de commencer

Limites

  • Avec un MIG régional, vous pouvez créer jusqu'à 2 000 VM dans une région, avec un maximum de 1 000 VM par zone. Avec un MIG zonal, vous pouvez créer jusqu'à 1 000 VM. Si vous en avez besoin d'un plus grand nombre, contactez l'assistance.
  • Lors de la mise à jour d'un MIG, vous pouvez spécifier jusqu'à 1 000 VM dans une même requête.
  • Si vous souhaitez un MIG avec état, vérifiez les limites des MIG avec état.

  • Si vous souhaitez utiliser l'équilibrage de charge avec un groupe d'instances géré régional, les limites suivantes s'appliquent :

    • Vous ne pouvez pas utiliser le mode d'équilibrage maxRate.
    • Si vous utilisez un schéma d'équilibrage de charge HTTP(S) avec un MIG régional, vous devez choisir le mode d'équilibrage maxRatePerInstance ou maxUtilization.
  • Si vous souhaitez effectuer l'autoscaling d'un MIG régional, les limites suivantes s'appliquent :

    • Pour effectuer un scaling vertical et horizontal, vous devez activer la redistribution proactive des instances. Si vous définissez le mode de l'autoscaler pour qu'il n'effectue que le scaling horizontal, vous n'avez pas besoin d'activer la distribution proactive des instances.
    • Si vous souhaitez procéder à l'autoscaling d'un MIG régional basé sur les métriques Cloud Monitoring, les limites suivantes s'appliquent :

      • Vous ne pouvez pas utiliser de métriques par groupe.
      • Vous ne pouvez pas appliquer de filtres aux métriques par instance.

Créer un MIG régional

Utilisez Cloud Console, l'outil gcloud ou l'API Compute Engine.

Si la capacité de chaque zone est insuffisante pour prendre en charge les VM du groupe, Compute Engine crée autant de VM que possible, puis tente de créer les VM restantes lorsqu'une capacité supplémentaire devient disponible.

Puisque vous créez un MIG régional, gardez à l'esprit que certaines ressources, comme les disques persistants, sont zonales. Si vous spécifiez dans votre modèle d'instance des ressources zonales telles que des disques persistants supplémentaires, ces disques doivent être présents dans toutes les zones pour pouvoir être associés aux VM créées par ce MIG régional.

Par défaut, si vous ne spécifiez pas explicitement des zones individuelles dans votre requête, Compute Engine choisit automatiquement trois zones dans lesquelles créer des VM. Si vous devez créer des VM dans un nombre de zones différent de trois, ou si vous souhaitez sélectionner les zones utilisées, vous pouvez fournir une liste des zones dans votre requête. Pour en savoir plus, consultez la section Sélection de zones.

La redistribution proactive des instances est activée par défaut. Si vous devez gérer manuellement le nombre de VM dans chaque zone, vous pouvez désactiver la redistribution proactive des instances, mais vous ne pourrez pas configurer l'autoscaling.

Console

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

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

  2. Cliquez sur Créer un groupe d'instances pour définir un nouveau groupe d'instances.
  3. Sous Emplacement, sélectionnez Plusieurs zones.
  4. Choisissez la région souhaitée.
  5. Si vous souhaitez choisir des zones spécifiques, cliquez sur Configurer des zones pour sélectionner les zones à utiliser.
  6. Si vous souhaitez désactiver la redistribution proactive des instances
    1. Assurez-vous que le mode d'autoscaling est Désactivé.
    2. Définissez la redistribution des instances sur Désactivé.
  7. Choisissez un modèle d'instance pour le groupe d'instances ou créez-en un.
  8. Indiquez le nombre de VM pour ce groupe. Pensez à provisionner suffisamment de VM pour prendre en charge votre application en cas de défaillance d'une zone.
  9. Terminez le processus de création de MIG.

gcloud

Tous les MIG requièrent un modèle d'instance. Commencez par créer un modèle d'instance si vous n'en avez pas. Par exemple, la commande suivante crée un modèle d'instance de base doté des propriétés par défaut :

gcloud compute instance-templates create example-template

Exécutez ensuite la commande instance-groups managed create avec l'option --region. Par exemple, la commande suivante crée un groupe d'instances géré régional dans trois zones de la région us-east1 :

gcloud compute instance-groups managed create example-rmig \
    --template example-template  \
    --size 30 \
    --region us-east1

Si vous souhaitez sélectionner des zones spécifiques que le groupe doit utiliser, ajoutez l'option --zones :

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c

Si vous souhaitez désactiver la redistribution proactive des instances, définissez l'option --instance-redistribution-type sur NONE. Vous ne pouvez pas désactiver la redistribution proactive des instances si l'autoscaling est activé.

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --instance-redistribution-type NONE \
    --region us-east1

API

Tous les MIG requièrent un modèle d'instance. Commencez par créer un modèle d'instance si vous n'en avez pas.

Ensuite, envoyez une requête POST à la méthode regionInstanceGroupManagers.insert. Dans le corps de la requête, spécifiez le nom du groupe, sa taille et l'URL du modèle d'instance. Vous pouvez éventuellement spécifier d'autres champs, tels que le nom de base pour les instances du groupe.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE"
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet pour cette requête.
  • REGION : région du groupe.
  • BASE_INSTANCE_NAME : nom d'instance pour chaque instance de VM créée au sein du groupe. Par exemple, le nom d'instance de base example-instance permettrait la création d'instances portant des noms du type example-instance-[RANDOM_STRING], où [RANDOM_STRING] est une chaîne aléatoire générée par le serveur.
  • INSTANCE_TEMPLATE_NAME : modèle d'instance à utiliser.
  • INSTANCE_GROUP_NAME : nom du MIG.
  • TARGET_SIZE : nombre cible de VM pour le groupe.

Si vous souhaitez sélectionner des zones spécifiques, ou si vous créez des VM dans une région comportant un nombre de zones différent de trois, incluez la propriété distributionPolicy dans votre requête et fournissez la liste des zones. Remplacez ZONE par le nom d'une zone dans laquelle créer des VM.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/ZONE"},
       {"zone": "zones/ZONE"}
      ]
   }
}

Par exemple, la requête qui suit permet de créer un MIG régional nommé example-rmig et comportant 10 instances gérées réparties sur les zones us-east1-b et us-east1-c :

POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers

{
  "instanceTemplate": "global/instanceTemplates/example-instance",
  "name": "example-rmig",
  "targetSize": 10,
  "distributionPolicy": {
      "zones": [
        {"zone": "zones/us-east1-b"},
        {"zone": "zones/us-east1-c"}
      ]
   }
}

Utiliser des instances gérées dans un MIG régional

Si vous devez agir sur des instances gérées spécifiques dans un MIG, par exemple pour créer ou supprimer des instances portant des noms spécifiques, le processus est le même pour les MIG régionaux et zonaux. Consultez la page Utiliser des instances gérées.

Obtenir des informations sur les MIG régionaux et les instances gérées

Si vous souhaitez obtenir des informations sur votre MIG, par exemple pour afficher sa configuration ou inspecter son état, ou encore sur les instances gérées d'un MIG, la procédure est la même pour les MIG régionaux et zonaux. Pour en savoir plus, consultez la page Obtenir des informations sur les MIG et les instances gérées.

Mettre à jour un groupe d'instances géré régional

Vous pouvez appliquer un nouveau modèle d'instance à un groupe d'instances géré régional à l'aide de la fonctionnalité de mise à jour. Pour plus d'informations, consultez la page Mettre à jour un MIG régional.

Si vous souhaitez ajouter ou supprimer des instances dans un MIG, consultez la page Utiliser des instances gérées.

Si vous souhaitez utiliser ou mettre à jour des fonctionnalités de MIG, consultez la documentation sur l'autoréparation, l'équilibrage de charge, l'autoscaling, la mise à jour automatique et les charges de travail avec état.

Désactiver et réactiver la redistribution proactive des instances

La redistribution proactive des instances conserve un nombre de VM équitable dans les zones sélectionnées de la région. Cette configuration maximise la disponibilité de votre application en cas de défaillance de la zone.

La redistribution proactive des instances est activée par défaut pour les MIG régionaux, mais vous pouvez la désactiver pour les MIG sans autoscaling. Lorsque la redistribution proactive des instances est désactivée, le groupe ne tente pas de redistribuer les VM de manière proactive entre les zones. Ceci est utile si vous devez :

  • supprimer manuellement ou abandonner des instances gérées du groupe sans affecter les autres VM en cours d'exécution ;
  • supprimer automatiquement une VM de nœud de calcul par lot à la fin de l'exécution de la tâche sans affecter les autres nœuds de calcul ;
  • protéger les VM d'une suppression automatique inattendue due à la redistribution proactive en utilisant des applications avec état.

Utilisez Cloud Console, l'outil gcloud ou l'API Compute Engine pour créer un MIG régional avec désactivation de la redistribution proactive des instances, ou pour activer ou désactiver la redistribution proactive des instances pour un groupe existant.

Créer un groupe avec la redistribution proactive des instances désactivée

Console

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

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

  2. Cliquez sur Créer un groupe d'instances pour définir un nouveau groupe d'instances.
  3. Sous Emplacement, sélectionnez Plusieurs zones.
  4. Choisissez la région souhaitée.
  5. Si vous souhaitez choisir des zones spécifiques, cliquez sur Configurer des zones pour sélectionner les zones à utiliser.
  6. Pour désactiver la redistribution proactive des instances :
    1. Assurez-vous que le mode d'autoscaling est Désactivé.
    2. Définissez la redistribution des instances sur Désactivé.
  7. Choisissez un modèle d'instance pour le groupe ou créez-en un.
  8. Indiquez le nombre de VM pour ce groupe. Pensez à provisionner suffisamment de VM pour prendre en charge votre application en cas de défaillance d'une zone.
  9. Terminez le processus de création de MIG.

gcloud

Pour créer un MIG régional sans redistribution proactive des instances, utilisez la commande gcloud compute instance-groups managed create avec l'option --instance-redistribution-type définie sur NONE.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

Remplacez les éléments suivants :

  • INSTANCE_GROUP_NAME : nom du MIG
  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance à utiliser pour le groupe
  • TARGET_SIZE : taille cible du groupe
  • ZONES : liste des zones d'une région unique dans laquelle vous devez déployer des VM

Exemple :

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

Pour créer un MIG régional sans autoscaling ni redistribution proactive des instances, envoyez une requête POST à la méthode regionInstanceGroupManagers.insert. Dans le corps de la requête, incluez la propriété updatePolicy et définissez son champ instanceRedistributionType sur NONE.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": "TARGET_SIZE",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet pour cette requête
  • REGION : région du groupe d'instances
  • INSTANCE_GROUP_NAME : nom du MIG
  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance à utiliser pour le groupe
  • TARGET_SIZE : taille cible du groupe d'instances
  • ZONE : nom d'une zone de la région où vous devez déployer des VM

Désactiver la redistribution proactive des instances

Avant de pouvoir désactiver la redistribution proactive des instances, vous devez définir le mode de l'autoscaler de sorte à désactiver l'autoscaling ou à le limiter uniquement au scaling horizontal.

Console

  1. Dans Cloud Console, accédez à la page Groupes d'instances.

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

  2. Sélectionnez le MIG à mettre à jour, puis cliquez sur Modifier le groupe.
  3. Si l'autoscaling a été configuré, assurez-vous que le mode d'autoscaling est défini sur Ne pas procéder à un autoscaling.
  4. Désactivez la redistribution automatique en définissant le paramètre Redistribution des instances sur Désactivé.
  5. Cliquez sur Enregistrer.

gcloud

Si vous souhaitez désactiver la redistribution proactive des instances pour un MIG régional sans autoscaling, exécutez la commande compute instance-groups managed update avec l'option --instance-redistribution-type définie sur NONE.

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

Remplacez les éléments suivants :

  • INSTANCE_GROUP_NAME : nom du MIG
  • REGION : région du groupe d'instances

API

Pour désactiver la redistribution proactive des instances pour un MIG régional sans autoscaling, envoyez une requête PATCH à la méthode regionInstanceGroupManagers.patch. Dans le corps de la requête, incluez la propriété updatePolicy et définissez son champ instanceRedistributionType sur NONE.

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/[INSTANCE_GROUP_NAME

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet pour cette requête
  • REGION : région du groupe d'instances
  • INSTANCE_GROUP_NAME : nom d'un MIG sans autoscaling

Activer la distribution proactive des instances

Pour activer la distribution proactive des instances, exécutez une commande semblable à celle utilisée pour désactiver la redistribution proactive des instances, mais définissez le type de redistribution des instances sur PROACTIVE.

Si vous avez supprimé ou abandonné manuellement certaines instances gérées, entraînant une répartition inégale des VM au sein de la région, vous devez rééquilibrer manuellement le groupe avant de pouvoir réactiver la redistribution proactive des instances. Il ne doit pas y avoir plus d'une VM de différence entre deux zones.

Un MIG régional n'autorise pas l'activation de la redistribution proactive des instances tant que les VM ne sont pas réparties de manière homogène entre les zones (c'est-à-dire tant qu'il existe une différence d'au moins deux VM entre deux zones). Cela permet d'éviter une suppression automatique involontaire des VM dans les zones contenant davantage de VM, ce qui serait l'option utilisée pour obtenir une répartition régulière.

Rééquilibrage manuel d'un MIG régional

Un MIG n'est pas équilibré si la différence du nombre de VM entre deux zones est de deux VM ou plus. Un MIG peut ne plus équilibrer si vous désactivez la redistribution proactive des instances, puis que vous supprimez ou abandonnez des instances pour provoquer une distribution inégale entre les zones.

Vous pouvez procéder manuellement à une distribution égale des instances entre les zones en supprimant les VM des zones comportant le plus d'instances, ou en redimensionnant pour ajouter des instances dans les zones comportant moins de VM jusqu'à ce que la distribution soit uniforme.

Lorsque vous redimensionnez un MIG pour lequel la redistribution proactive des instances est désactivée, le groupe continue de converger de manière opportuniste vers l'équilibre, en traitant chaque opération de redimensionnement comme une opportunité d'équilibrer le groupe :

  • Lorsque le groupe augmente, il tente toujours d'ajouter des VM aux zones comportant le plus petit nombre de VM.
  • Lorsque le groupe diminue, il supprime toujours les VM des zones comportant le plus grand nombre de VM.
Exemple de redimensionnement manuel d'un groupe pour obtenir une redistribution uniforme

Simuler une défaillance de zone pour un MIG régional

Pour vérifier que votre MIG régional est suffisamment surprovisionné pour survivre à une défaillance de zone, vous pouvez utiliser l'exemple suivant qui simule une défaillance zonale.

Ce script arrête et démarre Apache dans le cadre de son scénario par défaut. Si cela ne convient pas pour votre application, remplacez les commandes d'arrêt et de démarrage d'Apache par votre propre scénario de défaillance et de récupération.

  1. Déployez ce script et exécutez-le en continu sur chaque VM du groupe. Pour ce faire, vous pouvez ajouter le script au modèle d'instance, ou l'inclure dans une image personnalisée et utiliser cette image dans le modèle d'instance.

    #!/usr/bin/env bash
    
    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    set -o nounset
    set -o errexit
    set -o pipefail
    
    function GetMetadata() {
      curl -s "$1" -H "Metadata-Flavor: Google"
    }
    
    PROJECT_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/project/attributes"
    INSTANCE_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/instance"
    ZONE=$(GetMetadata "$INSTANCE_METADATA_URL/zone" | cut -d '/' -f 4)
    INSTANCE_NAME=$(hostname)
    
    # We keep track of the state to make sure failure and recovery is triggered only once.
    STATE="healthy"
    while true; do
      if [[ "$ZONE" = "$(GetMetadata $PROJECT_METADATA_URL/failed_zone)" ]] && \
         [[ "$INSTANCE_NAME" = *"$(GetMetadata $PROJECT_METADATA_URL/failed_instance_names)"* ]]; then
        if [[ "$STATE" = "healthy" ]]; then
          STATE="failure"
          # Do something to simulate failure here.
          echo "STARTING A FAILURE"
          /etc/init.d/apache2 stop
        fi
      else
        if [[ "$STATE" = "failure" ]] ; then
          STATE="healthy"
          # Do something to recover here.
          echo "RECOVERING FROM FAILURE"
          /etc/init.d/apache2 start
        fi
      fi
      sleep 5
    done
    
    
  2. Simulez une défaillance de zone en définissant ces deux champs de métadonnées de projet :

    • failed_zone : définit la zone dans laquelle vous souhaitez simuler la panne (limite la défaillance à une seule zone).
    • failed_instance_names : choisissez les VM à déconnecter d'après leur nom (afin de limiter la défaillance aux seules VM dont le nom contient cette chaîne).

    Vous pouvez définir ces métadonnées à l'aide de l'outil gcloud. Par exemple, la commande suivante définit une défaillance sur la zone europe-west1-b et affectant les VM dont le nom commence par base-instance-name :

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. Après avoir simulé la panne, lancez la récupération en supprimant les clés de métadonnées :

    gcloud compute project-info remove-metadata --keys failed_zone,failed_instance_names

Voici quelques exemples des scénarios de défaillance que vous pouvez exécuter à l'aide de ce script :

  • Arrêtez complètement votre application pour voir comment le MIG réagit.
  • Faites en sorte que vos VM renvoient un état "non opérationnel" lors des vérifications de l'état effectuées par l'équilibreur de charge.
  • Reconfigurez iptables de manière à bloquer une partie du trafic à destination ou en provenance de la VM.
  • Arrêtez les VM. Par défaut, celles-ci sont recréées peu de temps après par le MIG régional, mais leur nouvelle incarnation s'arrêtera dès l'exécution du script et aussi longtemps que les valeurs de métadonnées resteront définies. Vous obtenez ainsi une boucle de plantage.

Étapes suivantes