Esercitazione: Ridimensionare automaticamente i set di scalabilità di macchine virtuali in Azure con Ansible
Importante
Per eseguire i playbook di esempio contenuti in questo articolo, è necessario usare Ansible 2.7 (o versioni successive).
I set di scalabilità di macchine virtuali di Azure sono una funzionalità di Azure che permette di configurare un gruppo di macchine virtuali con bilanciamento del carico identiche. Non sono previsti costi aggiuntivi per i set di scalabilità, in quanto vengono creati dalle macchine virtuali. Si paga solo per le risorse di calcolo sottostanti, come le istanze di macchina virtuale, il bilanciamento del carico o l'archiviazione su Managed Disks. I set di scalabilità forniscono i livelli di automazione e gestione per eseguire e ridimensionare le applicazioni. È comunque possibile creare e gestire manualmente singole macchine virtuali. Tuttavia, l'uso di set di scalabilità offre due importanti vantaggi. Sono integrati in Azure e ridimensionano automaticamente le macchine virtuale in base alle esigenze dell'applicazione.
La funzionalità per adattare automaticamente il numero di istanze di macchine virtuali è denominata scalabilità automatica. Il vantaggio della scalabilità automatica è che riduce il sovraccarico di gestione per monitorare e ottimizzare le prestazioni dell'applicazione. È possibile configurare la scalabilità automatica in risposta a una richiesta o una pianificazione definita. Con Ansible è possibile specificare le regole di scalabilità automatica che definiscono le prestazioni accettabili per un'esperienza positiva del cliente.
In questo articolo vengono illustrate le operazioni seguenti:
- Definire un profilo di scalabilità automatica
- Ridimensionare automaticamente in base a una pianificazione ricorrente
- Ridimensionare automaticamente in base alle prestazioni delle app
- Recuperare informazioni sulle impostazioni di scalabilità automatica
- Disabilitare un'impostazione di scalabilità automatica
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Installare Ansible: eseguire una delle opzioni seguenti:
- Installare e configurare Ansible in una macchina virtuale Linux
- Configurare Azure Cloud Shell e, se non si ha accesso a una macchina virtuale Linux, creare una macchina virtuale con Ansible.
- Set di scalabilità di macchine virtuali: se non è già disponibile un set di scalabilità, è possibile configurare un set di scalabilità con Ansible.
Ridimensionare automaticamente in base a una pianificazione
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.
Ansible consente di ridimensionare i set di scalabilità in base a una data specifica o a una pianificazione ricorrente.
Il codice del playbook in questa sezione consente di aumentare a tre il numero di istanze delle macchine virtuali alle 10 del mattino di ogni lunedì.
Salvare il playbook seguente come vmss-auto-scale.yml
:
---
- hosts: localhost
vars:
resource_group: myResourceGroup
vmss_name: myScaleSet
name: autoscalesetting
tasks:
- name: Create autoscaling
azure_rm_autoscale:
resource_group: "{{ resource_group }}"
name: "{{ name }}"
target:
namespace: "Microsoft.Compute"
types: "virtualMachineScaleSets"
name: "{{ vmss_name }}"
enabled: true
profiles:
- count: '3'
min_count: '3'
max_count: '3'
name: Auto created scale condition
recurrence_timezone: Pacific Standard Time
recurrence_frequency: Week
recurrence_days:
- Monday
recurrence_mins:
- '0'
recurrence_hours:
- '10'
Eseguire il playbook con ansible-playbook
ansible-playbook vmss-auto-scale.yml
Ridimensionare automaticamente in base ai dati delle prestazioni
Se aumenta la richiesta da parte dell'applicazione, aumenta il carico sulle istanze di macchine virtuali nei 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. Ansible consente di controllare le metriche da monitorare, ad esempio l'utilizzo della CPU, l'utilizzo del disco e il tempo di caricamento delle app. È possibile aumentare e ridurre il numero di istanze nei set di scalabilità in base ai valori soglia per le metriche delle prestazioni, a una pianificazione ricorrente oppure a una data specifica.
Il codice del playbook in questa sezione consente di controllare il carico di lavoro della CPU nei 10 minuti che precedono le 18 di ogni lunedì.
In base alle metriche delle prestazioni della CPU, il playbook esegue una delle azioni seguenti:
- Aumenta a quattro il numero di istanze delle macchine virtuali
- Riduce a uno il numero di istanze delle macchine virtuali
Salvare il playbook seguente come vmss-auto-scale-metrics.yml
:
---
- hosts: localhost
vars:
resource_group: myResourceGroup
vmss_name: myScaleSet
name: autoscalesetting
tasks:
- name: Get facts of the resource group
azure_rm_resourcegroup_facts:
name: "{{ resource_group }}"
register: rg
- name: Get scale set resource uri
set_fact:
vmss_id: "{{ rg.ansible_facts.azure_resourcegroups[0].id }}/providers/Microsoft.Compute/virtualMachineScaleSets/{{ vmss_name }}"
- name: Create autoscaling
azure_rm_autoscale:
resource_group: "{{ resource_group }}"
name: "{{ name }}"
target: "{{ vmss_id }}"
enabled: true
profiles:
- count: '1'
max_count: '1'
min_count: '1'
name: 'This scale condition is executed when none of the other scale condition(s) match'
recurrence_days:
- Monday
recurrence_frequency: Week
recurrence_hours:
- 18
recurrence_mins:
- 0
recurrence_timezone: Pacific Standard Time
- count: '1'
min_count: '1'
max_count: '4'
name: Auto created scale condition
recurrence_days:
- Monday
recurrence_frequency: Week
recurrence_hours:
- 18
recurrence_mins:
- 0
recurrence_timezone: Pacific Standard Time
rules:
- cooldown: 5
direction: Increase
metric_name: Percentage CPU
metric_resource_uri: "{{ vmss_id }}"
operator: GreaterThan
statistic: Average
threshold: 70
time_aggregation: Average
time_grain: 1
time_window: 10
type: ChangeCount
value: '1'
- cooldown: 5
direction: Decrease
metric_name: Percentage CPU
metric_resource_uri: "{{ vmss_id }}"
operator: LessThan
statistic: Average
threshold: 30
time_aggregation: Average
time_grain: 1
time_window: 10
type: ChangeCount
value: '1'
Eseguire il playbook con ansible-playbook
ansible-playbook vmss-auto-scale-metrics.yml
Ottenere informazioni sulle impostazioni di scalabilità automatica
Il codice del playbook in questa sezione usa il modulo azure_rm_autoscale_facts
per recuperare i dettagli dell'impostazione di scalabilità automatica.
Salvare il playbook seguente come vmss-auto-scale-get-settings.yml
:
- hosts: localhost
vars:
resource_group: myResourceGroup
name: autoscalesetting
tasks:
- name: Retrieve autoscale settings information
azure_rm_autoscale_facts:
resource_group: "{{ resource_group }}"
name: "{{ name }}"
register: autoscale_query
- debug:
var: autoscale_query.autoscales[0]
Eseguire il playbook con ansible-playbook
ansible-playbook vmss-auto-scale-get-settings.yml
Disabilitare le impostazioni di scalabilità automatica
È possibile disabilitare le impostazioni di scalabilità automatica in due modi. Un modo consiste nel modificare il valore della chiave enabled
da true
a false
. Il secondo modo consiste nell'eliminare l'impostazione.
Il codice del playbook in questa sezione consente di eliminare l'impostazione di scalabilità automatica.
Salvare il playbook seguente come vmss-auto-scale-delete-setting.yml
:
- hosts: localhost
vars:
resource_group: myResourceGroup
name: autoscalesetting
tasks:
- name: Delete autoscaling
azure_rm_autoscale:
resource_group: "{{ resource_group }}"
name: "{{ name }}"
state: absent
Eseguire il playbook con ansible-playbook
vmss-auto-scale-delete-setting.yml