Esercitazione: Ridimensionare automaticamente un set di scalabilità di macchine virtuali con l'interfaccia della riga di comando di Azure

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del ciclo di vita). Prendere in considerazione l'uso e il piano di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

Quando si crea un set di scalabilità, definire il numero di istanze di macchine virtuali da eseguire. È possibile aumentare o ridurre automaticamente il numero di istanze di macchine virtuali in base alle richieste dell'applicazione. La scalabilità automatica consente di adattarsi alle esigenze dei clienti o di rispondere alle prestazioni dell'applicazione durante il ciclo di vita dell'app. In questa esercitazione si apprenderà come:

  • Usare la scalabilità automatica con un set di scalabilità
  • Creare e usare regole di scalabilità automatica
  • Sottoporre a test di stress le istanze di VM e attivare le regole di scalabilità automatica
  • Ridurre automaticamente il numero di istanze con la riduzione delle esigenze

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

  • Per questa esercitazione è necessaria la versione 2.0.32 o successiva dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.

Creare un set di scalabilità

Come prima cosa creare un gruppo di risorse con az group create.

az group create --name myResourceGroup --location eastus

Creare ora un set di scalabilità di macchine virtuali con az vmss create. L'esempio seguente crea un set di scalabilità con un numero di istanze pari a 2 e genera chiavi SSH se non esistono.

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

Definire un profilo di scalabilità automatica

Per abilitare la scalabilità automatica su un set di scalabilità, è innanzitutto necessario definire un profilo di scalabilità automatica. Questo profilo definisce la capacità predefinita, minima e massima del set di scalabilità. Questi limiti consentono di controllare i costi perché le istanze di macchine virtuali non vengono create di continuo. Permettono anche di trovare un equilibrio appropriato tra prestazioni e numero minimo di istanze che rimangono in un evento di riduzione. Creare un profilo di scalabilità automatica con az monitor autoscale create. L'esempio seguente imposta la capacità predefinita e minima di 2 istanze di macchine virtuali e la capacità massima di 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

Creare una regola per aumentare automaticamente il numero di istanze

Se aumenta la richiesta da parte dell'applicazione, aumenta il carico sulle istanze di macchine virtuali nel set di scalabilità. Se il carico aumenta in modo coerente e non momentaneamente, è possibile configurare regole di scalabilità automatica per aumentare il numero di istanze di macchine virtuali nel set di scalabilità. Quando sono state create le istanze di macchine virtuali e sono state distribuite le applicazioni, il set di scalabilità inizia a distribuire loro il traffico tramite il bilanciamento del carico. È possibile controllare le metriche da monitorare, per quanto tempo il carico dell'applicazione deve soddisfare una determinata soglia e il numero di istanze di macchine virtuali da aggiungere al set di scalabilità.

Creare una regola con az monitor autoscale rule create che aumenta il numero di istanze di macchine virtuali in un set di scalabilità quando il carico medio della CPU è maggiore del 70% in un periodo di 5 minuti. Quando la regola viene attivata, il numero di istanze di VM viene incrementato di tre.

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

Creare una regola per ridurre automaticamente il numero di istanze

Nelle ore serali o nel fine settimana è possibile che la richiesta delle applicazioni si riduca. Se il carico diminuisce in modo coerente nel tempo, è possibile configurare regole di scalabilità automatica per diminuire il numero di istanze di macchine virtuali nel set di scalabilità. Questa azione riduce i costi di esecuzione del set di scalabilità poiché si esegue solo il numero di istanze necessarie per soddisfare la richiesta corrente.

Creare quindi un'altra regola con az monitor autoscale rule create che riduca il numero di istanze di macchine virtuali in un set di scalabilità quando il carico medio della CPU è inferiore al 30% per un periodo di 5 minuti. L'esempio seguente definisce la regola per ridurre il numero di istanze di VM di uno.

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

Generare carico della CPU nel set di scalabilità

