Tutorial: Escalado automático de conjuntos de escalado de máquinas virtuales en Azure mediante Ansible
Importante
Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.7 (o cualquier versión posterior).
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. No hay ningún costo adicional en los conjuntos de escalad y se crean a partir de máquinas virtuales. 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. Con los conjuntos de escalado las capas de administración y automatización sirven para ejecutar y escalar sus aplicaciones. En su lugar, puede crear y administrar manualmente máquinas virtuales individuales. Sin embargo, hay dos ventajas principales por usar los conjuntos de escalado. Se crean en Azure y escalan automáticamente las máquinas virtuales para satisfacer las necesidades de aplicación.
La característica de ajuste automático del número de instancias de máquina virtual se denomina escalabilidad automática. 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. La escalabilidad automática puede configurarse a petición o según una programación definida. Con Ansible, puede especificar las reglas de escalabilidad automática 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
- Escalabilidad automática según una programación periódica
- Escalabilidad automática basada en el rendimiento de la aplicación
- Recuperación de la información de configuración de escalabilidad automática
- Deshabilitación de una configuración de escalabilidad automática
Requisitos previos
- Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Instalación de Ansible: realice una de las siguientes opciones:
- Instalar y configurar Ansible en una máquina virtual Linux
- Configurar Azure Cloud Shell y, si no tiene acceso a una máquina virtual Linux, crear una máquina virtual con Ansible.
- Conjunto de escalado de máquinas virtuales: si aún no tiene un conjunto de escalado, puede configurar uno con Ansible.
Escalado automático según 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 los conjuntos de escalado en una fecha específica o según una programación periódica.
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.
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'
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook vmss-auto-scale.yml
Escalabilidad automática basada en datos de rendimiento
Si aumenta la demanda de la aplicación, la carga de las instancias de máquina virtual de los conjuntos de escalado aumenta. 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. 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. 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. 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.
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.
En función de las métricas de porcentaje de la CPU, el cuaderno de estrategias realiza alguna de las siguientes acciones:
- Escala horizontalmente el número de instancias de máquina virtual a cuatro.
- Reduce horizontalmente 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'
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook vmss-auto-scale-metrics.yml
Obtener información de la configuración de escalabilidad automática
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.
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]
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook vmss-auto-scale-get-settings.yml
Deshabilitación de la configuración de escalabilidad automática
Hay dos maneras de deshabilitar la configuración de escalabilidad automática. Una consiste en cambiar la clave enabled
de true
a false
. La segunda se basa en eliminar la configuración.
El código del cuaderno de estrategias de esta sección elimina la configuración de escalabilidad automática.
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
Ejecute el cuaderno de estrategias mediante ansible-playbook.
vmss-auto-scale-delete-setting.yml