Exécuter des mises à niveau de l'image du système d'exploitation dans des MIG en un seul clic


Combiner des familles d'images personnalisées et des mises à jour progressives vous permet de mettre en place les mises à niveau de l'image du système d'exploitation en un seul clic sur votre groupe d'instances géré (MIG).

L'utilisation de la mise à niveau de l'image du système d'exploitation en un seul clic offre plusieurs avantages :

  • Ce système fonctionne avec tout type de machine de VM et toute taille de groupe d'instances.
  • Il est compatible avec les images et conteneurs Windows et Linux.
  • Les instances sont recréées à partir de leur modèle d'instance actuel ou, éventuellement, d'un nouveau modèle, de sorte que vous pouvez conserver les métadonnées et les scripts de démarrage personnalisés.
  • Ce fonctionnement est compatible avec les MIG avec état. Vous pouvez donc au besoin conserver des données sur des disques non amorçables.
  • Le déploiement d'une mise à jour de version du système d'exploitation se fait automatiquement, sans nécessiter de saisie supplémentaire de l'utilisateur après la requête initiale.
  • La mise à niveau en un seul clic permet également les mises à jour groupées avec une vérification d'état facultative.

Avant de commencer

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

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

Comment fonctionne la mise à niveau de l'image du système d'exploitation en un seul clic ?

Lorsque vous appelez une mise à jour, le MIG remplace les disques de démarrage de toutes les VM du groupe par la dernière version de l'image de l'OS disponible dans votre famille d'images personnalisées. Le MIG préserve les métadonnées et les scripts de démarrage que vous avez configurés dans le modèle d'instance pour chaque VM du groupe. Les disques non amorçables sont recréés suivant les spécifications fournies dans le modèle d'instance. Pour en savoir plus sur la conservation des données, consultez la page Configurer des disques avec état dans les groupes d'instances gérés (MIG).

Pour limiter les perturbations au niveau des applications, vous pouvez effectuer des mises à jour par lots, en gardant un certain pourcentage de VM en cours d'exécution pendant la mise à niveau. Pour améliorer la fiabilité, vous pouvez configurer une vérification d'état basée sur l'application pour votre MIG : le groupe attend une réponse de fonctionnement correct d'une application sur les VM mises à niveau avant de poursuivre la mise à jour des autres VM.

Avant de commencer

  • Installez la dernière version de Google Cloud CLI ou appliquez la mise à jour correspondante.

  • Assurez-vous d'avoir créé un modèle d'instance qui pointe vers une famille d'images. Google vous recommande d'utiliser des familles d'images personnalisées afin de limiter le risque de déployer une version d'image incompatible avec votre application. En n'ajoutant des images à votre famille d'images personnalisées qu'après avoir testé leur compatibilité avec votre application, vous pouvez vous assurer que seules des versions d'image compatibles sont déployées.

    Lorsque votre modèle d'instance pointe vers une famille d'images donnée, le MIG crée systématiquement les instances à partir de l'image la plus récente dans la famille, par exemple :

    • lorsque le MIG ajoute de nouvelles instances, si vous-même ou l'autoscaler du MIG avez augmenté sa taille ;
    • lorsque le MIG recrée une instance, que cette opération soit déclenchée manuellement ou par autoréparation.
  • Testez la nouvelle image avec votre application avant de l'ajouter à votre famille d'images et de la déployer.

  • Au besoin, vous pouvez créer une vérification d'état basée sur l'application pour votre MIG. Une vérification d'état basée sur l'application vérifie que votre application répond comme prévu sur chacune des VM du MIG. Vous pouvez configurer votre mise à jour de manière à autoriser l'indisponibilité d'au plus une seule VM à la fois. Si une application ne répond pas comme prévu, le MIG signale cette VM comme indisponible et votre déploiement est interrompu.

Exécuter des mises à niveau de l'image du système d'exploitation dans des MIG en un seul clic

Pour mettre à jour toutes les VM d'un MIG vers la dernière image d'une famille d'images personnalisées, procédez comme suit :

  1. Lancez un remplacement progressif à l'aide de la commande suivante.

    gcloud compute instance-groups managed rolling-action replace instance-group-name \
        [--max-surge=max-surge ] [--max-unavailable=max-unavailable]

    Remplacez l'élément suivant :

    • instance-group-name : nom du MIG à mettre à jour.
    • max-surge : nombre maximal de VM supplémentaires pouvant être créées de manière temporaire lors du processus de mise à jour. Il peut s'agir d'un nombre fixe (par exemple, 5) ou d'un pourcentage de la taille du MIG (par exemple, 10%).
    • max-unavailable : nombre maximal de VM pouvant être indisponibles durant le processus de mise à jour. Il peut s'agir d'un nombre fixe (5) ou d'un pourcentage de la taille du MIG (10%).

    Vous pouvez combiner les vérifications d'état en utilisant les options --max-unavailable et --max-surge pour interrompre la mise à jour si celle-ci entraîne l'indisponibilité des VM.

  2. Surveillez la mise à jour à l'aide de la sous-commande wait-until afin de vérifier que le champ status.versionTarget.isReached du MIG présente la valeur true.

    gcloud compute instance-groups managed wait-until instance-group-name --version-target-reached

    Remplacez l'élément suivant :

    • instance-group-name : nom du MIG à mettre à jour.

    La commande indique quand le groupe est mis à jour.

    Vous pouvez également répertorier les instances pour afficher leur état.

    gcloud compute instance-groups managed list-instances instance-group-name

    La commande renvoie une liste d'instances et les détails qui s'y rapportent, en particulier l'état, l'état de fonctionnement et les actions en cours pour chaque VM. Lorsque toutes les VM sont à l'état RUNNING (en cours d'exécution) et n'ont aucune action en cours, le MIG est à jour et stable.

  3. Si vous devez effectuer un rollback vers une image de système d'exploitation antérieure, vous devez créer un modèle d'instance et spécifier l'image que vous souhaitez utiliser. Ensuite, lancez une mise à jour progressive pour mettre à jour toutes les instances gérées afin qu'elles utilisent ce modèle. Pour en savoir plus, consultez la section Restaurer une mise à jour.

