Tutoriel : Effectuer une mise à l’échelle automatique d’un groupe de machines virtuelles identiques avec Azure CLI

Lorsque vous créez un groupe identique, vous définissez le nombre d’instances de machine virtuelle que vous souhaitez exécuter. À mesure que la demande de votre application change, vous pouvez augmenter ou diminuer automatiquement le nombre d’instances de machine virtuelle. La capacité de mise à l’échelle automatique vous permet de suivre la demande du client ou de répondre aux changements de performances de votre application tout au long de son cycle de vie. Ce didacticiel vous montre comment effectuer les opérations suivantes :

  • Utiliser la mise à l’échelle automatique avec un groupe identique
  • Créer et utiliser des règles de mise à l’échelle automatique
  • Effectuer un test de contrainte sur les instances de machine virtuelle et déclencher des règles de mise à l’échelle automatique
  • Remettre à l’échelle automatiquement en cas de baisse de la demande

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Prérequis

  • Ce tutoriel nécessite Azure CLI version 2.0.32 ou ultérieure. Si vous utilisez Azure Cloud Shell, la version la plus récente est déjà installée.

Créer un groupe identique

Créez un groupe de ressources avec la commande az group create.

az group create --name myResourceGroup --location eastus

Créez à présent un groupe de machines virtuelles identiques avec az vmss create. L’exemple suivant crée un groupe identique avec 2 instances, et génère des clés SSH si elles n’existent pas.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image <SKU image> \
  --orchestration-mode Flexible \
  --instance-count 2 \
  --admin-username azureuser \
  --generate-ssh-keys

Définir un profil de mise à l’échelle automatique

Pour activer la mise à l’échelle automatique sur un groupe identique, vous devez d’abord définir un profil de mise à l’échelle automatique. Ce profil définit les capacités par défaut, minimale et maximale du groupe identique. Ces limites vous permettent de contrôler le coût en évitant de créer continuellement des instances de machine virtuelle et d’équilibrer les performances acceptables sur un nombre minimal d’instances qui restent dans un événement de diminution du nombre d’instances. Créez un profil de mise à l’échelle automatique az monitor autoscale create. L’exemple suivant définit les capacités par défaut et minimale de 2 instances de machine virtuelle, et la capacité maximale de 10 :

az monitor autoscale create \
  --resource-group myResourceGroup \
  --resource myScaleSet \
  --resource-type Microsoft.Compute/virtualMachineScaleSets \
  --name autoscale \
  --min-count 2 \
  --max-count 10 \
  --count 2

Créer une règle pour le scale-out automatique

Si la demande de votre application augmente, la charge sur les instances de machine virtuelle dans votre groupe identique augmente. Si cette augmentation de la charge est cohérente, au lieu d’une brève demande, vous pouvez configurer des règles de mise à l’échelle automatique pour augmenter le nombre d’instances de machine virtuelle dans le groupe identique. Lorsque ces instances de machine virtuelle sont créées et que vos applications sont déployées, le groupe identique commence à distribuer le trafic vers les instances via l’équilibreur de charge. Vous contrôlez les métriques à monitorer, la durée pendant laquelle la charge de l’application doit respecter un seuil donné et le nombre d’instances VM à ajouter au groupe identique.

Créons avec az monitor autoscale rule create une règle qui augmente le nombre d’instances VM dans un groupe identique quand la charge moyenne du processeur est supérieure à 70 % pendant 5 minutes. Lorsque la règle se déclenche, le nombre d’instances de machine virtuelle est majoré de trois unités.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU > 70 avg 5m" \
  --scale out 3

Créer une règle pour le scale-in automatique

Au cours d’une soirée ou d’un week-end, la demande de votre application peut diminuer. Si cette charge réduite est constante pendant un certain temps, vous pouvez configurer des règles de mise à l’échelle automatique pour réduire le nombre d’instances de machine virtuelle dans le groupe identique. Cette action de diminution du nombre d’instances a pour effet de réduire le coût d’exécution de votre groupe identique, car vous seul exécutez le nombre d’instances requis pour répondre à la demande en cours.

Créez avec az monitor autoscale rule create une autre règle qui réduit le nombre d’instances de machine virtuelle dans un groupe identique lorsque la charge moyenne du processeur est inférieure à 30 % pendant 5 minutes. L’exemple suivant définit la règle pour diminuer de une unité le nombre d’instances de machine virtuelle.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU < 30 avg 5m" \
  --scale in 1

Générer une charge d’UC sur un groupe identique

Pour tester les règles de mise à l’échelle automatique, générez des charges d’UC sur les instances de machine virtuelle dans le groupe identique. Cette charge d’UC simulée provoque le scale-out de la mise à l’échelle automatique et l’augmentation du nombre d’instances de machine virtuelle. Comme la charge d’UC simulée diminue ensuite, les règles de mise à l’échelle automatique effectuent un scale-out du nombre d’instances de machine virtuelle.

