Migrer une charge de travail existante vers un groupe d'instances géré avec état


Si vous disposez déjà d'une application avec état sur des instances de machine virtuelle (VM) Compute Engine autonomes (non gérées), vous pouvez migrer cette application vers un groupe d'instances géré avec état (MIG)

En configurant un MIG avec état et en utilisant des instances gérées, vous pouvez obtenir les avantages suivants:

  • État préservé: conservation des noms d'instance, des disques et des métadonnées même si une instance est recréée.
  • Autoréparation: recréation automatique de VM ayant des charges de travail en échec dans la même zone.
  • Mises à jour automatisées : déploiements progressifs des nouvelles configurations d'instances ou versions de logiciels sur les VM d'un MIG.

Limites

  • Vous devez arrêter vos VM existantes pour migrer leurs disques existants ou, éventuellement, pour prendre des instantanés cohérents destinés à être utilisés par les nouvelles instances gérées.
  • Vous devez supprimer les VM existantes si vous souhaitez réutiliser leur nom.
  • Votre application doit pouvoir s'exécuter sur des VM avec le même type de machine. Si votre application existante nécessite plusieurs instances de différents types de machines, créez plusieurs modèles d'instances et groupes d'instances gérés, un par type de machine.
  • Votre application doit démarrer au démarrage de la VM. Vous pouvez utiliser une image personnalisée ou un script de démarrage. Chaque option est décrite ci-dessous.
  • Vous ne pouvez pas mettre à jour le système d'exploitation ou le logiciel en déployant des mises à jour de l'image de démarrage dans un MIG si vous choisissez de créer des disques de démarrage avec état.
  • Vous ne pouvez obtenir la haute disponibilité multizone qu'en créant des instances dupliquées redondantes dans plusieurs zones et en configurant la réplication des données au niveau de l'application. Un MIG avec état procède à l'autoréparation des instances de la même zone uniquement et n'orchestre pas le basculement interzone.
  • Vous ne pouvez pas utiliser l'autoscaling avec un MIG avec état.
  • Consultez les limites des MIG avec état.

Coûts

Ce tutoriel fait appel à des composants facturables de Google Cloud, dont :

  • Compute Engine

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Avant de commencer

Ce guide utilise gcloud CLI. Vous pouvez accéder à cet outil à l'aide de Cloud Shell. Si vous préférez exécuter gcloud CLI sur votre ordinateur local, téléchargez et installez la dernière version de gcloud CLI.

Présentation de la migration

  1. Comprendre les composants d'un MIG avec état.
  2. Examinez votre configuration existante pour déterminer les spécifications de VM courantes.
  3. Vous pouvez également créer une image personnalisée qui servira d'image de disque de démarrage commune.
  4. Créez un modèle d'instance pour spécifier la configuration de VM commune du MIG.
  5. Créez un MIG vide.
  6. Convertir vos VM existantes en instances gérées dans le MIG, y compris les configurations par instance.
  7. Configurez l'autoréparation pour le MIG afin d'améliorer la résilience de votre application.
  8. Pour réduire le temps de configuration, vous pouvez remplacer les configurations par instance par une règle avec état.

Composants

Vous configurez les instances gérées de votre groupe d'instances géré avec état via plusieurs composants:

  • Un modèle d'instance contient une configuration commune pour les VM du MIG, y compris le type de machine, l'image de disque de démarrage, les spécifications facultatives pour les disques supplémentaires et un script de démarrage facultatif
  • Une image personnalisée facultative contient votre application et sert d'image de disque de démarrage commune.
  • Une configuration par instance contient des éléments avec état spécifiques à une instance. Par exemple, vous pouvez associer un disque existant à une instance spécifique du groupe. Ce disque peut être dissocié d'une instance autonome existante, récupéré à partir d'un instantané ou d'un disque régional. Il n'est pas nécessaire de définir le nom de l'appareil du disque dans le modèle d'instance.
  • Une règle avec état facultative contient des éléments avec état courants. Par exemple, elle définit tous les disques avec un nom d'appareil spécifique (tel que défini dans le modèle d'instance) comme étant avec état pour toutes les instances du groupe.

Quels composants devez-vous utiliser ?

Les composants à utiliser dépendent de votre configuration existante. Le tableau suivant récapitule les principales configurations possibles pour une application qui s'exécute sur une ou plusieurs instances. Dans la suite de ce tutoriel, vous examinerez votre configuration existante pour déterminer laquelle de ces configurations vous devez utiliser.

