Esercitazione: Configurare i set di scalabilità di macchine virtuali in Azure con Ansible

Importante

Per eseguire i playbook di esempio contenuti in questo articolo, è necessario Ansible 2.9 (o versione successiva).

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.

In questo articolo vengono illustrate le operazioni seguenti:

  • Configurare le risorse per una macchina virtuale
  • Configurare un set di scalabilità
  • Ridimensionare il set di scalabilità aumentando le relative istanze di macchina virtuale

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Configurare un set di scalabilità

Il codice del playbook in questa sezione definisce le risorse seguenti:

  • Gruppo di risorse in cui verranno distribuite tutte le risorse.
  • Rete virtuale nello spazio indirizzi 10.0.0.0/16
  • Subnet all'interno della rete virtuale
  • Indirizzo IP pubblico che consente di accedere alle risorse in Internet
  • Gruppo di sicurezza di rete che controlla il flusso del traffico di rete in ingresso e in uscita dal set di scalabilità
  • Bilanciamento del carico che distribuisce il traffico in un set di macchine virtuali definite usando regole di bilanciamento del carico
  • Set di scalabilità di macchine virtuali che usa tutte le risorse create

È possibile ottenere il playbook di esempio in due modi:

  • Scaricare il playbook e salvare il file come vmss-create.yml.

  • Creare un file denominato vmss-create.yml. Inserire il codice seguente nel nuovo file:

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myvmscalesetname
    vmss_lb_name: myScaleSetLb
    location: eastus
    admin_username: azureuser
    admin_password: "{{ admin_password }}"

  tasks:
    - name: Create a resource group
      azure_rm_resourcegroup:
        name: "{{ resource_group }}"
        location: "{{ location }}"
    - name: Create virtual network
      azure_rm_virtualnetwork:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        address_prefixes: "10.0.0.0/16"
    - name: Add subnet
      azure_rm_subnet:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        address_prefix: "10.0.1.0/24"
        virtual_network: "{{ vmss_name }}"
    - name: Create public IP address
      azure_rm_publicipaddress:
        resource_group: "{{ resource_group }}"
        allocation_method: Static
        name: "{{ vmss_name }}"
    - name: Create Network Security Group that allows SSH
      azure_rm_securitygroup:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        rules:
          - name: SSH
            protocol: Tcp
            destination_port_range: 22
            access: Allow
            priority: 1001
            direction: Inbound

    - name: Create a load balancer
      azure_rm_loadbalancer:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}lb"
        location: "{{ location }}"
        frontend_ip_configurations:
          - name: "{{ vmss_name }}front-config"
            public_ip_address: "{{ vmss_name }}"
        backend_address_pools:
          - name: "{{ vmss_name }}backend-pool"
        probes:
          - name: "{{ vmss_name }}prob0"
            port: 8080
            interval: 10
            fail_count: 3
        inbound_nat_pools:
          - name: "{{ vmss_name }}nat-pool"
            frontend_ip_configuration_name: "{{ vmss_name }}front-config"
            protocol: Tcp
            frontend_port_range_start: 50000
            frontend_port_range_end: 50040
            backend_port: 22
        load_balancing_rules:
          - name: "{{ vmss_name }}lb-rules"
            frontend_ip_configuration: "{{ vmss_name }}front-config"
            backend_address_pool: "{{ vmss_name }}backend-pool"
            frontend_port: 80
            backend_port: 8080
            load_distribution: Default
            probe: "{{ vmss_name }}prob0"

    - name: Create VMSS
      no_log: true
      azure_rm_virtualmachinescaleset:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        vm_size: Standard_DS1_v2
        admin_username: "{{ admin_username }}"
        admin_password: "{{ admin_password }}"
        ssh_password_enabled: true
        capacity: 2
        virtual_network_name: "{{ vmss_name }}"
        subnet_name: "{{ vmss_name }}"
        upgrade_policy: Manual
        tier: Standard
        managed_disk_type: Standard_LRS
        os_disk_caching: ReadWrite
        image:
          offer: UbuntuServer
          publisher: Canonical
          sku: 16.04-LTS
          version: latest
        load_balancer: "{{ vmss_name }}lb"
        data_disks:
          - lun: 0
            disk_size_gb: 20
            managed_disk_type: Standard_LRS
            caching: ReadOnly
          - lun: 1
            disk_size_gb: 30
            managed_disk_type: Standard_LRS
            caching: ReadOnly

