Tutorial: Configuración de conjuntos de escalado de máquinas virtuales de Azure con AnsibleTutorial: Configure virtual machine scale sets in Azure using Ansible

Importante

Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.7 (o cualquier versión posterior).Ansible 2.7 (or later) is required to run the sample playbooks in this article.

El conjunto de escalado de máquinas virtuales de Azure es una función de Azure permite crear y administrar un grupo de máquinas virtuales idénticas con equilibrio de carga.Azure virtual machine scale sets is an Azure feature that lets you configure a group of identical, load balanced VMs. No hay ningún costo adicional en los conjuntos de escalad y se crean a partir de máquinas virtuales.There's no additional cost to scale sets and they're built from virtual machines. Solo se paga por los recursos de proceso subyacente como las instancias de máquina virtual, el equilibrador de carga o el almacenamiento de disco administrado.You pay only for the underlying compute resources such as the VM instances, load balancers, or Managed Disk storage. Con los conjuntos de escalado las capas de administración y automatización sirven para ejecutar y escalar sus aplicaciones.With scale sets, the management and automation layers are provided to run and scale your applications. En su lugar, puede crear y administrar manualmente máquinas virtuales individuales.You could instead manually create and manage individual VMs. Sin embargo, hay dos ventajas principales por usar los conjuntos de escalado.However, there are two key benefits to using scale sets. Se crean en Azure y escalan automáticamente las máquinas virtuales para satisfacer las necesidades de aplicación.They're built into Azure and they automatically scale your virtual machines to meet application needs.

En este tutorial, se usa Ansible para:In this tutorial, Ansible is used to:

  • Configuración de los recursos de una máquina virtualConfigure the resources for a VM
  • Configuración de un conjunto de escaladoConfigure a scale set
  • Escalado del conjunto de escalado mediante el aumento de las instancias de máquina virtualScale the scale set by increasing it's VM instances

Requisitos previosPrerequisites

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.

Configuración de un conjunto de escaladoConfigure a scale set

El código del cuaderno de estrategias de esta sección define los siguientes recursos:The playbook code in this section defines the following resources:

  • Grupo de recursos en el que se implementarán todos sus recursos.Resource group into which all of your resources will be deployed.
  • Red virtual en el espacio de direcciones de 10.0.0.0/16Virtual network in the 10.0.0.0/16 address space
  • Subred en la red virtualSubnet within the virtual network
  • Dirección IP pública que permite tener acceso a recursos de InternetPublic IP address that allows you to access resources across the Internet
  • Grupo de seguridad de red que controla el flujo del tráfico de red de entrada y salida del conjunto de escalado.Network security group that controls the flow of network traffic in and out of your scale set
  • Equilibrador de carga que distribuye el tráfico a través de un conjunto de máquinas virtuales definidas usando reglas de equilibrador de carga.Load balancer that distributes traffic across a set of defined VMs using load balancer rules
  • Conjunto de escalado de máquinas virtuales que usa todos los recursos creadosVirtual machine scale set that uses all the created resources

Hay dos formas de obtener el cuaderno de estrategias de ejemplo:There are two ways to get the sample playbook:

- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
    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:
        name: "{{ vmss_lb_name }}"
        location: "{{ location }}"
        resource_group: "{{ resource_group }}"
        public_ip: "{{ vmss_name }}"
        probe_protocol: Tcp
        probe_port: 8080
        probe_interval: 10
        probe_fail_count: 3
        protocol: Tcp
        load_distribution: Default
        frontend_port: 80
        backend_port: 8080
        idle_timeout: 4
        natpool_frontend_port_start: 50000
        natpool_frontend_port_end: 50040
        natpool_backend_port: 22
        natpool_protocol: Tcp

    - name: Create Scale Set
      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_lb_name }}"
        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 ejecutar el cuaderno de estrategias, consulte las notas siguientes:Before running the playbook, see the following notes:

  • En la sección vars, reemplace el marcador de posición {{ admin_password }} por su propia contraseña.In the vars section, replace the {{ admin_password }} placeholder with your own password.

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-create.yml