Disposez-vous de configurations ou de données avec état sur vos disques de démarrage que vous devez gérer ? Comment votre application démarre-t-elle ?
L'application est configurée sur un disque de démarrage existant L'application est configurée avec un script de démarrage
Non: les disques de démarrage sont sans état
  1. Utiliser un modèle d'instance avec une image personnalisée
  2. Ajouter des configurations par instance (ou une règle avec état) pour les disques de données avec état
  1. Utiliser un modèle d'instance avec un script de démarrage
  2. Ajouter des configurations par instance (ou une règle avec état) pour les disques de données avec état
Oui: au moins un disque de démarrage est avec état.
  1. Utiliser un modèle d'instance avec une image personnalisée
  2. Ajouter des configurations par instance (ou une règle avec état) pour les disques de démarrage et de données avec état
  1. Utiliser un modèle d'instance avec un script de démarrage
  2. Ajouter des configurations par instance (ou une règle avec état) pour les disques de démarrage et de données avec état

Vérifiez votre configuration

Examinez vos instances autonomes existantes pour inspecter le type de machine, les disques et les métadonnées de chaque instance.

Exécutez la commande instances describe pour chacune de vos instances.

gcloud compute instances describe INSTANCE_NAME

Répondez aux questions suivantes pour préparer les étapes suivantes de ce guide.

Questions Conséquences :
Propriétés de VM
Quel type de machine souhaitez-vous utiliser pour votre groupe ? Spécifiez ce type de machine dans le modèle d'instance de votre MIG.
Comment votre application démarre-t-elle: est-elle préconfigurée sur un disque de démarrage ou installée, configurée et lancée par un script de démarrage ? Si votre application est préconfigurée sur un disque de démarrage, créez une image personnalisée, puis spécifiez cette image dans le modèle d'instance de votre MIG.

Si votre application est lancée par un script de démarrage, spécifiez ce script de démarrage dans le modèle d'instance de votre MIG.

Si votre application nécessite à la fois une image de disque de démarrage personnalisée et un script de démarrage, spécifiez les deux dans le modèle d'instance.
Voulez-vous conserver les noms d'instances existants ? Vous devez supprimer les instances autonomes existantes pour libérer les noms d'instance.

Si vos disques de démarrage restent sans état et si vous souhaitez utiliser des mises à jour progressives automatiques dans votre MIG, consultez la documentation deConservation des noms d'instance.
Éléments avec état
Pour chaque instance, faut-il conserver des métadonnées spécifiques ? Spécifiez les métadonnées spécifiques à l'instance à l'aide de configurations par instance.
Vos disques de démarrage sont-ils avec état ? En d'autres termes, existe-t-il des données résidant sur un disque de démarrage dont vous devez conserver l'état ? Si vous devez conserver l'état de vos disques de démarrage, vous ne pouvez pas mettre à jour le système d'exploitation ni les logiciels en déployant des mises à jour de l'image de disque de démarrage.
Toutes les instances disposent-elles des mêmes types de disques ? Par exemple, ont-elles toutes un disque de données ? Ou bien existe-t-il des configurations uniques pour les disques ? Si toutes les instances ont une configuration de disque commune, définissez ces noms d'appareils courants dans votre modèle d'instance (par exemple, "données-disque"). Cela vous permet d'utiliser une règle avec état pour déclarer ces disques avec état dans votre MIG, avec moins de surcharge que les configurations par instance.
Si vous deviez développer le groupe, la taille des disques actuels est-elle suffisante ? Spécifiez les tailles de disque dont vous avez besoin dans votre modèle d'instance. Les nouvelles instances récupèrent les disques que vous spécifiez, à condition que ces disques ne soient pas redéfinis dans une règle avec état ou des configurations par instance.

Ce guide commence par la création de configurations par instance pour les disques avec état existants. Toutefois, vous pouvez convertir ces configurations en règles avec état ultérieurement, à condition que les disques aient un nom d'appareil commun que vous déclarez dans le modèle d'instance du groupe.

Exemples de configuration

Ce guide utilise l'exemple de base suivant pour illustrer les étapes de la migration. Supposons qu'une application avec état s'exécute sur trois VM Compute Engine autonomes. Prenons les spécifications suivantes pour la VM:

  • Chaque VM possède le même type de machine.
  • Chaque VM existe dans le même projet et la même zone.
  • Le disque de démarrage de chaque VM possède la même application, qui est configurée sur le disque de démarrage pour démarrer au démarrage de la VM.
  • Le disque de démarrage de chaque VM ne contient aucune autre donnée ou configuration que vous devez conserver.
  • Chaque VM possède un disque persistant secondaire avec des données avec état, c'est-à-dire des données pour lesquelles vous devez conserver l'état actuel.