Pour vous connecter à une instance individuelle, consultez Tutoriel : Se connecter à des instances de groupe de machines virtuelles identiques

Une fois connecté, installez l’utilitaire stress ou stress-ng. Démarrez 10 workers de contrainte qui génèrent une charge au niveau du processeur. Ces rôles de travail sont exécutés pendant 420 secondes, ce qui est suffisant pour que les règles de mise à l’échelle automatique implémentent l’action souhaitée.

sudo apt-get update
sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

Lorsque stress affiche une sortie du type stress: info: [2688] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, appuyez sur la touche Entrée pour revenir à l’invite de commandes.

Pour vérifier que stress génère une charge d’UC, examinez la charge du système actif avec l’utilitaire top :

top

Quittez top, puis fermez votre connexion à l’instance de machine virtuelle. stress continue de s’exécuter sur l’instance de machine virtuelle.

Ctrl-c
exit

Connectez-vous à la deuxième instance de machine virtuelle avec le numéro de port indiqué à partir de la commande az vmss list-instance-connection-info précédente :

ssh azureuser@13.92.224.66 -p 50003

Installez et exécutez stress ou stress-ng, puis démarrez dix rôles de travail dans cette deuxième instance de machine virtuelle.

sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

Là encore, si stress affiche une sortie semblable à stress: info: [2713] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, appuyez sur la touche Entrée pour revenir à l’invite de commandes.

Fermez votre connexion à la deuxième instance de machine virtuelle. stress continue de s’exécuter sur l’instance de machine virtuelle.

exit

Surveiller les règles actives de mise à l’échelle automatique

Pour surveiller le nombre d’instances de machine virtuelle dans votre groupe identique, utilisez watch. Les règles de mise à l’échelle automatique prennent 5 minutes pour commencer le processus de scale-out en réponse à la charge d’UC générée par stress sur chacune des instances de machine virtuelle :

watch az vmss list-instances \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --output table

Une fois que le seuil de l’UC est atteint, les règles de mise à l’échelle automatique augmentent le nombre d’instances de machine virtuelle au sein du groupe identique. La sortie suivante montre trois machines virtuelles créées au moment de la montée en puissance automatique du groupe identique :

Every 2.0s: az vmss list-instances --resource-group myResourceGroup --name myScaleSet --output table

  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup    VmId
------------  --------------------  ----------  ------------  -------------------  ---------------  ------------------------------------
           1  True                  eastus      myScaleSet_1  Succeeded            myResourceGroup  4f92f350-2b68-464f-8a01-e5e590557955
           2  True                  eastus      myScaleSet_2  Succeeded            myResourceGroup  d734cd3d-fb38-4302-817c-cfe35655d48e
           4  True                  eastus      myScaleSet_4  Creating             myResourceGroup  061b4c90-0d73-49fc-a066-19eab0b3d95c
           5  True                  eastus      myScaleSet_5  Creating             myResourceGroup  4beff8b9-4e65-40cb-9652-43899309da27
           6  True                  eastus      myScaleSet_6  Creating             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

Une fois que stress s’arrête sur les instances initiales de machine virtuelle, la charge d’UC moyenne retourne à la normale. Lorsque 5 autres minutes ont passé, les règles de mise à l’échelle automatique effectuent un scale-in du nombre d’instances de machine virtuelle. Les actions de scale-in suppriment des instances de machine virtuelle disposant des ID les plus élevés. Lorsqu’un groupe identique utilise des groupes à haute disponibilité ou des zones de disponibilité, les actions de scale-in sont réparties uniformément entre les instances de machine virtuelle. La sortie d’exemple suivante montre une instance de machine virtuelle supprimée lors de la diminution automatique :

6  True                  eastus      myScaleSet_6  Deleting             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

Fermez watch avec Ctrl-c. Le groupe identique continue d’effectuer un scale-in toutes les 5 minutes et supprime une instance de machine virtuelle jusqu’à ce que la quantité minimale d’instances (2) soit atteinte.

Nettoyer les ressources

Pour supprimer votre groupe identique et les ressources supplémentaires, supprimez le groupe de ressources et toutes ses ressources avec az group delete. Le paramètre --no-wait retourne le contrôle à l’invite de commandes sans attendre que l’opération se termine. Le paramètre --yes confirme que vous souhaitez supprimer les ressources sans passer par une invite supplémentaire à cette fin.

az group delete --name myResourceGroup --yes --no-wait

Étapes suivantes

Dans ce tutoriel, vous avez appris à effectuer automatiquement un scale-in ou un scale-out d’un groupe identique avec Azure CLI :

  • Utiliser la mise à l’échelle automatique avec un groupe identique
  • Créer et utiliser des règles de mise à l’échelle automatique
  • Effectuer un test de contrainte sur les instances de machine virtuelle et déclencher des règles de mise à l’échelle automatique
  • Remettre à l’échelle automatiquement en cas de baisse de la demande