Partager via


Modifier un groupe de machines virtuelles identiques

Remarque

La plupart des étapes répertoriées dans ce document s’appliquent à Virtual Machine Scale Sets en utilisant le mode d’orchestration uniforme. Nous vous recommandons d’utiliser l’orchestration flexible pour les nouvelles charges de travail. Pour plus d’informations, consultez Modes d’orchestration pour les groupes de machines virtuelles identiques dans Azure.

Tout au long du cycle de vie de vos applications, vous pourriez avoir besoin de modifier ou de mettre à jour votre ensemble de machines virtuelles. Ces mises à jour peuvent être liées à la configuration du groupe de machines ou à la modification de la configuration de l’application. Cet article décrit comment modifier un ensemble d'échelles avec les API REST, Azure PowerShell ou Azure CLI.

Concepts fondamentaux

Modèle du 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 les

  • API REST avec compute/virtualmachinescalesets/get comme suit :

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Azure PowerShell avec Get-AzVmss :

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
    
  • Azure CLI avec az vmss show :

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • Vous pouvez également utiliser resources.azure.com ou les SDK Azure spécifiques à un langage.

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 :

az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "overprovision": true,
  "plan": null,
  "singlePlacementGroup": true,
  "sku": {
    "additionalProperties": {},
    "capacity": 1,
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

Ces propriétés s’appliquent à l’ensemble du groupe identique.

Vue d’instance du groupe identique

Un groupe identique est également associé à une vue d’instance de groupe identique. Cette vue capture l’état actuel de l’exécution du groupe identique dans son ensemble. Pour interroger la vue d’instance d’un groupe identique, vous pouvez utiliser :

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 :

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
{
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": null,
      "time": "{time}"
    }
  ],
  "virtualMachine": {
    "additionalProperties": {},
    "statusesSummary": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "count": 1
      }
    ]
  }
}

Ces propriétés fournissent un récapitulatif de l’état d'exécution actuel des machines virtuelles du jeu d’échelle, notamment l’état des extensions déployées au jeu d'échelle.

Vue de modèle des machines virtuelles du groupe identique

De la même manière qu'un ensemble de machines a une vue de modèle, chaque instance de machine virtuelle dans cet ensemble a sa propre vue de modèle. Pour interroger la vue de modèle d’une instance de machine virtuelle dans un ensemble de machines virtuelles, vous pouvez utiliser :

  • Les API REST API avec compute/virtualmachinescalesetvms/get comme suit :

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId?api-version={apiVersion}
    
  • Azure PowerShell avec Get-AzVmssVm :

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • Azure CLI avec az vmss show :

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Vous pouvez également utiliser resources.azure.com ou les kits de développement logiciel (SDK) Azure.

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 :

$ az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "name": "{name}",
  "sku": {
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

Ces propriétés décrivent la configuration d'une instance de machine virtuelle au sein d'un ensemble de mise à l'échelle, et non la configuration de l'ensemble de mise à l'échelle dans son ensemble. Par exemple, le modèle du groupe identique a la propriété overprovision, contrairement au modèle d’une instance de machine virtuelle d’un groupe identique. En effet, le surapprovisionnement est une propriété qui s’applique aux groupes identiques, mais pas aux instances de machine virtuelle qui les constituent (pour plus d’informations sur le surapprovisionnement, consultez la section Considérations relatives à la conception de groupes de machines virtuelles identiques).

Vue d’instance des machines virtuelles d’un groupe identique

De la même manière qu'un ensemble de mise à l'échelle possède une vue d’instance, chaque instance de machine virtuelle dans l'ensemble a sa propre vue d’instance. Pour interroger la vue d'instance d'une instance de machine virtuelle d'un groupe à échelle, vous pouvez utiliser :

  • Les API REST avec compute/virtualmachinescalesetvms/getinstanceview comme suit :

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId/instanceView?api-version={apiVersion}
    
  • Azure PowerShell avec Get-AzVmssVm :

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -InstanceView
    
  • Azure CLI utilisant az vmss get-instance-view

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Vous pouvez également utiliser resources.azure.com ou les kits de développement logiciel Azure

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 :

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
{
  "additionalProperties": {
    "osName": "ubuntu",
    "osVersion": "16.04"
  },
  "disks": [
    {
      "name": "{name}",
      "statuses": [
        {
          "additionalProperties": {},
          "code": "ProvisioningState/succeeded",
          "displayStatus": "Provisioning succeeded",
          "time": "{time}"
        }
      ]
    }
  ],
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "time": "{time}"
    },
    {
      "additionalProperties": {},
      "code": "PowerState/running",
      "displayStatus": "VM running"
    }
  ],
  "vmAgent": {
    "statuses": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "displayStatus": "Ready",
        "level": "Info",
        "message": "Guest Agent is running",
        "time": "{time}"
      }
    ],
    "vmAgentVersion": "{version}"
  },
}

