Tutorial: Creación de un conjunto de escalado de máquinas virtuales e implementación de una aplicación de alta disponibilidad en Linux con la CLI de AzureTutorial: Create a virtual machine scale set and deploy a highly available app on Linux with the Azure CLI

El conjunto de escalado de máquinas virtuales le permite implementar y administrar un conjunto de máquinas virtuales de escalado automático idénticas.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. Puede escalar el número de máquinas virtuales del conjunto de escalado manualmente o definir reglas de escalado automático basado en el uso de recursos tales como la CPU, la demanda de memoria o el tráfico de red.You can scale the number of VMs in the scale set manually, or define rules to autoscale based on resource usage such as CPU, memory demand, or network traffic. En este tutorial, implementará un conjunto de escalado de máquinas virtuales en Azure.In this tutorial, you deploy a virtual machine scale set in Azure. Aprenderá a:You learn how to:

  • Usar cloud-init para crear una aplicación para escalarUse cloud-init to create an app to scale
  • Crear un conjunto de escalado de máquinas virtualesCreate a virtual machine scale set
  • Aumentar o disminuir el número de instancias en un conjunto de escaladoIncrease or decrease the number of instances in a scale set
  • Crear reglas de escalado automáticoCreate autoscale rules
  • Ver la información de conexión de las instancias del conjunto de escaladoView connection info for scale set instances
  • Usar discos de datos con conjuntos de escaladoUse data disks in a scale set

Uso de Azure Cloud ShellUse Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell le permite usar bash o PowerShell para trabajar con servicios de Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Para iniciar Azure Cloud Shell:To launch Azure Cloud Shell:

OpciónOption Ejemplo o vínculoExample/Link
Seleccione Probarlo en la esquina superior derecha de un bloque de código.Select Try It in the upper-right corner of a code block. Solo con seleccionar Probar no se copia automáticamente el código en Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Ejemplo de Probarlo para Azure Cloud Shell
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Iniciar Cloud Shell en una nueva ventanaLaunch Cloud Shell in a new window
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Botón Cloud Shell en Azure Portal

Para ejecutar el código de este artículo en Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Inicie Cloud Shell.Launch Cloud Shell.
  2. Seleccione el botón Copiar de un bloque de código para copiar el código.Select the Copy button on a code block to copy the code.
  3. Pegue el código en la sesión de Cloud Shell con Ctrl+Mayús+V en Windows y Linux, o Cmd+Mayús+V en macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Presione ENTRAR para ejecutar el código.Press Enter to run the code.

Si decide instalar y usar la CLI localmente, en este tutorial es preciso que ejecute la CLI de Azure de la versión 2.0.30, u otra posterior.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Ejecute az --version para encontrar la versión.Run az --version to find the version. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.If you need to install or upgrade, see Install Azure CLI.

Introducción al conjunto de escaladoScale Set overview

El conjunto de escalado de máquinas virtuales le permite implementar y administrar un conjunto de máquinas virtuales de escalado automático idénticas.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. Las máquinas virtuales de un conjunto de escalado se distribuyen en dominios lógicos de error y de actualización en uno o más grupos de selección de ubicación.VMs in a scale set are distributed across logic fault and update domains in one or more placement groups. Se trata de grupos de máquinas virtuales configuradas de manera similar, al igual que los conjuntos de disponibilidad.These are groups of similarly configured VMs, similar to availability sets.

Las máquinas virtuales se crean según sea necesario en un conjunto de escalado.VMs are created as needed in a scale set. Defina reglas de escalado automático para controlar cómo y cuándo se agregan o se quitan las máquinas virtuales del conjunto de escalado.You define autoscale rules to control how and when VMs are added or removed from the scale set. Estas reglas se pueden desencadenar en función de métricas como la carga de la CPU, el uso de la memoria o el tráfico de red.These rules can be triggered based on metrics such as CPU load, memory usage, or network traffic.

