Modificare un set di scalabilità di macchine virtuali

Nota

Molti dei passaggi elencati in questo documento si applicano ai Set di scalabilità di macchine virtuali usando la modalità di orchestrazione uniforme. È consigliabile usare l'orchestrazione flessibile per i nuovi carichi di lavoro. Per altre informazioni, vedere Modalità di orchestrazione per i set di scalabilità di macchine virtuali in Azure.

Per tutto il ciclo di vita delle applicazioni, potrebbe essere necessario modificare o aggiornare il set di scalabilità di macchine virtuali. Questi aggiornamenti possono includere come aggiornare la configurazione del set di scalabilità o modificare la configurazione dell'applicazione. Questo articolo descrive come modificare un set di scalabilità esistente con le API REST, Azure PowerShell o l'interfaccia della riga di comando di Azure.

Concetti fondamentali

Il modello del set di scalabilità

Un set di scalabilità ha un "modello" che acquisisce lo stato desiderato del set di scalabilità nel suo insieme. Per interrogare il modello per un set di scalabilità, è possibile usare

  • API REST con compute/virtualmachinescalesets/get come segue:

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

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
    
  • interfaccia della riga di comando di Azure con az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • È anche possibile usare resources.azure.com o gli SDK di Azure specifici del linguaggio di programmazione.

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente illustra l'output di esempio condensato dall'interfaccia della riga di comando di Azure:

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"
  },
}

Queste proprietà si applicano al set di scalabilità nel suo insieme.

Visualizzazione dell'istanza del set di scalabilità

Un set di scalabilità dispone anche di una "visualizzazione dell'istanza del set di scalabilità" che descrive lo stato runtime corrente del set di scalabilità considerato nel suo complesso. Per eseguire query sulla visualizzazione dell'istanza per un set di scalabilità è possibile usare:

  • API REST con compute/virtualmachinescalesets/getinstanceview come segue:

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

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceView
    
  • interfaccia della riga di comando di Azure con az vmss get-instance-view:

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
    
  • È anche possibile utilizzare resources.azure.com o gli SDK di Azure specifici del linguaggio di programmazione

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente mostra un output di esempio sintetico di interfaccia della riga di comando di Azure:

$ 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
      }
    ]
  }
}

Queste proprietà forniscono un riepilogo dello stato di runtime corrente delle macchine virtuali nel set di scalabilità, ad esempio lo stato delle estensioni applicate al set di scalabilità stesso.

Visualizzazione del modello di VM del set di scalabilità

Come un set di scalabilità ha una visualizzazione modello, così anche ogni istanza di macchina virtuale nel set di scalabilità ha una propria visualizzazione modello. Per interrogare la vista modello per una specifica istanza di macchina virtuale in un set di scalabilità, è possibile usare:

  • API REST con compute/virtualmachinescalesetvms/get come segue:

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

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • interfaccia della riga di comando di Azure con az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • È anche possibile usare resources.azure.com o gli SDK di Azure.

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente mostra un output di esempio condensato da interfaccia della riga di comando di Azure:

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

Queste proprietà descrivono la configurazione di un'istanza della macchina virtuale all'interno di un set di scalabilità e non quella del set di scalabilità nel suo insieme. Ad esempio, il modello del set di scalabilità include overprovision come proprietà, mentre il modello di un'istanza di macchina virtuale all'interno di un set di scalabilità non la include. Questa differenza dipende dal fatto che l'overprovisioning è una proprietà dell'intero set di scalabilità, non delle singole istanze di VM nel set di scalabilità (per altre informazioni sull'overprovisioning, vedere Considerazioni sulla progettazione per i set di scalabilità).

Visualizzazione dell'istanza di macchina virtuale del set di scalabilità

Come un set di scalabilità ha una visualizzazione istanza, così anche ogni istanza di macchina virtuale nel set di scalabilità ha una propria visualizzazione istanza. Per interrogare la visualizzazione dell'istanza di una specifica istanza di macchina virtuale all'interno di un set di scalabilità, è possibile usare:

  • API REST con compute/virtualmachinescalesetvms/getinstanceview come segue:

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

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -InstanceView
    
  • interfaccia della riga di comando di Azure con az vmss get-instance-view

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • È anche possibile usare resources.azure.com o gli SDK di Azure

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente illustra l'output di esempio condensato dall'interfaccia della riga di comando di Azure:

$ 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}"
  },
}

