Ridimensionamento automatico verticale con set di scalabilità di macchine virtualiVertical autoscale with Virtual Machine Scale sets

In questo articolo viene descritto come ridimensionare in verticale i set di macchine virtuali di Azure con o senza un nuovo provisioning.This article describes how to vertically scale Azure Virtual Machine Scale Sets with or without reprovisioning. Per il ridimensionamento verticale delle VM non incluse nei set di scalabilità, vedere l'articolo Ridimensionamento verticale di macchine virtuali di Azure tramite Automazione di Azure.For vertical scaling of VMs which are not in scale sets, refer to Vertically scale Azure virtual machine with Azure Automation.

Per ridimensionamento verticale, detto anche aumento delle prestazioni e riduzione delle prestazioni, si intende l'aumento o la riduzione delle dimensioni delle macchine virtuali (VM) in risposta a un carico di lavoro.Vertical scaling, also known as scale up and scale down, means increasing or decreasing virtual machine (VM) sizes in response to a workload. Confrontare questo concetto con il ridimensionamento orizzontale, detto anche aumento delle istanze e riduzione delle istanze, in cui il numero di VM viene modificato in base al carico di lavoro.Compare this with horizontal scaling, also referred to as scale out and scale in, where the number of VMs is altered depending on the workload.

Per nuovo provisioning si intende la rimozione di una VM esistente e la relativa sostituzione con una nuova.Reprovisioning means removing an existing VM and replacing it with a new one. Quando si aumentano o riducono le dimensioni delle macchine virtuali in un set di scalabilità di macchine virtuali, in alcuni casi può rendersi necessario ridimensionare le VM esistenti e mantenere i dati, mentre in altri casi è necessario distribuire nuove VM con le nuove dimensioni.When you increase or decrease the size of VMs in a VM Scale Set, in some cases you want to resize existing VMs and retain your data, while in other cases you need to deploy new VMs of the new size. Questo documento illustra entrambi i casi.This document covers both cases.

Il ridimensionamento verticale, ovvero l'aumento o la riduzione delle prestazioni, può risultare utile quando:Vertical scaling can be useful when:

  • Un servizio basato su macchine virtuali è sottoutilizzato, ad esempio nel fine settimana.A service built on virtual machines is under-utilized (for example at weekends). La riduzione delle dimensioni delle VM può ridurre i costi mensili.Reducing the VM size can reduce monthly costs.
  • L'aumento delle dimensioni delle VM consente di soddisfare una maggiore richiesta senza creare altre macchine virtuali.Increasing VM size to cope with larger demand without creating additional VMs.

È possibile configurare l'attivazione del ridimensionamento verticale secondo le metriche basate sugli avvisi del set di scalabilità di macchine virtuali.You can set up vertical scaling to be triggered based on metric based alerts from your VM Scale Set. Quando viene attivato l'avviso, genera un webhook che attiva un runbook in grado di aumentare o ridurre le prestazioni del set di scalabilità.When the alert is activated it fires a webhook that triggers a runbook which can scale your scale set up or down. Il ridimensionamento verticale può essere configurato seguendo questa procedura:Vertical scaling can be configured by following these steps:

  1. Creare un account di Automazione di Azure con funzionalità RunAs.Create an Azure Automation account with run-as capability.
  2. Importare i runbook di scalabilità verticale di Automazione di Azure per i set di scalabilità di macchine virtuali nella sottoscrizione.Import Azure Automation Vertical Scale runbooks for VM Scale Sets into your subscription.
  3. Aggiungere un webhook al runbook.Add a webhook to your runbook.
  4. Aggiungere un avviso per il set di scalabilità di macchine virtuali con una notifica di un webhook.Add an alert to your VM Scale Set using a webhook notification.

Nota

Il ridimensionamento verticale può avvenire solo entro determinati intervalli di dimensioni delle VM.Vertical autoscaling can only take place within certain ranges of VM sizes. Confrontare le specifiche di ogni dimensione prima di decidere il tipo di ridimensionamento (un numero più alto non sempre indica dimensioni della VM più grandi).Compare the specifications of each size before deciding to scale from one to another (higher number does not always indicate bigger VM size). È possibile scegliere di applicare il ridimensionamento tra le seguenti coppie di dimensioni:You can choose to scale between the following pairs of sizes:

coppie di ridimensionamento di dimensioni delle macchine virtualiVM sizes scaling pair
Standard_A0Standard_A0 Standard_A11Standard_A11
Standard_D1Standard_D1 Standard_D14Standard_D14
Standard_DS1Standard_DS1 Standard_DS14Standard_DS14
Standard_D1v2Standard_D1v2 Standard_D15v2Standard_D15v2
Standard_G1Standard_G1 Standard_G5Standard_G5
Standard_GS1Standard_GS1 Standard_GS5Standard_GS5

Creare un account di Automazione di Azure con funzionalità RunAsCreate an Azure Automation Account with run-as capability