Los conjuntos de escalado admiten hasta 1000 máquinas virtuales cuando se usa una imagen de la plataforma de Azure.Scale sets support up to 1,000 VMs when you use an Azure platform image. Para las cargas de trabajo con requisitos de personalización de VM o instalación significativos, puede que desee crear una imagen de VM personalizada.For workloads with significant installation or VM customization requirements, you may wish to Create a custom VM image. Puede crear hasta 300 máquinas virtuales en un conjunto de escalado al usar una imagen personalizada.You can create up to 300 VMs in a scale set when using a custom image.

Creación de una aplicación para escalarCreate an app to scale

Para su uso en producción, puede que desee crear una imagen de máquina virtual personalizada que incluya la instalación y configuración de la aplicación.For production use, you may wish to Create a custom VM image that includes your application installed and configured. En este tutorial, vamos a personalizar las máquinas virtuales del primer arranque para ver rápidamente un conjunto de escalado en funcionamiento.For this tutorial, lets customize the VMs on first boot to quickly see a scale set in action.

En un tutorial anterior, aprendió cómo personalizar una máquina virtual Linux en el primer arranque con cloud-init.In a previous tutorial, you learned How to customize a Linux virtual machine on first boot with cloud-init. Pues bien, el mismo archivo de configuración cloud-init puede usarlo para instalar NGINX y ejecutar una aplicación sencilla Node.js "Hello World".You can use the same cloud-init configuration file to install NGINX and run a simple 'Hello World' Node.js app.

En el shell actual, cree un archivo denominado "cloud-init.txt" y pegue la siguiente configuración.In your current shell, create a file named cloud-init.txt and paste the following configuration. Por ejemplo, cree el archivo en Cloud Shell, no en la máquina local.For example, create the file in the Cloud Shell not on your local machine. Escriba sensible-editor cloud-init.txt para crear el archivo y ver una lista de editores disponibles.Enter sensible-editor cloud-init.txt to create the file and see a list of available editors. Asegúrese de que todo el archivo cloud-init se copia correctamente, especialmente la primera línea:Make sure that the whole cloud-init file is copied correctly, especially the first line:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
  - path: /home/azureuser/myapp/index.js
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

Creación de un conjunto de escaladoCreate a scale set

Antes de poder crear un conjunto de escalado, cree un grupo de recursos con az group create.Before you can create a scale set, create a resource group with az group create. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroupScaleSet en la ubicación eastus:The following example creates a resource group named myResourceGroupScaleSet in the eastus location:

az group create --name myResourceGroupScaleSet --location eastus

Ahora, cree un conjunto de escalado de máquinas virtuales con az vmss create.Now create a virtual machine scale set with az vmss create. En el ejemplo siguiente se crea un conjunto de escalado denominado myScaleSet, se usa el archivo cloud-init para personalizar la máquina virtual y se generan claves SSH si estas no existen aún:The following example creates a scale set named myScaleSet, uses the cloud-init file to customize the VM, and generates SSH keys if they do not exist:

az vmss create \
  --resource-group myResourceGroupScaleSet \
  --name myScaleSet \
  --image UbuntuLTS \
  --upgrade-policy-mode automatic \
  --custom-data cloud-init.txt \
  --admin-username azureuser \
  --generate-ssh-keys

Se tardan unos minutos en crear y configurar todos los recursos de conjunto de escalado y máquinas virtuales.It takes a few minutes to create and configure all the scale set resources and VMs. Hay tareas en segundo plano que continúan ejecutándose después de que la CLI de Azure vuelve a abrir el símbolo del sistema.There are background tasks that continue to run after the Azure CLI returns you to the prompt. Es posible que tenga que esperar otros dos minutos antes de poder acceder a la aplicación.It may be another couple of minutes before you can access the app.

Permitir tráfico webAllow web traffic

Se creó automáticamente un equilibrador de carga como parte del conjunto de escalado de máquinas virtuales.A load balancer was created automatically as part of the virtual machine scale set. El equilibrador de carga distribuye el tráfico a través de un conjunto de máquinas virtuales definidas usando reglas de equilibrador de carga.The load balancer distributes traffic across a set of defined VMs using load balancer rules. Puede aprender más información sobre los conceptos y la configuración del equilibrador de carga en el siguiente tutorial, How to load balance virtual machines in Azure (Equilibrio de carga en máquinas virtuales de Azure).You can learn more about load balancer concepts and configuration in the next tutorial, How to load balance virtual machines in Azure.