Queste proprietà descrivono lo stato di runtime corrente di un'istanza della macchina virtuale all'interno di un set di scalabilità, che include le eventuali estensioni applicate al set di scalabilità.

Come aggiornare le proprietà globali del set di scalabilità

Per aggiornare una proprietà globale del set di scalabilità, occorre eseguire l'aggiornamento nel modello del set di scalabilità. È possibile eseguire questo aggiornamento tramite:

  • API REST con compute/virtualmachinescalesets/createorupdate come segue:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • È possibile distribuire un modello di Resource Manager con le proprietà dell'API REST per aggiornare le proprietà globali del set di scalabilità.

  • Azure PowerShell con Update-AzVmss:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -VirtualMachineScaleSet {scaleSetConfigPowershellObject}
    
  • interfaccia della riga di comando di Azure con az vmss update:

    • Per modificare una proprietà:

      az vmss update --set {propertyPath}={value}
      
    • Per aggiungere un oggetto a una proprietà di elenco in un set di scalabilità:

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • Per rimuovere un oggetto da una proprietà di elenco in un set di scalabilità:

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Se in precedenza è stato distribuito il set di scalabilità con il comando az vmss create, è possibile eseguire di nuovo il comando az vmss create per aggiornare il set di scalabilità. Assicurarsi che tutte le proprietà nel comando az vmss create siano uguali a prima, ad eccezione delle proprietà che si desidera modificare.

  • Puoi anche usare resources.azure.com o gli SDK di Azure.

Dopo l'aggiornamento del modello, la nuova configurazione viene applicata a tutte le nuove macchine virtuali create nel set di scalabilità. Tuttavia, i modelli delle macchine virtuali esistenti nel set di scalabilità devono ancora essere aggiornati con il più recente modello del set di scalabilità generale. Nel modello di ogni VM è presente una proprietà booleana denominata latestModelApplied che indica se la VM è o meno aggiornata al modello complessivo più recente del set di scalabilità (true significa che la VM è aggiornata al modello più recente).

Proprietà con restrizioni di modifica

Proprietà in fase di creazione

Alcune proprietà possono essere impostate solo quando si crea il set di scalabilità. Alcuni esempi includono il tipo di account di archiviazione su disco del sistema operativo gestito e i domini di errore.

Proprietà che possono essere modificate solo in base al valore corrente

Alcune proprietà possono essere modificate, con eccezioni che dipendono dal valore corrente. Queste proprietà includono:

  • gruppoDiPosizionamentoSingolo
  • sottorete
  • imageReferenceSku
  • imageReferenceOffer
  • zone

Esempio 1

Per aggiornare il set di scalabilità in modo da usare una versione diversa del sistema operativo, è necessario impostare tutte le proprietà aggiornate in una singola chiamata. In questo esempio si passa da Ubuntu Server 20.04 a 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

Esempio 2

Per aggiornare il set di scalabilità in modo da usare una versione diversa del sistema operativo, è necessario impostare tutte le proprietà aggiornate in una singola chiamata. In questo esempio, si esegue il passaggio da Windows Server 2016 a 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

Proprietà che richiedono la deallocazione per poter essere modificate

Alcune proprietà possono essere modificate su determinati valori solo dopo la deallocazione delle macchine virtuali del set di scalabilità. Queste proprietà includono:

  • Nome SKU: se lo SKU della nuova macchina virtuale non è supportato nell'hardware in cui è attualmente in esecuzione il set di scalabilità, è necessario deallocare le macchine virtuali nel set di scalabilità prima di modificare il nome dello SKU. Per ulteriori informazioni, vedere come ridimensionare una VM di Azure.

Scenari

Aggiornamenti dell'applicazione

