Partager via


Tutoriel : Modifier un groupe de machines virtuelles identiques avec Azure CLI

Tout au long du cycle de vie de vos applications, vous pourrez avoir besoin de modifier ou de mettre à jour votre groupe de machines virtuelles identiques. Ces mises à jour peuvent être liées à la configuration du groupe de machines ou à la modification de la configuration de l’application. Cet article explique comment modifier un groupe identique existant en utilisant Azure CLI.

Ci-dessous, nous déclarons des variables d’environnement qui seront utilisées dans ce document. Un suffixe aléatoire est ajouté aux noms de ressources qui doivent être uniques pour chaque déploiement. Le REGION paramètre est défini sur WestUS2.

Configurer le groupe de ressources

Avant de continuer, vérifiez que le groupe de ressources existe. Cette étape crée le groupe de ressources s’il n’existe pas déjà.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
  "location": "WestUS2",
  "managedBy": null,
  "name": "myResourceGroupxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Créer le groupe de machines virtuelles identiques

Pour que les commandes de mise à jour et de requête suivantes disposent d’une ressource valide pour fonctionner, créez un ensemble de machines virtuelles identiques. Dans cette étape, nous déployons un ensemble d'échelle de base à l’aide d’une image valide (Ubuntu2204) et définissons le compte d’instances sur 5 afin que les mises à jour spécifiques à l’instance puissent cibler un ID d’instance existant.

export SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --image Ubuntu2204 \
  --upgrade-policy-mode manual \
  --instance-count 5 \
  --admin-username azureuser \
  --generate-ssh-keys
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
  "location": "WestUS2",
  "name": "myScaleSetxxx",
  "provisioningState": "Succeeded"
}

Mettre à jour le modèle de groupe identique

Un groupe identique est associé à un modèle qui capture l’état souhaité du groupe identique dans son ensemble. Pour interroger le modèle d’un groupe identique, vous pouvez utiliser az vmss show :

az vmss show --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

La sortie exacte obtenue varie selon les options que vous ajoutez à la commande. L’exemple suivant représente une sortie condensée de l’interface Azure CLI :

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
  "location": "WestUS2",
  "name": "myScaleSetxxx",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroupxxx",
  "sku": {
    "capacity": 5,
    "name": "Standard_DS1_v2",
    "tier": "Standard"
  },
  "timeCreated": "2022-11-29T22:16:43.250912+00:00",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "networkProfile": {
    "networkApiVersion": "2020-11-01",
    "networkInterfaceConfigurations": [
      {
        "deleteOption": "Delete",
        "disableTcpStateTracking": false,
        "dnsSettings": {
          "dnsServers": []
        },
        "enableIpForwarding": false,
        "ipConfigurations": [
          {
            "applicationGatewayBackendAddressPools": [],
            "applicationSecurityGroups": [],
            "loadBalancerBackendAddressPools": [
              {
                "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                "resourceGroup": "myResourceGroupxxx"
              }
            ],
            "name": "mysca2215IPConfig",
            "privateIpAddressVersion": "IPv4",
            "subnet": {
              "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
              "resourceGroup": "myResourceGroupxxx"
            }
          }
        ],
        "name": "mysca2215Nic",
        "networkSecurityGroup": {
          "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
          "resourceGroup": "myResourceGroupxxx"
        },
        "primary": true
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerNamePrefix": "myScaleS",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true
    }
  },
  "storageProfile": {
    "imageReference": {
      "offer": "UbuntuServer",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "storageAccountType": "Premium_LRS"
      },
      "osType": "Linux"
    }
  }
}

Vous pouvez utiliser az vmss update pour mettre à jour diverses propriétés de votre groupe identique. Par exemple, la mise à jour de votre type de licence ou de la stratégie de protection d’instance d’une machine virtuelle. Notez que la valeur de type de licence autorisée est RHEL_BYOS plutôt que Windows_Server.

az vmss update --name $SCALE_SET_NAME --resource-group $MY_RESOURCE_GROUP_NAME --license-type RHEL_BYOS
export INSTANCE_ID=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].instanceId" \
  -o tsv)

az vmss update \
  --name $SCALE_SET_NAME \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --instance-id "$INSTANCE_ID" \
  --protect-from-scale-set-actions False \
  --protect-from-scale-in