Para permitir que el tráfico llegue a la aplicación web, cree una regla con az network lb rule create.To allow traffic to reach the web app, create a rule with az network lb rule create. En el ejemplo siguiente, se crea una regla denominada myLoadBalancerRuleWeb:The following example creates a rule named myLoadBalancerRuleWeb:

az network lb rule create \
  --resource-group myResourceGroupScaleSet \
  --name myLoadBalancerRuleWeb \
  --lb-name myScaleSetLB \
  --backend-pool-name myScaleSetLBBEPool \
  --backend-port 80 \
  --frontend-ip-name loadBalancerFrontEnd \
  --frontend-port 80 \
  --protocol tcp

Prueba de la aplicaciónTest your app

Para ver la aplicación de Node.js en la web, obtenga la dirección IP pública del equilibrador de carga con az network public-ip show.To see your Node.js app on the web, obtain the public IP address of your load balancer with az network public-ip show. En el ejemplo siguiente se obtiene la dirección IP de myLoadBalancerRuleWeb que se ha creado como parte del conjunto de escalado:The following example obtains the IP address for myScaleSetLBPublicIP created as part of the scale set:

az network public-ip show \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSetLBPublicIP \
    --query [ipAddress] \
    --output tsv

Escriba la dirección IP pública en un explorador web.Enter the public IP address in to a web browser. Se muestra la aplicación, incluido el nombre de host de la máquina virtual a la que el equilibrador de carga distribuye el tráfico:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to:

Ejecución de la aplicación Node.js

Para ver el conjunto de escalado en funcionamiento, realice una actualización forzada del explorador web para ver cómo el equilibrador de carga distribuye el tráfico entre las máquinas virtuales del conjunto de escalado que ejecutan la aplicación.To see the scale set in action, you can force-refresh your web browser to see the load balancer distribute traffic across all the VMs running your app.

Tareas de administraciónManagement tasks

Durante el ciclo de vida del conjunto de escalado, debe ejecutar una o varias tareas de administración.Throughout the lifecycle of the scale set, you may need to run one or more management tasks. Además, puede crear scripts para automatizar varias tareas de ciclo de vida.Additionally, you may want to create scripts that automate various lifecycle-tasks. La CLI de Azure proporciona una forma rápida de realizar esas tareas.The Azure CLI provides a quick way to do those tasks. A continuación, presentamos algunas tareas comunes.Here are a few common tasks.

Visualización de máquinas virtuales en un conjunto de escaladoView VMs in a scale set

Para ver una lista de las máquinas virtuales en ejecución en el conjunto de escalado, use az vmss list-instances como se indica a continuación:To view a list of VMs running in your scale set, use az vmss list-instances as follows:

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

La salida es similar a la del ejemplo siguiente:The output is similar to the following example:

  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup            VmId
------------  --------------------  ----------  ------------  -------------------  -----------------------  ------------------------------------
           1  True                  eastus      myScaleSet_1  Succeeded            MYRESOURCEGROUPSCALESET  c72ddc34-6c41-4a53-b89e-dd24f27b30ab
           3  True                  eastus      myScaleSet_3  Succeeded            MYRESOURCEGROUPSCALESET  44266022-65c3-49c5-92dd-88ffa64f95da

Aumento o disminución manual de instancias de máquina virtualManually increase or decrease VM instances

Para ver el número de instancias que tiene actualmente en un conjunto de escalado, use az vmss show y realice consultas a sku.capacity:To see the number of instances you currently have in a scale set, use az vmss show and query on sku.capacity:

az vmss show \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --query [sku.capacity] \
    --output table

