Configurare Azure Virtual Machine Scale Set

I Virtual Machine Scale Set sono gruppi di macchine virtuali identiche che vengono esposte in rete attraverso un bilanciatore di carico. Se create le macchine virtuali partendo dalle immagini disponibili nel Marketplace avete la possibilità di scalare, anche in maniera automatica, fino a 1000 (!) macchine virtuali. Se utilizzate invece una vostra immagine il limite di scalabilità è ridotto a 300 istanze.

L’obiettivo è quello di assicurarvi sempre l’alta disponibilità delle vostre applicazioni e la gestione dei carichi di lavoro in maniera completamente automatica, rispondendo in maniera dinamica alle richieste di utilizzo e assicurando il massimo del risparmio e delle performance.

Il bilanciatore di carico permette di non dover intervenire sulla gestione delle VM, facendo in modo che anche durante gli aggiornamenti i vostri utenti non subiscano nessun tipo di disservizio.

La creazione di un Virtual Machine Scale Set è veramente semplice. Partendo da un’immagine del sistema operativo è sufficiente scegliere pochissimi parametri. Un esempio è quello riportato nelle figure sotto. Dal portale di Azure scegliete di creare una nuova risorsa partendo dal marketplace e scrivete Virtual Machine Scale Set.

Nel wizard inserite i parametri indicando il nome del Virtual Machine Scale Set, l’immagine del sistema operativo da distribuire, la location, la username, la password e la dimensione delle VM. I Virtual Machine Scale Set possono utilizzare anche le Availiability Zones, se la location che avete scelto le supporta. Per maggiori info sulle Availability Zones vi rimando alla lettura del mio articolo Aumentare l’alta affidabilità delle VM in Azure utilizzando le Availability Zones

Figura 1: Creazione del Virtual Machine Scale Set

Già durante la creazione è possibile definire le regole di Autoscale, che permetteranno di poter gestire il numero di istanze di VM create in maniera dinamica in base al carico di lavoro o altri parametri da voi scelti, come ad esempio anche i momenti della giornata.

Figura 2: Gestione dell’Autoscaling del Virtual Machine Scale Set

Potete decidere le opzioni di bilanciamento scegliendo tra Application Gateway e Load Balancer e potete scegliere di utilizzare una virtual network già esistente oppure di crearne una dedicata, come mostrato in figura:

Figura 3: Creazione di una VNET da associare alle VM del Virtual Machine Scale Set

Cliccando su Create comincerà la creazione del numero di istanze che avete scelto. Io ho scelto di creare 10 istanze.

Figura 4: Le 10 VM del Virtual Machine Scale Set sono state create in mendo di 10 minuti

Figura 5: Tutte le VM sono in esecuzione

Cliccando su ognuna delle istanze create è possibile visualizzare una Overview ed effettuare poche operazioni, tra cui il Reimage o lo Start/Stop, oltre all’Upgrade che prevede l’installazione di un software o il suo aggiornamento.

Figura 6: Overview di una delle VM dello Scale Set

Insieme al Virtual Machine Scale Set sono state create anche altre risorse (IP pubblico, Network Security Group, VNET). Configurando il Load Balancer avete la possibilità anche di creare delle regole di balancing e Inboud NAT.

Figura 7: Risorse create insieme al Virtual Machine Scale Set

Figura 8: Configurazione delle Inbound NAT rules del Load balancer

Figura 9: Load balancing Rule

Installazione del software all’interno delle VM in un Azure Virtual Machine Scale Set utilizzando PowerShell Desired State Configuration

Se non state utilizzando un’immagine creata da voi, all’interno della quale avete installato il software da far girare nelle VM di Azure, nell’immagine del Marketplace avete solo il sistema operativo. L’installazione di un software, o il suo aggiornamento, è estremamente semplificata in un Virtual Machine Scale Set perché potete utilizzare le Extensions, che eseguono attività di configurazione e automazione post-distribuzione nelle macchine virtuali di Azure.

Supponiamo che ad esempio vogliate installare IIS all’interno di tutte le VM del vostro Scale Set. Per farlo vi basterà utilizzare l’estensione DSC (Desired State Configuration) di Azure. Trovate maggiori notizie su come funziona DSC leggendo gli articoli PowerShell Desired State Configuration e Configurazione di macchine Linux su Azure tramite DSC