Par ailleurs, si vous avez précédemment déployé le groupe identique avec la commande az vmss create, vous pouvez réexécuter la commande az vmss create pour mettre à jour le groupe identique. Vérifiez que toutes les propriétés définies dans la commande az vmss create sont les mêmes qu’avant, à l’exception de celles que vous souhaitez modifier. Par exemple, nous augmentons ci-dessous le nombre d’instances à cinq.

Important

À compter de novembre 2023, les groupes de machines virtuelles identiques créés à l'aide de PowerShell et d'Azure CLI utilisent par défaut le mode d'orchestration flexible si aucun mode d'orchestration n'est spécifié. Pour plus d’informations sur ce changement et les actions que vous devez entreprendre, consultez l’article Changement cassant pour les clients VMSS PowerShell/CLI – Hub Communauté Microsoft

az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5 \
  --os-disk-size-gb 64

Mise à jour d’instances VM individuelles dans un groupe identique

Comme le groupe identique, chaque instance de machine virtuelle a sa propre vue de modèle. Pour interroger la vue de modèle d’une instance VM spécifique dans un groupe identique, vous pouvez utiliser az vm show.

export INSTANCE_NAME=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].name" \
  -o tsv)

az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $INSTANCE_NAME

La sortie exacte obtenue varie selon les options que vous ajoutez à la commande. L’exemple suivant représente une sortie condensée de l’interface Azure CLI :

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2"
  },
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "WestUS2",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroupxxx"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true
    }
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroupxxx",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "22.04.202204200",
      "offer": "0001-com-ubuntu-server-jammy",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_xxx",
        "resourceGroup": "myResourceGroupxxx",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_xxx",
      "osType": "Linux"
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
    "resourceGroup": "myResourceGroupxxx"
  }
}

Ces propriétés décrivent la configuration d’une instance de machine virtuelle au sein d’un groupe identique, et non celle du groupe identique dans son ensemble.

Vous pouvez effectuer des mises à jour d’instances VM individuelles dans un groupe identique comme pour une machine virtuelle autonome. Par exemple, l’attachement d’un nouveau disque de données à l’instance 1 :

az vm disk attach --resource-group $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --name disk_name1 --new

En réexécutant la commande az vm show, nous voyons maintenant que l’instance VM a le nouveau disque attaché.

{
  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroupxxx",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false
      }
    ]
  }
}

Ajouter une instance à votre groupe identique

Il existe des moments où vous souhaiterez peut-être ajouter une nouvelle machine virtuelle à votre groupe identique, mais vous souhaitez des options de configuration différentes de celles répertoriées dans le modèle de groupe identique. Vous pouvez ajouter des machines virtuelles à un groupe identique au moment de la création en utilisant la commande az vm create et en spécifiant le nom du groupe identique auquel ajouter l’instance.

export NEW_INSTANCE_NAME="myNewInstance$RANDOM_SUFFIX"
az vm create --name $NEW_INSTANCE_NAME --resource-group $MY_RESOURCE_GROUP_NAME --vmss $SCALE_SET_NAME --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myNewInstancexxx",
  "location": "WestUS2",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroupxxx",
  "zones": ""
}

Si nous vérifions ensuite notre groupe identique, nous voyons la nouvelle instance ajoutée.

az vm list --resource-group $MY_RESOURCE_GROUP_NAME --output table
Name                  ResourceGroup      Location
--------------------  ---------------    ----------
myNewInstancexxx      myResourceGroupxxx WestUS2
myScaleSet_Instance1  myResourceGroupxxx WestUS2
myScaleSet_Instance1  myResourceGroupxxx WestUS2

Mettre à jour des machines virtuelles avec le dernier modèle de groupe identique

Notes

Les modes de mise à niveau ne sont actuellement pas pris en charge sur Virtual Machine Scale Sets avec le mode d’orchestration flexible.

Les groupes identiques ont une « stratégie de mise à niveau » qui détermine la façon dont les machines virtuelles sont mises à jour à l’aide du dernier modèle du groupe identique. Les trois modes de la stratégie de mise à niveau sont les suivants :

  • Automatique : avec ce mode, le groupe identique ne garantit pas l’ordre dans lequel les machines virtuelles sont arrêtées. Le groupe identique peut arrêter toutes les machines virtuelles en même temps.
  • Continue : avec ce mode, le groupe identique déploie la mise à jour par lots, en marquant éventuellement une pause entre chaque lot.
  • Manuel : avec ce mode, quand vous mettez à jour le modèle de groupe identique, rien ne se passe sur les machines virtuelles existantes tant qu’une mise à jour manuelle n’est pas déclenchée.

