Condividi tramite


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

Importante

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

I set di scalabilità di macchine virtuali di Azure sono una funzionalità di Azure che consente di configurare un gruppo di macchine virtuali identiche con bilanciamento del carico. Non sono previsti costi aggiuntivi per i set di scalabilità e vengono creati da macchine virtuali. Si paga solo per le risorse di calcolo sottostanti, ad esempio le istanze di macchina virtuale, i servizi di bilanciamento del carico o l'archiviazione su disco gestito. Con i set di scalabilità, i livelli di gestione e automazione vengono forniti per l'esecuzione e la scalabilità delle applicazioni. È invece possibile creare e gestire manualmente singole macchine virtuali. Esistono tuttavia due vantaggi principali per l'uso dei set di scalabilità. Sono integrati in Azure e ridimensionano automaticamente le macchine virtuali per soddisfare le 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 scale set aumentando il numero delle istanze VM

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
  • Network security group che controlla il flusso del traffico di rete all'interno e all'esterno dell'insieme di scalabilità
  • Servizio di bilanciamento del carico che distribuisce il traffico tra un set di macchine virtuali definite usando regole di bilanciamento del carico
  • Set di scalabilità di macchine virtuali che usa tutte le risorse create

Esistono due modi per ottenere il playbook di esempio:

  • Scarica il playbook e salva 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:

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

Eseguire il playbook usando ansible-playbook

ansible-playbook vmss-create.yml

Dopo aver 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 dispone attualmente di due istanze. Per confermare tale valore vengono usati i passaggi seguenti:

  1. Accedi 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 nella parentesi: Standard_DS1_v2 (2 instances)

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

    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 di un set di scalabilità

Il codice del playbook in questa sezione recupera informazioni sul set di scalabilità e ne modifica la capacità da due a tre.

Esistono due modi per ottenere il playbook di esempio:

  • Scarica il playbook e salvalo 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 usando ansible-playbook

ansible-playbook vmss-scale-out.yml

Dopo aver 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 del lavoro tramite il portale di Azure:

  1. Accedi al portale di Azure.

  2. Passare al set di scalabilità configurato.

  3. Viene visualizzato il nome dell'insieme 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 il comando seguente:

    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 ora esistono tre istanze:

    {
      "capacity": 3,
    }
    

Passaggi successivi