Tras ejecutar el cuaderno de estrategias, debería ver resultados similares a los siguientes:After running the playbook, you see output similar to the following results:

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

Visualización del número de instancias de máquina virtualView the number of VM instances

El conjunto de escalado configurado actualmente tiene dos instancias.The configured scale set currently has two instances. Los pasos siguientes se usan para confirmar dicho valor:The following steps are used to confirm that value:

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.

  2. Vaya al conjunto de escalado que ha configurado.Navigate to the scale set you configured.

  3. Podrá ver el nombre del conjunto de escalado con el número de instancias entre paréntesis: Standard_DS1_v2 (2 instances)You see the scale set name with the number of instances in parenthesis: Standard_DS1_v2 (2 instances)

  4. También puede comprobar el número de instancias con Azure Cloud Shell mediante la ejecución del siguiente comando:You can also verify the number of instances with the Azure Cloud Shell by running the following command:

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

    Los resultados de la ejecución del comando de la CLI de Azure en Cloud Shell muestran que ahora existen tres instancias:The results of running the Azure CLI command in Cloud Shell show that three instances now exist:

    {
      "capacity": 3,
    }
    

Escalado horizontal de un conjunto de escaladoScale out a scale set

El código del cuaderno de estrategias de esta sección recupera información sobre el conjunto de escalado y cambia su capacidad de dos a tres.The playbook code in this section retrieves information about the scale set and changes its capacity from two to three.

Hay dos formas de obtener el cuaderno de estrategias de ejemplo:There are two ways to get the sample playbook:

  • Descargar el cuaderno de estrategias y guardarlo en vmss-scale-out.yml.Download the playbook and save it to vmss-scale-out.yml.
  • Crear un archivo llamado vmss-scale-out.yml y copiar en él el siguiente contenido:Create a new file named vmss-scale-out.yml and copy into it the following contents:
- hosts: localhost
  vars:
    resource_group: myResourceGroup
    vmss_name: myScaleSet
  tasks: 
    - name: Get scaleset info
      azure_rm_virtualmachine_scaleset_facts:
        resource_group: "{{ resource_group }}"
        name: "{{ vmss_name }}"
        format: curated
      register: output_scaleset

    - name: Dump scaleset info
      debug:
        var: output_scaleset

    - name: Modify scaleset (change the capacity to 3)
      set_fact:
        body: "{{ output_scaleset.ansible_facts.azure_vmss[0] | combine({'capacity': 3}, recursive=True) }}"

    - name: Update something in that scale set
      azure_rm_virtualmachinescaleset: "{{ body }}"

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-scale-out.yml

Tras ejecutar el cuaderno de estrategias, debería ver resultados similares a los siguientes:After running the playbook, you see output similar to the following results:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Get scaleset info] 
ok: [localhost]

TASK [Dump scaleset info] 
ok: [localhost] => {
    "output_scaleset": {
        "ansible_facts": {
            "azure_vmss": [
                {
                    ......
                }
            ]
        },
        "changed": false,
        "failed": false
    }
}

TASK [Modify scaleset (set upgradePolicy to Automatic and capacity to 3)] 
ok: [localhost]

TASK [Update something in that scale set] 
changed: [localhost]

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

Verificación de los resultadosVerify the results

Compruebe los resultados del trabajo mediante Azure Portal:Verify your results of your work via the Azure portal:

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.

  2. Vaya al conjunto de escalado que ha configurado.Navigate to the scale set you configured.

  3. Podrá ver el nombre del conjunto de escalado con el número de instancias entre paréntesis: Standard_DS1_v2 (3 instances)You see the scale set name with the number of instances in parenthesis: Standard_DS1_v2 (3 instances)

  4. También puede comprobar el cambio con Azure Cloud Shell ejecutando el siguiente comando:You can also verify the change with the Azure Cloud Shell by running the following command:

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

    Los resultados de la ejecución del comando de la CLI de Azure en Cloud Shell muestran que ahora existen tres instancias:The results of running the Azure CLI command in Cloud Shell show that three instances now exist:

    {
      "capacity": 3,
    }
    

Pasos siguientesNext steps