Modifiez les valeurs ci-dessous pour les utiliser tout au long de ce tutoriel.

- Machine type: n2-standard-2
- Project: my-project
- Zone: europe-west1-c
- Name of one of the VMs to migrate: my-instance-1

Créer une image personnalisée

Si votre application ou l'une de ses exigences est déjà configurée sur un disque de démarrage existant, créez une image personnalisée que vous pouvez réutiliser. Si votre application est installée, configurée et lancée uniquement à l'aide d'un script de démarrage, vous pouvez également ignorer cette étape et passer à la section Créer un modèle d'instance.

Dans le scénario d'exemple décrit précédemment, le disque de démarrage de chaque VM autonome existante contient l'application configurée. Vous pouvez donc suivre les étapes permettant de créer une image personnalisée basée sur l'une de ces VM.

  1. Arrêtez l'une des instances.

    gcloud compute instances stop my-instance-1
  2. Déterminez la source du disque en décrivant l'instance.

    gcloud compute instances describe my-instance-1

    Le résultat ressemble à ce qui suit :

    ...
    disks:
    – autoDelete: true
      boot: true
      ...
      source: https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
      ...
    

    Recherchez le champ source dans le résultat et notez l'URL complète du disque de démarrage dans ce champ.

  3. Exécutez la commande images create pour préparer une image personnalisée utilisant la même source.

    gcloud compute images create my-boot-image \
        --source-disk=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1
    

    Le résultat ressemble à ce qui suit :

    Created [https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image].
    

Créer un modèle d'instance

Un modèle d'instance est une ressource Compute Engine immuable qui stocke la configuration de la VM. Une fois que vous avez créé un modèle, vous ne pouvez plus le mettre à jour. Si vous devez le modifier ultérieurement, créez un nouveau modèle, puis déployez-le dans le groupe.

Suivez les étapes de la section Créer un modèle d'instance en utilisant les paramètres suivants.

  • Type de machine: spécifiez un type de machine qui fonctionne sur toutes vos instances existantes.

  • Script de démarrage: si vous lancez votre application à l'aide d'un script de démarrage, spécifiez ce script.

  • Boot Disk (Disque de démarrage)

    • Image : spécifiez une image de disque de démarrage commune à toutes les VM du MIG. Par exemple, si vous avez créé une image personnalisée basée sur le disque de démarrage d'une VM existante, spécifiez-la. Si vous devez utiliser un disque de démarrage existant pour une VM spécifique, vous pouvez explicitement spécifier ce disque avec une configuration par instance, lorsque vous convertissez cette VM en instance gérée. comme expliqué plus loin dans ce document.
    • Nom de l'appareil: spécifiez un nom d'appareil qui reflète l'objectif du disque (par exemple, boot-disk). Cela vous permet de configurer une seule règle avec état pour conserver tous les disques du MIG portant ce nom d'appareil.
    • Taille: spécifiez une taille de disque de démarrage suffisante pour les instances existantes et futures, si vous souhaitez en ajouter.
  • Disques supplémentaires: par défaut, lorsque vous ajoutez des instances au MIG, celui-ci crée des disques basés sur le modèle. Notez qu'un modèle d'instance ne permet pas de configurer des disques régionaux, mais vous pourrez configurer les disques régionaux ultérieurement à l'aide des configurations par instance.

    • Nom de l'appareil: pour chaque disque, spécifiez un nom d'appareil qui reflète l'objectif du disque, par exemple data-disk.
    • Taille: spécifiez une taille de disque suffisante pour les instances futures, au cas où vous en ajouteriez.

Pour les besoins de cette migration, la spécification la plus importante pour chaque disque supplémentaire est le nom de l'appareil, que vous utiliserez en tant que clé pour spécifier les disques avec état. Le fait de définir un nom d'appareil commun pour les disques similaires vous permet d'utiliser une règle avec état commune pour conserver tous ces disques dans le MIG. La spécification de la taille ou de l'image des disques supplémentaires du modèle d'instance ne sera utilisée que pour créer des disques pour les instances que vous pourrez créer en plus de celles que vous migrez. Lors de la migration d'instances existantes, vous conserverez les disques de données existants en les dissociant des instances d'origine, puis en les réassociant aux nouvelles instances gérées, comme expliqué plus loin dans ce document.

La commande instance-templates create suivante crée un modèle pour l'exemple de scénario. La commande inclut une option --image qui pointe vers l'image de démarrage personnalisée créée précédemment, ainsi qu'un disque de données supplémentaire.