Ho creato una semplice configurazione DSC che ho chiamato IISInstall

 

Ho salvato la configurazione con il nome install_iis_vmss.ps1 e ho compresso lo script chiamandolo install_iis_vmss.zip

Cliccando sul Virtual Machine Scale Set ho scelto il nodo Extensions e ho selezionato Add. Ho compilato i campi come mostrato in figura 11

Figura 10: Aggiunta di una nuova VM estension

Figura 11: Aggiunta di una nuova configurazione di DSC (Desired State Configuration)

A questo punto tornando nel nodo Instances noterete che vi verrà segnalato che le macchine virtuali del Virtual Machine Scale Set non sono aggiornate all’ultimo Model. Selezionate le VM che volete aggiornare e scegliete Upgrade

Figura 12: Aggiornamento delle macchine virtuale all’ultimo Model

Figura 13: Conferma dell’aggiornamento delle VM

Da questo momento in poi lo script di DSC (Desired State Configuration) verrà applicato alle singole VM. La durata dell’aggiornamento ovviamente varierà in base alle caratteristiche delle VM (dimensione della VM, utilizzo di dischi SSD) e al software che state installando.

Figura 14: Aggiornamento di tutte le VM del Virtual Machine Scale Set

Figura 15: Le VM completano in pochi minuti l’aggiornamento richiesto

Ho recuperato l’indirizzo IP che era stato dato in fase di creazione al Load Balancer da Overview del Virtual Machine Scale Set e usando un browser ho verificato che IIS fosse stato installato nel VMSS.

Figura 16: IIS è stato installato nel Virtual Machine Scale Set utilizzando DSC

Installazione del software all’interno delle VM in un Azure Virtual Machine Scale Set utilizzando uno script PowerShell

Una diversa modalità di installazione, gestione, configurazione e aggiornamento del software nelle VM dello Scale Set è quella di utilizzare uno script PowerShell. Tra le estensioni disponibili avete infatti la voce Custom Script Extension.

Ci sono diversi script di esempio recuperabili all’indirizzo https://github.com/Azure-Samples/compute-automation-configurations per quanto di voi abbiano voglia di cimentarsi e imparare il loro funzionamento.

Adesso che IIS è stato installato utilizzerò uno script in Powershell per poter modificare la Home Page. Lo script è molto semplice (in realtà è una sola riga :-P):

 

Ho salvato lo script con l’estensione .PS1 e ho utilizzato l’estensione Custom Script Extension come mostrato in figura 17:

Figura 17: Aggiunta di una estensione di Custom Script Extension al Virtual Machine Scale Set

Tornando nel nodo Instances noterete che vi verrà segnalato che le macchine virtuali del Virtual Machine Scale Set non sono aggiornate all’ultimo Model. Selezionate le VM che volete aggiornare e scegliete Upgrade

Figura 18: Aggiornamento delle macchine virtuale all’ultimo Model

Se adesso aggiornate la finestra del browser noterete che la home page restituita da IIS sarà diversa e riporterà il nome dell’host su cui sta girando l’applicazione web. Aggiornando più volte l’applicazione il Load Balancer vi reindirizzerà verso host diversi.

Figura 19: Aggiornamento della VM completato

Figura 20: Il Load balancer mostra host diversi se viene eseguito il refresh della pagina nel browser

Aggiornamento dell’applicazione

Per aggiornare l’applicazione ho modificato lo script che ho creato prima inserendo:

 

Ho salvato lo script con l’estensione .PS1 e ho utilizzato l’estensione Custom Script Extension come mostrato in figura 21:

Figura 21: Aggiunta di uno nuovo script PowerShell per aggiornare l’applicazione

Tornate nel nodo Instances e noterete che le macchine virtuali del Virtual Machine Scale Set non sono aggiornate all’ultimo Model. Selezionate le VM che volete aggiornare e scegliete Upgrade. Attendete il completamento dell’esecuzione dello script e aggiornate il browser per verificare che vi venga mostrata la home page aggiornata

Figura 22: L’applicazione è stata aggiornata correttamente