La prima operazione da eseguire è creare l'account di Automazione di Azure che ospiterà i runbook usati per ridimensionare le istanze del set di scalabilità di macchine virtuali.The first thing you need to do is create an Azure Automation account that will host the runbooks used to scale the VM Scale Set instances. Automazione di Azure ha introdotto di recente la funzionalità "Account RunAs", che semplifica molto la configurazione dell'entità servizio per l'esecuzione automatica di runbook per conto dell'utente.Recently Azure Automation introduced the "Run As account" feature which makes setting up the Service Principal for automatically running the runbooks on a user's behalf very easy. Altre informazioni sono disponibili nell'articolo seguente.You can read more about this in the article below:

Importare i runbook di ridimensionamento verticale di Automazione di Azure nella sottoscrizioneImport Azure Automation Vertical Scale runbooks into your subscription

I runbook necessari per il ridimensionamento verticale del set di scalabilità di macchine virtuali sono già stati pubblicati nella raccolta dei runbook di Automazione di Azure.The runbooks needed to vertically scale your VM Scale Sets are already published in the Azure Automation Runbook Gallery. Per importarli nella sottoscrizione seguire la procedura descritta in questo articolo:To import them into your subscription follow the steps in this article:

Scegliere l'opzione Esplora raccolta dal menu Runbook:Choose the Browse Gallery option from the Runbooks menu:

Runbook da importare

I runbook da importare sono visualizzati nell'immagine seguente:The runbooks that need to be imported are shown. Selezionare il runbook in base al tipo di ridimensionamento con o senza un nuovo provisioning che si vuole usare:Select the runbook based on whether you want vertical scaling with or without reprovisioning:

Raccolta di runbook

Aggiungere un webhook al runbookAdd a webhook to your runbook

Dopo avere importato i runbook, è necessario aggiungere un webhook al runbook in modo che possa essere attivato da un set di scalabilità di macchine virtuali.Once you've imported the runbooks you'll need to add a webhook to the runbook so it can be triggered by an alert from a VM Scale Set. Informazioni dettagliate sulla creazione di un webhook per il runbook sono disponibili in questo articolo:The details of creating a webhook for your Runbook are described in this article:

Nota

Assicurarsi di copiare l'URI del webhook prima di chiudere la finestra di dialogo del webhook, perché sarà necessario nella sezione successiva.Make sure you copy the webhook URI before closing the webhook dialog as you will need this in the next section.

Aggiungere un avviso al set di scalabilità di macchine virtualiAdd an alert to your VM Scale Set

Di seguito è riportato uno script di PowerShell che mostra come aggiungere un avviso a un set di scalabilità di macchine virtuali.Below is a PowerShell script which shows how to add an alert to a VM Scale Set. Vedere l'articolo seguente per ottenere il nome della metrica in base alla quale attivare l'avviso: Azure Monitor autoscaling common metrics (Metriche comuni per il ridimensionamento automatico di Monitoraggio di Azure).Refer to the following article to get the name of the metric to fire the alert on: Azure Monitor autoscaling common metrics.

$actionEmail = New-AzureRmAlertRuleEmail -CustomEmail user@contoso.com
$actionWebhook = New-AzureRmAlertRuleWebhook -ServiceUri <uri-of-the-webhook>
$threshold = <value-of-the-threshold>
$rg = <resource-group-name>
$id = <resource-id-to-add-the-alert-to>
$location = <location-of-the-resource>
$alertName = <name-of-the-resource>
$metricName = <metric-to-fire-the-alert-on>
$timeWindow = <time-window-in-hh:mm:ss-format>
$condition = <condition-for-the-threshold> # Other valid values are LessThanOrEqual, GreaterThan, GreaterThanOrEqual
$description = <description-for-the-alert>

Add-AzureRmMetricAlertRule  -Name  $alertName `
                            -Location  $location `
                            -ResourceGroup $rg `
                            -TargetResourceId $id `
                            -MetricName $metricName `
                            -Operator  $condition `
                            -Threshold $threshold `
                            -WindowSize  $timeWindow `
                            -TimeAggregationOperator Average `
                            -Actions $actionEmail, $actionWebhook `
                            -Description $description

Nota

È consigliabile configurare un intervallo di tempo ragionevole per l'avviso per evitare di attivare troppo spesso il ridimensionamento verticale e l'eventuale interruzione del servizio associato.It is recommended to configure a reasonable time window for the alert in order to avoid triggering vertical scaling, and any associated service interruption, too often. Considerare un intervallo minimo di 20-30 minuti.Consider a window of least 20-30 minutes or more. Prendere in considerazione il ridimensionamento orizzontale se è necessario evitare qualsiasi interruzione.Consider horizontal scaling if you need to avoid any interruption.

Per altre informazioni su come creare gli avvisi, vedere gli articoli seguenti:For more information on how to create alerts refer to the following articles:

RiepilogoSummary

Questo articolo ha illustrato semplici esempi di ridimensionamento verticale.This article showed simple vertical scaling examples. Con questi blocchi predefiniti, ovvero account di automazione, runbook, webhook e avvisi, è possibile connettere una vasta gamma di eventi con un set di azioni personalizzato.With these building blocks - Automation account, runbooks, webhooks, alerts - you can connect a rich variety of events with a customized set of actions.