Per testare le regole di scalabilità automatica, generare una certa quantità di carico della CPU nelle istanze di VM del set di scalabilità. Questo carico della CPU simulato causa l'aumento del numero di istanze di VM in base alla scalabilità automatica. Quando il carico della CPU simulato viene successivamente ridotto, le regole di scalabilità automatica determinano la riduzione del numero di istanze di VM.

Per connettersi a una singola istanza, vedere Esercitazione: Connessione alle istanze del set di scalabilità di macchine virtuali

Una volta effettuato l'accesso, installare l'utilità stress o stress-ng . Avviare 10 ruoli di lavoro di stressche generano carico della CPU. Questi ruoli di lavoro vengono eseguiti per 420 secondi, che costituiscono un intervallo di tempo sufficiente affinché le regole di scalabilità automatica implementino l'azione desiderata.

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

Quando l'output visualizzato da stress è simile a stress: info: [2688] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, premere INVIO per tornare al prompt.

Per verificare che stress generi carico della CPU, esaminare il carico di sistema attivo con l'utilità top:

top

Uscire da top e quindi chiudere la connessione all'istanza di VM. stress continuerà a essere eseguito nell'istanza di VM.

Ctrl-c
exit

Connettersi alla seconda istanza di VM con il numero di porta elencato dal precedente comando az vmss list-instance-connection-info:

ssh azureuser@13.92.224.66 -p 50003

Installare ed eseguire stress o stress-ng, quindi avviare dieci ruoli di lavoro in questa seconda istanza di macchina virtuale.

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

Anche in questo caso, quando l'output visualizzato da stress è simile a stress: info: [2713] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, premere INVIO per tornare al prompt.

Chiudere la connessione alla seconda istanza di VM. stress continuerà a essere eseguito nell'istanza di VM.

exit

Monitorare le regole di scalabilità automatica attive

Per monitorare il numero di istanze di VM nel set di scalabilità, usare watch. Le regole di scalabilità automatica impiegano 5 minuti ad avviare il processo di aumento del numero di istanze in risposta al carico della CPU generato da stress in ognuna delle istanze di macchine virtuali:

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

Al raggiungimento della soglia relativa alla CPU, le regole di scalabilità automatica aumentano il numero di istanze di VM nel set di scalabilità. L'output seguente mostra tre VM create con l'aumento automatico del numero di istanze nel set di scalabilità:

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

All'arresto di stress nelle istanze di VM iniziali, il carico medio della CPU torna alla normalità. Dopo altri 5 minuti, le regole di scalabilità automatica riducono quindi il numero di istanze di VM. Le azioni di riduzione del numero di istanze rimuovono per prime le istanze di VM con gli ID più elevati. Quando un set di scalabilità usa i set di disponibilità o le zone di disponibilità, le azioni di scalabilità vengono distribuite in modo uniforme tra le istanze di macchina virtuale. L'output di esempio seguente mostra l'eliminazione di un'istanza di VM con la riduzione automatica del numero di istanze nel set di scalabilità:

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

Uscire da watch con Ctrl-c. La riduzione del numero di istanze nel set di scalabilità continua ogni 5 minuti con la rimozione di un'istanza di VM fino al raggiungimento del numero minimo di due istanze.

Pulire le risorse

Per rimuovere il set di scalabilità e le risorse aggiuntive, eliminare il gruppo di risorse e tutte le relative risorse con az group delete. Il parametro --no-wait restituisce il controllo al prompt senza attendere il completamento dell'operazione. Il parametro --yes conferma che si desidera eliminare le risorse senza un prompt aggiuntivo a tale scopo.

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

Passaggi successivi

In questa esercitazione si è appreso come ridurre o aumentare in modo automatico un set di scalabilità con l'interfaccia della riga di comando di Azure:

  • Usare la scalabilità automatica con un set di scalabilità
  • Creare e usare regole di scalabilità automatica
  • Sottoporre a test di stress le istanze di VM e attivare le regole di scalabilità automatica
  • Ridurre automaticamente il numero di istanze con la riduzione delle esigenze