Ces propriétés décrivent l'état d'exécution actuel d'une instance de machine virtuelle au sein d'un ensemble à l'échelle, qui inclut toute extension appliquée à cet ensemble à l'échelle.

Comment mettre à jour les propriétés d'un ensemble d'échelle global

Pour mettre à jour une propriété globale d’un groupe identique, vous devez mettre à jour cette propriété dans le modèle du groupe identique. Vous pouvez effectuer cette modification via :

  • Les API REST avec compute/virtualmachinescalesets/createorupdate comme suit :

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Vous pouvez déployer un modèle Resource Manager avec les propriétés de l’API REST pour mettre à jour les propriétés globales du groupe identique.

  • Azure PowerShell avec Update-AzVmss :

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -VirtualMachineScaleSet {scaleSetConfigPowershellObject}
    
  • Azure CLI avec az vmss update:

    • Pour modifier une propriété :

      az vmss update --set {propertyPath}={value}
      
    • Pour ajouter un objet à une propriété de liste dans un ensemble d'échelle :

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • Pour supprimer un objet de la propriété de liste d’un groupe identique :

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Si vous avez précédemment déployé le groupe identique à l’aide de la commande az vmss create, vous pouvez réexécuter la commande az vmss create pour modifier le groupe identique. Vérifiez que toutes les propriétés de la commande az vmss create sont les mêmes qu'avant, à l'exception de celles que vous souhaitez modifier.

  • Vous pouvez également utiliser resources.azure.com ou les kits SDK Azure.

Une fois que le modèle de l'ensemble de machines virtuelles est mis à jour, la nouvelle configuration s'applique aux nouvelles machines virtuelles créées dans cet ensemble. Toutefois, les modèles des machines virtuelles existantes appartenant à l'ensemble doivent toujours être mis à jour avec le dernier modèle global de l'ensemble. Le modèle de chaque machine virtuelle contient une propriété booléenne appelée latestModelApplied, qui indique si la machine virtuelle est à jour, par rapport au dernier modèle global du groupe identique (true signifie que la machine virtuelle est à jour par rapport au dernier modèle).

Propriétés avec restrictions au niveau de la modification

Propriétés définies au moment de la création

Certaines propriétés peuvent être définies uniquement lors de la création de l'ensemble de dimensionnement. Voici quelques exemples : type de compte de stockage de disque de système d’exploitation managé et domaines d’erreur.

Propriétés qui peuvent être modifiées uniquement en fonction de la valeur actuelle

Certaines propriétés peuvent être modifiées, avec des exceptions, selon la valeur actuelle. Ces propriétés sont les suivantes :

  • singlePlacementGroup
  • subnet
  • imageReferenceSku
  • imageReferenceOffer
  • zones

Exemple 1

Pour mettre à jour votre ensemble d'échelles afin d'utiliser une autre version du système d’exploitation, vous devez définir toutes les propriétés mises à jour en une seule opération. Dans cet exemple, nous passons d’Unbuntu Server 20.04 à 22.04.

az vmss update \
--resource-group myResourceGroup \
--name myScaleSet \
--set virtualMachineProfile.storageProfile.imageReference.offer=0001-com-ubuntu-server-jammy \
--set virtualMachineProfile.storageProfile.imageReference.publisher=Canonical \
--set virtualMachineProfile.storageProfile.imageReference.sku=22_04-lts-gen2 \
--set virtualMachineProfile.storageProfile.imageReference.version=latest

Exemple 2

Pour mettre à jour votre groupe identique de façon à utiliser une autre version du système d’exploitation, vous devez définir toutes les propriétés mises à jour dans un seul appel. Dans cet exemple, nous passons de Windows Server 2016 à Windows Server 2019.

