Tutorial: Escalabilidad automática de los conjuntos de escalado de máquinas virtuales de Azure mediante AnsibleTutorial: Autoscale 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.

La característica de ajuste automático del número de instancias de máquina virtual se denomina escalabilidad automática.The feature of automatically adjusting the number of VM instances is called autoscale. La ventaja de la escalabilidad automática es que reduce la sobrecarga de administración para supervisar y optimizar el rendimiento de la aplicación.The benefit of autoscale is that it reduces the management overhead to monitor and optimize the performance of your application. La escalabilidad automática puede configurarse a petición o según una programación definida.Autoscale can be configured in response to demand or on a defined schedule. Con Ansible, puede especificar las reglas de escalabilidad automática que definen el rendimiento aceptable para una experiencia positiva del cliente.Using Ansible, you can specify the autoscale rules that define the acceptable performance for a positive customer experience.

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

  • Definición de un perfil de escalado automáticoDefine an autoscale profile
  • Escalabilidad automática según una programación periódicaAutoscale based on a recurring schedule
  • Escalabilidad automática basada en el rendimiento de la aplicaciónAutoscale based on app performance
  • Recuperación de la información de configuración de escalabilidad automáticaRetrieve autoscale settings information
  • Deshabilitación de una configuración de escalabilidad automáticaDisable an autoscale setting

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.

Escalado automático según una programaciónAutoscale based on a schedule

Para habilitar el escalado automático en un conjunto de escalado, primero debe definir un perfil de escalado automático.To enable autoscale on a scale set, you first define an autoscale profile. Este perfil define la capacidad predeterminada, mínima y máxima del conjunto de escalado.This profile defines the default, minimum, and maximum scale set capacity. Estos límites le permiten controlar el costo al no crear continuamente instancias de máquina virtual, y equilibrar un rendimiento aceptable con un número mínimo de instancias que permanecen en un evento de reducción horizontal.These limits let you control cost by not continually creating VM instances, and balance acceptable performance with a minimum number of instances that remain in a scale-in event.

Ansible permite escalar los conjuntos de escalado en una fecha específica o según una programación periódica.Ansible allows you to scale your scale sets on a specific date or recurring schedule.

El código del cuaderno de estrategias de esta sección aumenta el número de instancias de máquina virtual a tres a las 10:00 horas todos los lunes.The playbook code in this section increases the number of VM instances to three at 10:00 every Monday.

Guarde el siguiente cuaderno de estrategias como vmss-auto-scale.yml:Save the following playbook as 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'

Ejecute el comando de estrategias con el comando ansible-playbook:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-auto-scale.yml

Escalabilidad automática basada en datos de rendimientoAutoscale based on performance data

Si aumenta la demanda de la aplicación, la carga de las instancias de máquina virtual de los conjuntos de escalado aumenta.If your application demand increases, the load on the VM instances in your scale sets increases. Si este aumento de la carga es continuado, en lugar de ser algo puntual, puede configurar reglas de escalado automático para aumentar el número de instancias de máquina virtual en el conjunto de escalado.If this increased load is consistent, rather than just a brief demand, you can configure autoscale rules to increase the number of VM instances in the scale set. Cuando se crean estas instancias de máquina virtual y se implementan las aplicaciones, el conjunto de escalado empieza a distribuir el tráfico entre ellas mediante el equilibrador de carga.When these VM instances are created and your applications are deployed, the scale set starts to distribute traffic to them through the load balancer. Ansible permite controlar qué métricas supervisar, por ejemplo, el uso de CPU, el uso de disco y el tiempo de carga de la aplicación.Ansible allows you to control what metrics to monitor, such as CPU usage, disk usage, and app-load time. Puede reducir y escalar horizontalmente los conjuntos de escalado en función de los umbrales de las métricas de rendimiento, siguiendo una programación periódica o en una fecha determinada.You can scale in and scale out in scale sets based on performance metric thresholds, by a recurring schedule, or by a particular date.

El código del cuaderno de estrategias de esta sección comprueba la carga de trabajo de la CPU de los 10 minutos anteriores, a las 18:00 horas todos los lunes.The playbook code in this section checks the CPU workload for the previous 10 minutes at 18:00 every Monday.

En función de las métricas de porcentaje de la CPU, el cuaderno de estrategias realiza alguna de las siguientes acciones:Based on the CPU percentage metrics, the playbook does one of the following actions:

  • Escala horizontalmente el número de instancias de máquina virtual a cuatro.Scales out the number of VM instances to four
  • Reduce horizontalmente el número de instancias de máquina virtual a una.Scales in the number of VM instances to one

Guarde el siguiente cuaderno de estrategias como vmss-auto-scale-metrics.yml:Save the following playbook as 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'

Ejecute el comando de estrategias con el comando ansible-playbook:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-auto-scale-metrics.yml

Obtener información de la configuración de escalabilidad automáticaGet autoscale settings information

El código del cuaderno de estrategias de esta sección utiliza el módulo azure_rm_autoscale_facts para recuperar los detalles de la configuración de escalabilidad automática.The playbook code in this section uses the azure_rm_autoscale_facts module to retrieve the details of autoscale setting.

Guarde el siguiente cuaderno de estrategias como vmss-auto-scale-get-settings.yml:Save the following playbook as 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]

Ejecute el comando de estrategias con el comando ansible-playbook:Run the playbook using the ansible-playbook command:

ansible-playbook vmss-auto-scale-get-settings.yml

Deshabilitación de la configuración de escalabilidad automáticaDisable autoscale settings

Hay dos maneras de deshabilitar la configuración de escalabilidad automática.There are two ways to disable autoscale settings. Una consiste en cambiar la clave enabled de true a false.One way is to change the enabled key from true to false. La segunda se basa en eliminar la configuración.The second way is to delete the setting.

El código del cuaderno de estrategias de esta sección elimina la configuración de escalabilidad automática.The playbook code in this section deletes the autoscale setting.

Guarde el siguiente cuaderno de estrategias como vmss-auto-scale-delete-setting.yml:Save the following playbook as 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

Ejecute el comando de estrategias con el comando ansible-playbook:Run the playbook using the ansible-playbook command:

vmss-auto-scale-delete-setting.yml

Pasos siguientesNext steps