Ci sarebbe da dire molto altro a proposito delle Extensions, che rappresentano il modo migliore per implementare il metodo DevOps. Vi invito a dare un’occhiata alla pagina Estensioni e funzionalità della macchina virtuale per Windows e alla pagina Estensioni della macchina virtuale e funzionalità per Linux per conoscere casi d’uso ed esempi.

Installazione del software all’interno delle VM in un Azure Virtual Machine Scale Set utilizzando il Continuous Delivery (Preview)

Il Continuous Delivery è un approccio che permette agli sviluppatori di creare software in cicli molto brevi, permettendo di aumentarne la velocità e la frequenza, con l’intento di ridurre i costi, il tempo e i rischi che si corrono ogni volta che si aggiorna un’applicazione.

Ospitando il codice della nostra applicazione in GitHub o in Visual Studio Team Services abbiamo la possibilità di distribuirlo in maniera rapida all’interno del nostro Virtual Machine Scale Set.

Spostatevi nel nodo Continuous Delivery (preview) del Virtual Machine Scale Set e cliccate su Configure. Scegliete il vostro Code Repository e seguite le indicazioni.

Figura 23: Configurazione del Continuous Delivery (preview) del Virtual Machine Scale Set

Autorizzate Azure a poter accedere al vostro Code Repository. Io ho scelto Github

Figura 24: Richiesta di autorizzazione all’accesso a Github

Figura 25: Concessione della richiesta di autorizzazione all’accesso a Github

Scegliete Repository e Branch della vostra applicazione servendovi dei menu a tendina

Figura 26: Scelta dei Repository e Branch dell’applicazione

Confermate l’organizzazione Azure DevOps che volete utilizzare per costruire un’immagine e aggiornare il Virtual Machine Scale Set. Se non ne avete già una la potete creare.

Figura 27: Creazione di Azure DevOps service

A questo punto siete pronti per fare il Deploy del vostro package. Inserite le ultime informazioni richieste e fate click su OK.

Figura 28: Completamento della configurazione di Continuous Delivery

Scalabilità automatica dei Virtual Machine Scale Set

Un Virtual Machine Scale Set può aumentare o diminuire automaticamente il numero di istanze di macchine virtuali che eseguono l’applicazione, permettendo di ridurre il sovraccarico e ottimizzare le prestazioni.  Creando delle regole che vanno a verificare il carico di lavoro è possibile gestore le VM, in risposta all’utilizzo della CPU, alla richiesta di memoria o all’accesso al disco e ottimizzando al massimo sia i costi che l’esperienza utente.

Dal Virtual Machine Scale Set selezionate Scaling e create le regole di Scale condition in base alle metriche (consumo di CPU e disco ad esempio) o anche in base a determinati momenti della giornata (durante il weekend e di notte la vostra applicazione è poco utilizzata). Nella figura sotto viene mostrato con quanta facilità è possibile creare una nuova regola. Quando il carico medio della CPU è superiore al 70% per un periodo di 10 minuti, il numero di istanze di macchine virtuali viene aumentato di una unità, mentre se nel giro di 5 minuti la richiesta diminuisce vengono eliminate man mano le macchine virtuali che sono state aggiunte.

Figura 29: Scale rule per Virtual machine Scale Set

Potete anche decidere il numero di istante minimo e massimo. In assenza di carico di lavoro verranno eliminate tutte le VM “in eccesso”

Figura 30: Esempio di regola di Autoscaling

Figura 31: La regola di Autoscaling ha eliminato tutte le VM in eccesso rispetto al carico di lavoro dell’applicazione

Conclusioni

I Virtual Machine Scale Set garantiscono disponibilità elevata per le applicazioni e consentono di gestire in modo centralizzato, configurare e aggiornare un numero elevato di macchine virtuali. Per fornire ridondanza e migliorare le prestazioni, le applicazioni vengono distribuite tra più istanze e un servizio di bilanciamento del carico permette agli utenti di non accorgersi di nulla sia durante le operazioni di manutenzione sia durante i picchi di carico, grazie anche all’autoscaling. Disponibilità elevata e resilienza delle applicazioni vengono assicurati senza interruzioni.