Se un'applicazione viene distribuita a un set di scalabilità tramite estensioni, un aggiornamento alla configurazione delle estensioni causa l'aggiornamento dell'applicazione in conformità con i criteri di aggiornamento. Se ad esempio si deve eseguire una nuova versione di uno script in un'estensione dello script personalizzata, si potrebbe aggiornare la proprietà fileUris in modo che punti al nuovo script. In alcuni casi si potrebbe avere l'esigenza di forzare un aggiornamento anche se la configurazione delle estensioni è rimasta invariata, ad esempio nel caso in cui si sia aggiornato lo script senza modifiche all'URI. In questi casi è possibile modificare la proprietà forceUpdateTag per poter forzare un aggiornamento. La piattaforma di Azure non interpreta questa proprietà. Se si modifica il valore, l'esecuzione dell'estensione non subirà conseguenze. Una modifica impone di eseguire nuovamente l'estensione. Per ulteriori informazioni su forceUpdateTag, vedere la documentazione dell'API REST per le estensioni. Si noti che il tag forceUpdateTag può essere utilizzato con tutte le estensioni, non solo con l'estensione script personalizzata.

Uno scenario frequente è la distribuzione delle applicazioni tramite un'immagine personalizzata. Questo scenario è illustrato nella sezione seguente.

Aggiornamenti del sistema operativo

Se si utilizzano immagini della piattaforma Azure, è possibile aggiornare l'immagine modificando imageReference (per ulteriori informazioni, vedere la documentazione dell'API REST).

Nota

Con le immagini di piattaforma, è comune specificare "latest" come versione di riferimento dell'immagine. Quando si crea una VM, si esegue il ridimensionamento orizzontale e si rigenera l'immagine, le macchine virtuali vengono create con la versione più recente disponibile. Tuttavia, ciò non significa che l'immagine del sistema operativo venga aggiornata automaticamente nel corso del tempo man mano che vengono rilasciate nuove versioni dell'immagine. Una funzionalità separata fornisce aggiornamenti automatici del sistema operativo. Per altre informazioni, vedere la documentazione sugli aggiornamenti automatici del sistema operativo.

Se si utilizzano immagini personalizzate, è possibile aggiornare l'immagine aggiornando l'ID imageReference (per ulteriori informazioni, vedere la documentazione dell'API REST).

Esempi

Aggiorna l'immagine del sistema operativo per il tuo set di scalabilità

Si può avere un set di scalabilità che esegue una versione precedente di Ubuntu LTS 16.04. Si vuole eseguire l'aggiornamento a una versione più recente di Ubuntu LTS 16.04, ad esempio la versione 16.04.201801090. La proprietà della versione del riferimento all'immagine non fa parte di un elenco, quindi è possibile modificare direttamente queste proprietà con uno dei comandi seguenti:

  • Azure PowerShell con Update-AzVmss come segue:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -ImageReferenceVersion 16.04.201801090
    
  • interfaccia della riga di comando di Azure con az vmss update:

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

In alternativa, potresti voler cambiare l'immagine usata dal set di scalabilità. Ad esempio è possibile aggiornare o modificare un'immagine personalizzata usata dal set di scalabilità. È possibile modificare l'immagine usata dal set di scalabilità aggiornando la proprietà dell'ID di riferimento dell'immagine. La proprietà dell'ID del riferimento all'immagine non fa parte di un elenco, quindi è possibile modificare direttamente questa proprietà con uno dei comandi seguenti:

  • Azure PowerShell con Update-AzVmss come segue:

    Update-AzVmss `
        -ResourceGroupName "myResourceGroup" `
        -VMScaleSetName "myScaleSet" `
        -ImageReferenceId /subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    
  • interfaccia della riga di comando di Azure con 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
    

Aggiorna il bilanciatore del carico per il set di scalabilità

Supponiamo che si disponga di un set di scalabilità con Azure Load Balancer e che si voglia sostituire Azure Load Balancer con gateway applicazione di Azure. Le proprietà del bilanciatore del carico e di Application Gateway per un set di scalabilità fanno parte di un elenco, quindi è possibile usare i comandi per rimuovere o aggiungere elementi dell'elenco invece di modificare direttamente le proprietà:

  • 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
    
  • Interfaccia della riga di comando di Azure:

    # 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}"}'
    

Nota

Questi comandi presumono che nel set di scalabilità siano presenti una sola configurazione IP e un solo servizio di bilanciamento del carico. Se ce ne sono di più, potrebbe essere necessario usare un indice di elenco diverso da 0.

Passaggi successivi

È inoltre possibile eseguire attività di gestione comuni sui set di scalabilità con interfaccia della riga di comando di Azure o Azure PowerShell.