Exemple

Cet exemple couvre les tâches suivantes :

  1. Création d'un modèle d'instance pour faciliter la mise à jour des images du système d'exploitation :
    • Spécification d'une famille d'images personnalisées dans le modèle d'instance.
  2. Création d'un MIG basé sur le modèle.
  3. Configuration d'une vérification d'état afin de limiter les perturbations lors d'une mise à jour d'image.
  4. Ajout d'une image à une famille d'images.
  5. Appel d'une mise à jour du système d'exploitation en une seule commande.
  6. Surveillance de la mise à jour.

Procédez comme suit pour activer et réaliser la mise à niveau du système d'exploitation en un clic sur un MIG :

  1. Créez un modèle d'instance qui spécifie une famille d'images personnalisées. La famille d'images doit contenir des images testées et approuvées. Chaque VM créée par le MIG à partir du modèle utilise l'image la plus récente dans cette famille.

    gcloud compute instance-templates create example-template \
        --machine-type n1-standard-4 \
        --image-family my-image-family \
        --image-project my-project \
        --tags=http-server
    
  2. Créez un MIG basé sur le modèle d'instance. Cet exemple démarre le MIG avec trois instances basées sur le modèle example-template. Comme le modèle d'instance spécifie une famille d'images, le MIG crée chaque VM à partir de l'image la plus récente dans cette famille.

    gcloud compute instance-groups managed create example-group \
      --base-instance-name example \
      --size 3 \
      --zone us-east1-b \
      --template example-template
    
  3. Facultatif : configurez et activez une vérification d'état basée sur l'application. Si votre application ne répond pas après la mise à jour de l'image, vous pouvez utiliser l'état renvoyé par la vérification conjointement avec le paramètre maxUnavailable pour empêcher le MIG de poursuivre le déploiement.

    1. Créez une vérification d'état qui attend une réponse HTTP 200 sur le chemin de requête /health. L'application GitHub qui se trouve sur chaque instance diffuse ce chemin.

      gcloud compute health-checks create http example-autohealer-check \
          --check-interval 10 \
          --timeout 5 \
          --healthy-threshold 2 \
          --unhealthy-threshold 3 \
          --request-path "/health"
      
    2. Créez une règle de pare-feu afin d'autoriser les vérifications émises par les vérificateurs d'état à accéder aux instances. Ces vérifications proviennent d'adresses appartenant aux plages suivantes : 130.211.0.0/22 et 35.191.0.0/16.

      gcloud compute firewall-rules create default-allow-http-health-check \
          --network default \
          --allow tcp:80 \
          --source-ranges 130.211.0.0/22,35.191.0.0/16
      
    3. Ajoutez la vérification d'état à votre MIG.

      gcloud compute instance-groups managed update example-group \
          --zone us-east1-b --health-check example-autohealer-check
      
  4. Lorsqu'une mise à jour est disponible, testée et jugée compatible avec votre application, créez une image et utilisez l'option --family pour l'inclure dans la famille d'images personnalisées.

    gcloud compute images my-image-v2 \
        --source-disk boot-disk-1 \
        --source-disk-zone us-central1-f \
        --family my-image-family

    Dans cet exemple, l'image la plus récente dans la famille my-image-family est désormais my-image-v2, qui est basée sur le disque source boot-disk-1.

  5. Appelez un remplacement progressif afin de remplacer toutes les VM du MIG. Le MIG remplace toutes les VM basées sur le modèle d'instance du groupe. Le modèle d'instance spécifie la famille my-image-family, de sorte que chaque VM obtient l'image la plus récente dans cette famille (my-image-v2).

    Vous pouvez configurer le niveau de perturbation toléré pour la mise à jour. Dans cet exemple, le MIG crée une VM de plus que la taille cible du groupe et ne supprime aucune VM existante tant que cette VM n'est pas opérationnelle.

    gcloud compute instance-groups managed rolling-action replace example-group \
        --max-surge 1 --max-unavailable 0
    
  6. Si vous souhaitez surveiller l'état des mises à jour, utilisez la commande wait-until avec l'option --version-target-reached. La commande rend la main lorsque le groupe est mis à jour.

    gcloud compute instance-groups managed wait-until --version-target-reached example-group \
        --zone us-east1-
    Waiting for group to reach version target
    ...
    Version target is reached
    

    Vous pouvez également utiliser la commande list-instances pour afficher l'état, l'état de fonctionnement, les actions en cours, le modèle d'instance et la version correspondant à chaque VM.

    gcloud compute instance-groups managed list-instances example-group \
        --zone us-east1-b
    
    
    NAME       ZONE        STATUS   HEALTH_STATE  ACTION     INSTANCE_TEMPLATE  VERSION_NAME                        LAST_ERROR
    test-211p  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-30 13:34:28.843377+00:00
    test-t5qb  us-east1-b  RUNNING  UNKNOWN       VERIFYING  example-template   0/2020-01-30 13:34:28.843377+00:00
    test-x331  us-east1-b  RUNNING  HEALTHY       NONE       example-template   0/2020-01-20 20:39:51.819399+00:00
    
  7. Si vous devez effectuer un rollback vers une image précédente, procédez comme suit :

    1. Créez un modèle d'instance spécifiant l'image souhaitée.
    2. Lancez une mise à jour progressive afin d'appliquer le modèle d'instance.

Étape suivante