Tutorial: Configurar conjuntos de dimensionamento de máquina virtual no Azure usando o Ansible

Importante

O Ansible 2.9 (ou posterior) é necessário para executar os guias estratégicos de exemplo deste artigo.

Os conjuntos de dimensionamento de máquinas virtuais do Azure são um recurso do Azure que permite configurar um grupo de VMs idênticas e com balanceamento de carga. Não há nenhum custo adicional para os conjuntos de dimensionamento e eles são criados usando máquinas virtuais. Você paga apenas pelos recursos de computação subjacentes, como as instâncias de VM, os balanceadores de carga ou o armazenamento do Managed Disks. Com conjuntos de dimensionamento, as camadas de automação e gerenciamento são fornecidas para executar e dimensionar seus aplicativos. Em vez disso, você poderia criar e gerenciar VMs individuais manualmente. No entanto, há dois benefícios principais ao usar conjuntos de dimensionamento. Eles são criados no Azure e eles dimensionam automaticamente suas máquinas virtuais para atender às necessidades do aplicativo.

Neste artigo, você aprenderá como:

  • Configurar os recursos para uma VM
  • Configurar um conjunto de dimensionamento
  • Dimensionar o conjunto de dimensionamento aumentando as instâncias da VM

Pré-requisitos

  • Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.

Configurar um conjunto de dimensionamento

O código do guia estratégico nesta seção define os seguintes recursos:

  • Um grupo de recursos no qual todos os recursos serão implantados
  • Uma rede virtual no espaço de endereço 10.0.0.0/16
  • Uma sub-rede dentro da rede virtual
  • Um endereço IP público que permite acessar recursos pela Internet
  • Um grupo de segurança de rede que controla o fluxo de entrada e saída de tráfego de rede do conjunto de dimensionamento
  • Um balanceador de carga, que distribui o tráfego entre um conjunto de VMs definidas usando regras do balanceador de carga
  • Um conjunto de dimensionamento de máquinas virtuais que usa todos os recursos criados

Há duas maneiras de obter o guia estratégico de exemplo:

  • Baixe o guia estratégico e salve o arquivo como vmss-create.yml.

  • Crie um arquivo chamado vmss-create.yml. Insira o seguinte código no novo arquivo:

- 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

Antes de executar o guia estratégico, confira as observações a seguir:

  • Na seção vars, substitua o espaço reservado {{ admin_password }} pela sua própria senha.

Executar o guia estratégico usando ansible-playbook

ansible-playbook vmss-create.yml

Depois de executar o guia estratégico, você verá resultados semelhantes aos seguintes:

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

Exibir o número de instâncias de VM

O conjunto de dimensionamento configurado atualmente possui duas instâncias. As etapas a seguir são usadas para confirmar esse valor:

  1. Entre no portal do Azure.

  2. Navegue até o conjunto de dimensionamento que você configurou.

  3. Você verá o nome do conjunto de dimensionamento com o número de instâncias entre parênteses: Standard_DS1_v2 (2 instances)

  4. Você também pode verificar o número de instâncias com o Azure Cloud Shell executando o seguinte comando:

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

    Os resultados da execução do comando da CLI do Azure no Cloud Shell mostram que existem duas instâncias:

    {
      "capacity": 2,
    }
    

Escalar horizonralmente um conjunto de dimensionamento

O código do guia estratégico nesta seção recupera informações sobre o conjunto de dimensionamento e altera sua capacidade de dois para três.

Há duas maneiras de obter o guia estratégico de exemplo:

  • Baixe o guia estratégico e salve-o em vmss-scale-out.yml.

  • Crie um arquivo chamado vmss-scale-out.yml. Insira o seguinte código no novo arquivo:

---
- 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 }}"

Executar o guia estratégico usando ansible-playbook

ansible-playbook vmss-scale-out.yml

Depois de executar o guia estratégico, você verá resultados semelhantes aos seguintes:

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

Verifique os resultados

Verifique os resultados do seu trabalho por meio do portal do Azure:

  1. Entre no portal do Azure.

  2. Navegue até o conjunto de dimensionamento que você configurou.

  3. Você verá o nome do conjunto de dimensionamento com o número de instâncias entre parênteses: Standard_DS1_v2 (3 instances)

  4. Você também pode verificar a alteração com o Azure Cloud Shell executando o seguinte comando:

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

    Os resultados da execução do comando da CLI do Azure no Cloud Shell mostram que agora existem três instâncias:

    {
      "capacity": 3,
    }
    

Próximas etapas