Tutorial: Escalado automático de un conjunto de escalado de máquinas virtuales con la CLI de Azure

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para obtener más información, consulte la Guía de final de la vida útil de CentOS.

Al crear un conjunto de escalado, puede definir el número de instancias de máquina virtual que quiere ejecutar. A medida que cambia la demanda de las aplicaciones, puede aumentar o reducir automáticamente el número de estas instancias. La posibilidad de realizar el escalado automático le permite satisfacer la demanda del cliente o responder a los cambios de rendimiento de la aplicación a lo largo del ciclo de vida de esta. En este tutorial, aprenderá a:

  • Usar el escalado automático con un conjunto de escalado
  • Crear y usar reglas de escalado automático
  • Realizar pruebas de esfuerzo de instancias de máquina virtual y desencadenar reglas de escalado automático
  • Reducir el escalado automáticamente cuando se reduzca la demanda

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Requisitos previos

  • Este tutorial requiere la versión 2.0.32 de la CLI de Azure, o cualquier versión posterior. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.

Creación de un conjunto de escalado

Cree un grupo de recursos con az group create.

az group create --name myResourceGroup --location eastus

Ahora, cree un conjunto de escalado de máquinas virtuales con az vmss create. En el ejemplo siguiente se crea un conjunto de escalado con 2 instancias y se generan claves SSH, si aún no existen.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image <SKU image> \
  --orchestration-mode Flexible \
  --instance-count 2 \
  --admin-username azureuser \
  --generate-ssh-keys

Definición de un perfil de escalado automático

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. Cree un perfil de escalado automático con az monitor autoscale create. En el ejemplo siguiente se establece la capacidad predeterminada y la mínima para 2 instancias de máquina virtual y un máximo de 10:

az monitor autoscale create \
  --resource-group myResourceGroup \
  --resource myScaleSet \
  --resource-type Microsoft.Compute/virtualMachineScaleSets \
  --name autoscale \
  --min-count 2 \
  --max-count 10 \
  --count 2

Creación de una regla de escalado automático horizontal

Si aumenta la demanda de la aplicación, la carga de las instancias de máquina virtual del conjunto 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. Puede controlar qué métricas se deben supervisar, cuánto tiempo debe cumplir la carga de la aplicación un límite determinado y cuántas instancias de máquina virtual se deben agregar al conjunto de escalado.

Cree una regla con az monitor autoscale rule create que aumenta el número de instancias de máquina virtual de un conjunto de escalado cuando la carga media de la CPU es superior al 70 % durante un período de más de 5 minutos. Cuando se desencadena la regla, aumenta el número de instancias de máquina virtual en tres.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU > 70 avg 5m" \
  --scale out 3

Creación de una regla de escalado automático horizontal de reducción

La demanda de la aplicación puede reducirse por las tardes o durante los fines de semana. Si esta reducción es constante a lo largo de un período, puede configurar reglas de escalado automático para reducir el número de instancias de máquina virtual del conjunto de escalado. Esta acción de reducción horizontal permite rebajar el costo de ejecutar el conjunto de escalado ya que solo se ejecuta el número de instancias necesario para satisfacer la demanda actual.

Cree otra regla con az monitor autoscale rule create que reduzca el número de instancias de máquina virtual de un conjunto de escalado cuando la carga media de la CPU descienda por debajo del 30 % durante un período de más de 5 minutos. En el ejemplo siguiente se define la regla para reducir horizontalmente el número de instancias de máquina virtual en una unidad.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU < 30 avg 5m" \
  --scale in 1

Generación de carga de CPU en el conjunto de escalado

Para probar las reglas de escalado automático, genere cargas de CPU en las instancias de máquina virtual del conjunto de escalado. Esta carga de CPU simulada hace que el escalado automático escale y reduzca horizontalmente el número de instancias de máquina virtual. Como la carga simulada de la CPU se reduce, las reglas de escalado automático reducen horizontalmente el número de instancias de máquina virtual.

Para conectarse a una instancia individual, consulte Tutorial: Conexión a instancias del conjunto de escalado de máquinas virtuales.

Una vez iniciada la sesión, instale la utilidad stress o stress-ng. Inicie 10 trabajos de stress que generen carga de CPU. Estos trabajos se ejecutan durante 420 segundos, lo suficiente para que las reglas de escalado automático implementen la acción deseada.