$VMSS = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Set-AzVmssStorageProfile $vmss `
    -OsDiskCreateOption "FromImage" `
    -ImageReferencePublisher "MicrosoftWindowsServer" `
    -ImageReferenceOffer "WindowsServer" `
    -ImageReferenceSku "2019-datacenter" `
    -ImageReferenceVersion "latest"

Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -VirtualMachineScaleSet $VMSS

Propriétés qui nécessitent une désallocation pour être modifiées

La valeur de certaines propriétés peut uniquement être modifiée si les machines virtuelles du groupe identique sont libérées. Ces propriétés sont les suivantes :

  • SKU Name : si la nouvelle référence (SKU) de machine virtuelle n’est pas prise en charge par le matériel sur lequel se trouve le jeu d'échelle, vous devez désallouer les machines virtuelles du jeu d'échelle avant de modifier le nom de la référence (SKU). Pour plus d’informations, voir comment redimensionner une machine virtuelle Azure.

Scénarios

Mises à jour d’application

Si une application est déployée dans un groupe identique via des extensions, la mise à jour de la configuration de l’extension va entraîner la mise à jour de l’application conformément à la stratégie de mise à niveau. Par exemple, si vous avez une nouvelle version d’un script qui doit s’exécuter dans une extension de script personnalisé, vous pouvez mettre à jour la propriété fileUris pour qu’elle pointe vers le nouveau script. Dans certains cas, toutefois, il est nécessaire de forcer une mise à jour, même si cela ne modifie pas la configuration de l’extension (par exemple, si vous avez mis à jour le script sans modifier son URI). Dans ce cas, vous pouvez modifier le forceUpdateTag pour qu’il force la mise à jour. La plateforme Azure n’interprète pas cette propriété. Toute modification de cette valeur n’a aucun effet sur l’exécution de l’extension. Sa modification ne fait que forcer la réexécution de l’extension. Pour plus d’informations sur forceUpdateTag, consultez la documentation API REST sur les extensions. Notez que la balise forceUpdateTag peut être utilisée avec toutes les extensions et pas seulement avec celle de script personnalisé.

Il est également courant de déployer des applications à l’aide d’une image personnalisée. Ce scénario est décrit dans la section suivante.

Mises à jour de système d’exploitation

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).

Remarque

Pour 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'extension et de la réimagerie des machines virtuelles, elles sont créées avec la dernière version disponible. Toutefois, cela ne signifie pas que l'image système sera automatiquement mise à jour au fil du temps à mesure que de nouvelles versions d'image sont publiées. 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 mettre à jour l’image en modifiant l’ID imageReference (pour plus d’informations, consultez la documentation de l’API REST).

Exemples

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

Supposons que vous possédez un groupe identique qui exécute une ancienne version d’Ubuntu LTS 16.04. Vous souhaitez passer à une version plus récente d'Ubuntu LTS 16.04, comme la version 16.04.201801090. La propriété de version de la référence d’image ne fait pas partie d’une liste. Vous pouvez donc la modifier directement avec l’une des commandes suivantes :

  • Azure PowerShell avec Update-AzVmss comme suit :

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -ImageReferenceVersion 16.04.201801090
    
  • Azure CLI avec az vmss update :

    az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=16.04.201801090
    

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 ensemble d'échelles en mettant à jour l'identifiant de référence de l'image. La propriété ID de référence de limage ne fait partie d'aucune liste. Vous pouvez donc la modifier directement à l'aide d'une des commandes suivantes :

  • Azure PowerShell avec Update-AzVmss comme suit :

    Update-AzVmss `
        -ResourceGroupName "myResourceGroup" `
        -VMScaleSetName "myScaleSet" `
        -ImageReferenceId /subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    
  • Azure CLI avec az vmss update :

    az vmss update \
        --resource-group myResourceGroup \
        --name myScaleSet \
        --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    

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. Les propriétés de l’équilibreur de charge et de la passerelle d'application d’un groupe de mise à l'échelle font partie d’une liste. Vous pouvez donc utiliser les commandes pour supprimer ou ajouter des éléments à la liste, au lieu de modifier directement les propriétés.

  • Azure PowerShell :

    # Get the current model of the scale set and store it in a local PowerShell object named $vmss
    $vmss=Get-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet"
    
    # Create a local PowerShell object for the new desired IP configuration, which includes the reference to the application gateway
    $ipconf = New-AzVmssIPConfig -ApplicationGatewayBackendAddressPoolsId /subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendAddressPoolName} -SubnetId $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Subnet.Id -Name $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Name
    
    # Replace the existing IP configuration in the local PowerShell object (which contains the references to the current Azure Load Balancer) with the new IP configuration
    $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0] = $ipconf
    
    # Update the model of the scale set with the new configuration in the local PowerShell object
    Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -virtualMachineScaleSet $vmss
    
  • Azure CLI :

    # Remove the load balancer backend pool from the scale set model
    az vmss update --resource-group myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'
    

Remarque

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

Vous pouvez également effectuer des tâches courantes de gestion sur des groupes identiques avec l’interface Azure CLI ou Azure PowerShell.