A continuación, puede aumentar o reducir manualmente el número de máquinas virtuales del conjunto de escalado con az vmss scale.You can then manually increase or decrease the number of virtual machines in the scale set with az vmss scale. En el ejemplo siguiente se establece el número de máquinas virtuales en el conjunto de escalado en 3:The following example sets the number of VMs in your scale set to 3:

az vmss scale \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --new-capacity 3

Obtención de información de conexiónGet connection info

Para obtener información de conexión sobre las máquinas virtuales de los conjuntos de escalado, use az vmss list-instance-connection-info.To obtain connection information about the VMs in your scale sets, use az vmss list-instance-connection-info. Este comando da como resultado la dirección IP pública y los puertos de cada máquina virtual que le permiten conectarse con SSH:This command outputs the public IP address and port for each VM that allows you to connect with SSH:

az vmss list-instance-connection-info \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet

Uso de discos de datos con conjuntos de escaladoUse data disks with scale sets

Puede crear y usar discos de datos con conjuntos de escalado.You can create and use data disks with scale sets. En un tutorial anterior, ha aprendido cómo administrar discos de Azure, donde se describían las prácticas recomendadas y mejoras de rendimiento para la creación de aplicaciones en los discos de datos en lugar de en el disco del SO.In a previous tutorial, you learned how to Manage Azure disks that outlines the best practices and performance improvements for building apps on data disks rather than the OS disk.

Creación de conjunto de escalado con discos de datosCreate scale set with data disks

Para crear un conjunto de escalado y conectar discos de datos, agregue el parámetro --data-disk-sizes-gb al comando az vmss create.To create a scale set and attach data disks, add the --data-disk-sizes-gb parameter to the az vmss create command. En el ejemplo siguiente se crea un conjunto de escalado con discos de datos de 50Gb conectados a cada instancia:The following example creates a scale set with 50Gb data disks attached to each instance:

az vmss create \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSetDisks \
    --image UbuntuLTS \
    --upgrade-policy-mode automatic \
    --custom-data cloud-init.txt \
    --admin-username azureuser \
    --generate-ssh-keys \
    --data-disk-sizes-gb 50

Cuando se quitan las instancias de un conjunto de escalado, también se quitan los discos de datos conectados.When instances are removed from a scale set, any attached data disks are also removed.

Adición de discos de datosAdd data disks

Para agregar un disco de datos a las instancias en el conjunto de escalado, use az vmss disk attach.To add a data disk to instances in your scale set, use az vmss disk attach. En el ejemplo siguiente se agrega un disco de 50 Gb a cada instancia:The following example adds a 50Gb disk to each instance:

az vmss disk attach \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --size-gb 50 \
    --lun 2

Desacoplamiento de discos de datosDetach data disks

Para quitar un disco de datos a las instancias en el conjunto de escalado, use az vmss disk detach.To remove a data disk to instances in your scale set, use az vmss disk detach. En el ejemplo siguiente se quita el disco de datos en el LUN 2 de cada instancia:The following example removes the data disk at LUN 2 from each instance:

az vmss disk detach \
    --resource-group myResourceGroupScaleSet \
    --name myScaleSet \
    --lun 2

Pasos siguientesNext steps

En este tutorial, ha creado un conjunto de escalado de máquinas virtuales.In this tutorial, you created a virtual machine scale set. Ha aprendido a:You learned how to:

  • Usar cloud-init para crear una aplicación para escalarUse cloud-init to create an app to scale
  • Crear un conjunto de escalado de máquinas virtualesCreate a virtual machine scale set
  • Aumentar o disminuir el número de instancias en un conjunto de escaladoIncrease or decrease the number of instances in a scale set
  • Crear reglas de escalado automáticoCreate autoscale rules
  • Ver la información de conexión de las instancias del conjunto de escaladoView connection info for scale set instances
  • Usar discos de datos con conjuntos de escaladoUse data disks in a scale set

Pase al siguiente tutorial para obtener más información sobre el concepto de equilibrio de carga de las máquinas virtuales.Advance to the next tutorial to learn more about load balancing concepts for virtual machines.

Load balance virtual machines (Equilibrio de carga de máquinas virtuales)Load balance virtual machines