Compartir a través de


Tutorial: Escalado automático de conjuntos de escalado de máquinas virtuales en Azure mediante Ansible

Importante

Se requiere Ansible 2.7 (o posterior) para ejecutar los playbooks de ejemplo de este artículo.

Los conjuntos de escalado de máquinas virtuales de Azure son una característica de Azure que permite configurar un grupo de máquinas virtuales idénticas y con equilibrio de carga. No hay ningún costo adicional para los conjuntos de escalado y se compilan a partir de máquinas virtuales. Solo paga por los recursos de proceso subyacentes, como las instancias de máquina virtual, los equilibradores de carga o el almacenamiento de managed Disk. Con los conjuntos de escalado, las capas de administración y automatización están disponibles para ejecutar y escalar tus aplicaciones. En su lugar, podría crear y administrar manualmente máquinas virtuales individuales. Sin embargo, hay dos ventajas clave para usar conjuntos de escalado. Están integrados en Azure y escalan automáticamente las máquinas virtuales para satisfacer las necesidades de la aplicación.

La característica de ajustar automáticamente el número de instancias de máquina virtual se denomina escalado automático. 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. El escalado automático se puede configurar en respuesta a la demanda o a una programación definida. Con Ansible, puede especificar las reglas de escalado automático que definen el rendimiento aceptable para una experiencia positiva del cliente.

En este artículo aprenderá a:

  • Definición de un perfil de escalado automático
  • Escalado automático basado en una programación periódica
  • Escalado automático basado en el rendimiento de la aplicación
  • Recuperación de la información de configuración de escalado automático
  • Deshabilitar una configuración de escalado automático

Prerrequisitos

  • Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.

Escalado automático basado en una programación

Para habilitar el escalado automático en un conjunto de escalado, primero debe definir un perfil de escalado automático. Este perfil define la capacidad predeterminada, mínima y máxima del conjunto de escalado. 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.

Ansible permite escalar tus configuraciones de escalado en una fecha programada o una programación recurrente.

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 cada lunes.

Guarde el siguiente cuaderno de estrategias como 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'

Ejecutar el playbook utilizando ansible-playbook

ansible-playbook vmss-auto-scale.yml

Escalado automático basado en datos de rendimiento

Si aumenta la demanda de la aplicación, aumenta la carga en las instancias de máquina virtual de los conjuntos de escalado. Si este aumento de la carga es coherente, en lugar de solo una breve demanda, puede configurar reglas de escalado automático para aumentar el número de instancias de máquina virtual en el conjunto de escalado. Cuando se crean estas instancias de máquina virtual y se implementan las aplicaciones, el conjunto de escalado comienza a distribuir el tráfico a ellas a través del equilibrador de carga. Ansible permite controlar qué métricas supervisar, como el uso de CPU, el uso del disco y el tiempo de carga de la aplicación. Puede realizar operaciones de "scale in" y "scale out" en conjuntos de escalado basándose en umbrales de métricas de rendimiento, mediante una programación recurrente o en una fecha específica.

El código del cuaderno de estrategias de esta sección comprueba la carga de trabajo de CPU durante los 10 minutos anteriores a las 18:00 cada lunes.

En función de las métricas de porcentaje de CPU, el cuaderno de estrategias realiza una de las siguientes acciones:

  • Amplía el número de instancias de máquina virtual a cuatro
  • Escala el número de instancias de máquina virtual a una

Guarde el siguiente cuaderno de estrategias como 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'

Ejecutar el playbook utilizando ansible-playbook

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

Obtención de información de ajustes de escalabilidad automática

El código del cuaderno de estrategias de esta sección usa el azure_rm_autoscale_facts módulo para recuperar los detalles de la configuración de escalado automático.

Guarde el siguiente cuaderno de estrategias como 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]

Ejecutar el playbook utilizando ansible-playbook

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

Deshabilitación de la configuración de escalado automático

Hay dos maneras de deshabilitar la configuración de escalabilidad automática. Una manera es cambiar la enabled clave de true a false. La segunda forma es eliminar la configuración.

El código del cuaderno de estrategias de esta sección elimina la configuración de escalado automático.

Guarde el siguiente cuaderno de estrategias como 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

Ejecutar el playbook mediante ansible-playbook

vmss-auto-scale-delete-setting.yml

Pasos siguientes