sudo apt-get update
sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

Cuando stress muestra una salida similar a stress: info: [2688] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, presione la tecla Entrar para volver al símbolo del sistema.

Para confirmar que stress genera carga de CPU, examine la carga del sistema activa con la utilidad top:

top

Salga de la utilidad top y cierre la conexión a la instancia de máquina virtual. Stress continuará ejecutándose en la instancia de máquina virtual.

Ctrl-c
exit

Conéctese a la segunda instancia de máquina virtual con el número de puerto de la lista az vmss list-instance-connection-info anterior:

ssh azureuser@13.92.224.66 -p 50003

Instale y ejecute stress o stress-ng y, a continuación, inicie diez trabajadores en esta segunda instancia de máquina virtual.

sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

De nuevo, cuando stress muestra una salida similar a stress: info: [2713] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, presione la tecla Entrar para volver al símbolo del sistema.

Cierre la conexión a esta instancia de máquina virtual. Stress continuará ejecutándose en la instancia de máquina virtual.

exit

Supervisión de las reglas de escalado automático activas

Para supervisar el número de instancias de máquina virtual del conjunto de escalado, use la utilidad watch. Las reglas de escalado automático tardan 5 minutos en empezar el proceso de escalado horizontal en respuesta a la carga de CPU generada por stress en cada instancia de máquina virtual:

watch az vmss list-instances \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --output table

Cuando se alcanza el umbral de la CPU, las reglas de escalado automático aumentan el número de instancias de máquina virtual en el conjunto de escalado. La siguiente salida muestra tres máquinas virtuales que se crean durante el escalado horizontal automático:

Every 2.0s: az vmss list-instances --resource-group myResourceGroup --name myScaleSet --output table

  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup    VmId
------------  --------------------  ----------  ------------  -------------------  ---------------  ------------------------------------
           1  True                  eastus      myScaleSet_1  Succeeded            myResourceGroup  4f92f350-2b68-464f-8a01-e5e590557955
           2  True                  eastus      myScaleSet_2  Succeeded            myResourceGroup  d734cd3d-fb38-4302-817c-cfe35655d48e
           4  True                  eastus      myScaleSet_4  Creating             myResourceGroup  061b4c90-0d73-49fc-a066-19eab0b3d95c
           5  True                  eastus      myScaleSet_5  Creating             myResourceGroup  4beff8b9-4e65-40cb-9652-43899309da27
           6  True                  eastus      myScaleSet_6  Creating             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

Cuando se detiene stress en las instancias de máquina virtual iniciales, la carga media de CPU vuelve al estado normal. Después de otros 5 minutos, las reglas de escalado automático reducen horizontalmente el número de instancias de máquina virtual. Con las acciones de reducción horizontal se eliminan instancias de máquina virtual en orden, empezando por los identificadores mayores. Cuando un conjunto de escalado usa conjuntos de disponibilidad o zonas de disponibilidad, las acciones de reducción horizontal se distribuyen por igual entre esas instancias de máquina virtual. En la salida de ejemplo siguiente se muestra la eliminación de una instancia de máquina virtual con la reducción horizontal del conjunto de escalado:

6  True                  eastus      myScaleSet_6  Deleting             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

Salga de la utilidad watch con Ctrl-c. El conjunto de escalado continúa la reducción horizontal cada 5 minutos y quita una instancia de máquina virtual hasta que se alcanza el mínimo de dos instancias.

Limpieza de recursos

Para quitar el conjunto de escalado y los recursos adicionales, elimine el grupo de recursos y todos sus recursos con az group delete. El parámetro --no-wait devuelve el control a la petición de confirmación sin esperar a que finalice la operación. El parámetro --yes confirma que desea eliminar los recursos sin pedir confirmación adicional.

az group delete --name myResourceGroup --yes --no-wait

Pasos siguientes

En este tutorial, ha aprendido a escalar y reducir horizontalmente un conjunto de escalado de forma automática con la CLI de Azure:

  • Usar el escalado automático con un conjunto de escalado
  • Crear y usar reglas de escalado automático
  • Realizar pruebas de esfuerzo de instancias de máquina virtual y desencadenar reglas de escalado automático
  • Reducir el escalado automáticamente cuando se reduzca la demanda