gcloud compute instance-templates create my-instance-template \
 --machine-type=n2-standard-2 \
 --image=https://www.googleapis.com/compute/v1/projects/my-project/global/images/my-boot-image \
 --boot-disk-device-name=boot-disk \
 --create-disk=mode=rw,size=100,type=pd-standard,device-name=data-disk

Le résultat ressemble à ce qui suit :

Created [https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template].
NAME                     MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
my-instance-template  n2-standard-2               2021-04-27T11:02:07.552-07:00

Notez l'URL du modèle, que vous pouvez trouver sur la première ligne du résultat.

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

L'étape suivante consiste à créer un groupe d'instances géré (MIG). Pour créer un MIG à zone unique, suivez les instructions de la section Créer un MIG dans une seule zone. Si vous souhaitez vous protéger contre les défaillances de zone à l'aide d'un MIG régional, suivez les instructions de la section Créer un MIG avec des VM dans plusieurs zones d'une région.

Lorsque vous créez un MIG, incluez les spécifications suivantes:

  • Définissez la taille du groupe sur 0. Vous ajouterez des instances ultérieurement.
  • Si vous créez un MIG régional, définissez le type de redistribution des instances sur NONE afin que le MIG ne redistribue pas automatiquement les instances entre les zones.

La commande instance-groups managed create suivante crée un MIG zonal pour l'exemple de configuration décrit précédemment. Pour créer un MIG régional, remplacez --zone=ZONE par --region=REGION.

gcloud compute instance-groups managed create my-mig \
    --size=0 \
    --template=https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/my-instance-template \
    --zone=europe-west1-c

Le résultat ressemble à ce qui suit :

Created [https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/instanceGroupManagers/my-mig].
NAME    LOCATION        SCOPE  BASE_INSTANCE_NAME  SIZE  TARGET_SIZE  INSTANCE_TEMPLATE         AUTOSCALED
my-mig  europe-west1-c  zone   my-mig              0     0            my-instance-template      no

Après avoir créé cette ressource, vous pouvez l'utiliser pour interagir avec le MIG, par exemple pour définir des règles au niveau du groupe, et pour ajouter ou supprimer des instances du groupe.

Convertir des VM existantes en instances gérées

Pour chacune de vos VM non gérées existantes, suivez la procédure suivante pour la transformer en instance gérée dans votre MIG. Cette procédure migre les disques existants vers les nouvelles instances gérées. Vous pouvez également créer des instantanés de disques existants, puis créer des disques à partir de ces instantanés pour les instances gérées.

  1. Décrivez la VM existante.

    gcloud compute instances describe my-instance-1
    

    Notez les éléments que vous souhaitez conserver depuis la VM existante, qui peuvent inclure les éléments suivants:

    • Nom de l'instance
    • Disque de démarrage
    • Disques secondaires
    • Métadonnées de l'instance
  2. Arrêtez la VM existante.

    gcloud compute instances stop my-instance-1
    
  3. Dissociez tous les disques avec état, y compris le disque de démarrage, si vous prévoyez de les réutiliser.

    gcloud compute instances detach-disk my-instance-1 --disk=my-data-disk-1
    
  4. Supprimez la VM existante afin de pouvoir en créer une autre du même nom. Si vous ne souhaitez pas conserver les noms d'instances, vous pouvez supprimer la VM existante ultérieurement pour ne plus payer.

    gcloud compute instances delete my-instance-1
    
  5. Suivez la procédure permettant de créer une instance gérée.

    • Vous pouvez réutiliser le nom de l'instance d'origine si vous avez supprimé l'instance d'origine. ou indiquez un nouveau nom.
    • Spécifiez les métadonnées ou les disques avec état requis par cette instance gérée. Le MIG stocke les éléments spécifiques à l'instance dans une configuration par instance:

      • Spécifiez un ou plusieurs disques, tels que les disques dissociés de l'instance de VM d'origine.

      • Spécifiez les métadonnées de l'instance de VM d'origine.

    Par exemple, la commande suivante crée une instance gérée portant le même nom que la VM d'origine et réutilise le disque de données d'origine. Le disque de démarrage de la VM est créé à partir de l'image spécifiée dans le modèle d'instance du groupe.

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1    \
        --stateful-metadata=role=primary      \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --zone=europe-west1-c
    

    Si vous devez réutiliser un disque de démarrage à partir d'une ancienne VM, utilisez la même commande avec une option --stateful-disk supplémentaire. Utilisez le même nom d'appareil pour le disque de démarrage que celui spécifié dans le modèle d'instance. Exemple:

    gcloud compute instance-groups managed create-instance my-mig \
        --instance=my-instance-1 \
        --stateful-metadata=role=secondary    \
        --stateful-disk=device-name=data-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-data-disk-1 \
        --stateful-disk=device-name=boot-disk,source=https://www.googleapis.com/compute/v1/projects/my-project/zones/europe-west1-c/disks/my-instance-1-boot-disk \
        --zone=europe-west1-c
    
  6. Répétez les étapes pour chacune de vos VM non gérées existantes.