Si votre groupe identique est défini sur des mises à niveau manuelles, vous pouvez déclencher une mise à niveau manuelle avec la commande az vmss update.

az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

Notes

Les clusters Service Fabric peuvent uniquement utiliser le mode Automatique, mais la mise à jour est gérée différemment. Pour plus d’informations, consultez Mise à niveau des applications Service Fabric.

Réinitialiser un groupe identique

Virtual Machine Scale Sets génère un nom unique pour chaque machine virtuelle du groupe identique. La convention d’affectation de noms diffère selon le mode d’orchestration :

  • Mode d’orchestration flexible : {nom_groupe_identique}_{GUID_sur_8_caractères}
  • Mode d’orchestration uniforme : {nom_groupe_identique}_{ID_instance}

Dans les cas où vous devez réimager une instance spécifique, utilisez az vmss reimage et spécifiez l’ID d’instance. Une autre option consiste à utiliser az vm redeploy pour réimager la machine virtuelle directement. Cette commande est utile si vous souhaitez réimager une machine virtuelle sans avoir à spécifier l’ID d’instance.

# Get the VM name first
VM_NAME=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].name" \
  -o tsv)

# Reimage the VM directly
az vm redeploy \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $VM_NAME

Mettre à jour l’image du système d’exploitation pour un groupe identique

Supposons que vous possédez un groupe identique qui exécute une ancienne version d’Ubuntu. Vous souhaitez effectuer une mise à jour vers une version plus récente d’Ubuntu, telle que la dernière version. Comme la propriété de version de la référence d’image ne fait pas partie d’une liste, vous pouvez la modifier directement avec az vmss update.

az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest

Vous pouvez également modifier l'image utilisée par votre groupe identique. Par exemple, vous pouvez mettre à jour ou modifier une image personnalisée utilisée par votre groupe identique. Vous pouvez modifier l'image utilisée par votre groupe identique en mettant à jour la propriété ID de référence de l'image. Comme la propriété d’ID de la référence d’image ne fait pas partie d’une liste, vous pouvez la modifier directement avec az vmss update.

Si vous utilisez des images de plateforme Azure, vous pouvez les mettre à jour en modifiant imageReference (pour plus d’informations, consultez la documentation de l’API REST).

Notes

Avec les images de plateforme, il est courant de spécifier « latest » (dernière) pour la version de référence d’image. Cela signifie que lors de la création, de l’augmentation de la taille des instances et de la réinitialisation du groupe identique, les machines virtuelles sont créées avec la dernière version disponible. Toutefois, cela ne signifie pas que l’image du système d’exploitation sera automatiquement mise à jour à chaque nouvelle version d’image. Une fonctionnalité séparée fournit des mises à niveau de système d’exploitation automatiques. Pour plus d’informations, consultez la documentation relative aux mises à niveau automatiques du système d’exploitation.

Si vous utilisez des images personnalisées, vous pouvez les mettre à jour en modifiant l’ID imageReference (pour plus d’informations, consultez la documentation de l’API REST).

Mettre à jour l’équilibreur de charge pour un groupe identique

Supposons que vous utilisiez un groupe identique avec Azure Load Balancer, et que vous souhaitiez remplacer Azure Load Balancer par Azure Application Gateway. Comme les propriétés de l’équilibreur de charge et de la passerelle applicative d’un groupe identique font partie d’une liste, vous pouvez utiliser les commandes de suppression et d’ajout d’éléments de liste, au lieu de modifier directement les propriétés.

# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0

# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0

# Add the application gateway backend pool to the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/xxxxx/resourceGroups/'$MY_RESOURCE_GROUP_NAME'/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

Notes

Ces commandes supposent qu’il n’existe qu’une seule configuration IP et qu’un seul équilibreur de charge dans le groupe identique. S’il en existe plusieurs, vous devrez peut-être utiliser un index de liste différent de 0.

Étapes suivantes

Dans ce tutoriel, vous avez appris à modifier différents aspects de votre groupe identique et des instances individuelles.

  • Mettre à jour le modèle de groupe identique
  • Mettre à jour une instance VM individuelle dans un groupe identique
  • Ajouter une instance à votre groupe identique
  • Mettre à jour des machines virtuelles avec le dernier modèle de groupe identique
  • Réinitialiser un groupe identique
  • Mettre à jour l’image du système d’exploitation pour un groupe identique
  • Mettre à jour l’équilibreur de charge pour un groupe identique