Prima di eseguire il playbook, vedere le note seguenti:

  • Nella sezione vars sostituire il segnaposto {{ admin_password }} con la propria password.

Eseguire il playbook con ansible-playbook

ansible-playbook vmss-create.yml

Dopo avere eseguito il playbook, viene visualizzato un output simile ai risultati seguenti:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Create a resource group] 
changed: [localhost]

TASK [Create virtual network] 
changed: [localhost]

TASK [Add subnet] 
changed: [localhost]

TASK [Create public IP address] 
changed: [localhost]

TASK [Create Network Security Group that allows SSH] 
changed: [localhost]

TASK [Create a load balancer] 
changed: [localhost]

TASK [Create Scale Set] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=8    changed=7    unreachable=0    failed=0

Visualizzare il numero di istanze di macchina virtuale

Il set di scalabilità configurato include attualmente due istanze. Per confermare tale valore, seguire questa procedura:

  1. Accedere al portale di Azure.

  2. Passare al set di scalabilità configurato.

  3. Viene visualizzato il nome del set di scalabilità con il numero di istanze tra parentesi: Standard_DS1_v2 (2 instances)

  4. È anche possibile verificare il numero di istanze con Azure Cloud Shell eseguendo questo comando:

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    I risultati dell'esecuzione del comando dell'interfaccia della riga di comando di Azure in Cloud Shell mostrano che esistono due istanze:

    {
      "capacity": 2,
    }
    

Aumentare il numero di istanze per un set di scalabilità

Il codice del playbook in questa sezione consente di recuperare informazioni sul set di scalabilità e di modificarne la capacità da due a tre.

È possibile ottenere il playbook di esempio in due modi:

  • Scaricare il playbook e salvarlo in vmss-scale-out.yml.

  • Creare un file denominato vmss-scale-out.yml. Inserire il codice seguente nel nuovo file:

---
- hosts: localhost
  gather_facts: false
  
  vars:
    resource_group: myTestRG
    vmss_name: myTestVMSS
  
  tasks:

    - name: Get scaleset info
      azure_rm_virtualmachine_scaleset_facts:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        format: curated
      register: output_scaleset

    - name: set image fact
      set_fact:
        vmss_image: "{{ output_scaleset.vmss[0].image }}"

    - name: Create VMSS
      no_log: true
      azure_rm_virtualmachinescaleset:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        capacity: 3
        image: "{{ vmss_image }}"

Eseguire il playbook con ansible-playbook

ansible-playbook vmss-scale-out.yml

Dopo avere eseguito il playbook, viene visualizzato un output simile ai risultati seguenti:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Get scaleset info] 
ok: [localhost]

TASK [Set image fact] 
ok: [localhost]

TASK [Change VMSS capacity] 
changed: [localhost]

PLAY RECAP 
localhost                  : ok=3    changed=1    unreachable=0    failed=0

Verificare i risultati

Verificare i risultati delle operazioni eseguite tramite il portale di Azure:

  1. Accedere al portale di Azure.

  2. Passare al set di scalabilità configurato.

  3. Viene visualizzato il nome del set di scalabilità con il numero di istanze tra parentesi: Standard_DS1_v2 (3 instances)

  4. È anche possibile verificare la modifica con Azure Cloud Shell eseguendo questo comando:

    az vmss show -n myScaleSet -g myResourceGroup --query '{"capacity":sku.capacity}' 
    

    I risultati dell'esecuzione del comando dell'interfaccia della riga di comando di Azure in Cloud Shell indicano che ora sono disponibili tre istanze:

    {
      "capacity": 3,
    }
    

Passaggi successivi