Si vous souhaitez afficher les configurations par instance obtenues, exécutez la commande instance-configs list.

gcloud compute instance-groups managed instance-configs list my-mig \
    --zone=europe-west1-c

Pour afficher l'état préservé d'une instance, exécutez la commande describe-instance.

gcloud compute instance-groups managed describe-instance my-mig \
  --instance=my-instance-1 \
  --zone=europe-west1-c

Pour en savoir plus, consultez la section Appliquer, afficher et supprimer une configuration avec état dans les groupes d'instances gérés.

Configurer l'autoréparation

Les MIG corrigent automatiquement les instances gérées qui cessent de s'exécuter. Pour améliorer davantage la disponibilité de votre application et vérifier qu'elle répond, configurez une vérification d'état basée sur l'application. Consultez l'exemple de configuration de vérification de l'état pour obtenir des exemples de commandes.

Utiliser une règle avec état au lieu de configurations par instance

Une règle avec état vous permet de déclarer des disques ayant un nom d'appareil commun étant avec état dans le MIG. Une seule règle avec état représente moins de travail à gérer que plusieurs configurations par instance. Par exemple, avec une règle avec état, vous pouvez désigner tous les disques portant le nom d'appareil data-disk comme étant avec état pour toutes les instances du MIG.

Si votre MIG remplit les conditions suivantes, vous pouvez remplacer les configurations par instance par une règle avec état:

  • Toutes les VM ont le même nom d'appareil (par exemple, data-disk) pour les disques avec état similaires. Ce nom d'appareil est défini dans le modèle d'instance du groupe d'instances géré.
  • Aucune VM n'a de métadonnées avec état uniques spécifiées dans une configuration par instance. Si vous avez défini des métadonnées avec état dans une configuration par instance, vous pouvez supprimer le disque de la configuration par instance, mais vous devez conserver la configuration par instance pour conserver ces métadonnées avec état spécifiques à l'instance.

Suivez les étapes ci-dessous pour remplacer plusieurs configurations par instance par une seule règle avec état.

  1. configurer des disques avec état dans une règle avec état. Suivez les instructions de la section Définir et mettre à jour la configuration avec état pour les disques d'un MIG existant.

    Pour l'exemple de scénario, utilisez la commande suivante. Ainsi, tous les disques du MIG qui portent un nom d'appareil spécifique seront conservés.

    gcloud compute instance-groups managed update my-mig \
      --stateful-disk=device-name=data-disk,auto-delete=never
    
  2. Si vous souhaitez conserver des métadonnées spécifiques à une instance, mettez à jour la configuration par instance. Sinon, supprimez la configuration par instance. Appliquez immédiatement la modification de configuration à l'aide de l'option --update-instance. Par exemple, pour supprimer la configuration par instance, utilisez la commande suivante:

    gcloud compute instance-groups managed instance-configs delete my-mig \
      --instances=my-instance-1 \
      --update-instance
    
  3. (Facultatif) Vérifiez que les éléments avec état sont maintenant stockés dans l'état préservé de la règle (preservedStateFromPolicy) pour chaque instance gérée. Pour en savoir plus, consultez la section Afficher les états préservés des instances gérées.

Ajouter des VM

Si vous avez besoin d'ajouter des VM pour développer votre application, vous pouvez ajouter des VM supplémentaires en augmentant la taille de votre groupe d'instances géré ou en créant manuellement plus d'instances. Le MIG crée toutes ses VM, y compris leurs disques persistants, en fonction du modèle d'instance du groupe. Si le groupe dispose d'une règle avec état, tous les éléments que vous répertoriez dans la règle avec état sont conservés lors des opérations de redémarrage, de recréation, d'autoréparation et de mise à jour pour toutes les instances nouvelles et existantes du groupe. Si vous devez configurer des disques ou des métadonnées avec état uniquement pour des VM spécifiques de votre groupe, utilisez des configurations par instance.

Étape suivante