Tutorial: Creación y uso de una imagen personalizada para conjuntos de escalado de máquinas virtuales con la CLI de AzureTutorial: Create and use a custom image for virtual machine scale sets with the Azure CLI

Al crear el conjunto de escalado, se especifica la imagen que se usará cuando se implementen las instancias de máquina virtual.When you create a scale set, you specify an image to be used when the VM instances are deployed. Para reducir el número de tareas después de implementar las instancias de máquina virtual, puede usar una imagen de máquina virtual personalizada.To reduce the number of tasks after VM instances are deployed, you can use a custom VM image. Esta imagen de máquina virtual personalizada incluye la instalación o configuración de las aplicaciones necesarias.This custom VM image includes any required application installs or configurations. Las instancias de máquina virtual creadas en el conjunto de escalado usan la imagen de máquina virtual personalizada y están listas para atender el tráfico de la aplicación.Any VM instances created in the scale set use the custom VM image and are ready to serve your application traffic. En este tutorial, aprenderá a:In this tutorial you learn how to:

  • Crear y personalizar una máquina virtualCreate and customize a VM
  • Desaprovisionar y generalizar la máquina virtualDeprovision and generalize the VM
  • Crear una imagen de máquina virtual personalizadaCreate a custom VM image
  • Implementar un conjunto de escalado que usa la imagen de máquina virtual personalizadaDeploy a scale set that uses the custom VM image

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don’t have an Azure subscription, create a free account before you begin.

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. Abra Cloud Shell.Open 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 2.0.29 o versiones posteriores.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.29 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.

Creación y configuración de una máquina virtual de origenCreate and configure a source VM

Nota

Este tutorial le guía por el proceso de creación y uso de una imagen de máquina virtual generalizada.This tutorial walks through the process of creating and using a generalized VM image. No permite crear un conjunto de escalado a partir de una imagen de máquina virtual especializada.It is not supported to create a scale set from a specialized VM image.

En primer lugar, cree un grupo de recursos con az group create y luego cree una máquina virtual con az vm create.First, create a resource group with az group create, then create a VM with az vm create. Esta máquina virtual se usará después como origen para la imagen de máquina virtual personalizada.This VM is then used as the source for a custom VM image. En el ejemplo siguiente, se crea una máquina virtual llamada myVM en el grupo de recursos llamado myResourceGroup:The following example creates a VM named myVM in the resource group named myResourceGroup:

az group create --name myResourceGroup --location eastus

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image ubuntults \
  --admin-username azureuser \
  --generate-ssh-keys

La dirección IP pública de la máquina virtual se muestra en la salida del comando az vm create.The public IP address of your VM is shown in the output of the az vm create command. Conéctese mediante SSH a la dirección IP pública de la máquina virtual, como se indica a continuación:SSH to the public IP address of your VM as follows:

ssh azureuser@<publicIpAddress>

Para personalizar la máquina virtual, vamos a instalar un servidor web básico.To customize your VM, let's install a basic web server. Cuando la instancia de máquina virtual del conjunto de escalado se implemente, tendrá todos los paquetes necesarios para ejecutar una aplicación web.When the VM instance in the scale set would be deployed, it would then have all the required packages to run a web application. Use apt-get para instalar NGINX de la siguiente manera:Use apt-get to install NGINX as follows:

sudo apt-get install -y nginx

El último paso para preparar la máquina virtual para su uso como una imagen personalizada es desaprovisionar la máquina virtual.The final step to prepare your VM for use as a custom image is to deprovision your VM. Este paso elimina de la máquina virtual información específica de la máquina y hace posible implementar muchas máquinas virtuales a partir de una sola imagen.This step removes machine-specific information from the VM and makes it possible to deploy many VMs from a single image. Al desaprovisionar la máquina virtual, el nombre de host se restablece a localhost.localdomain.When the VM is deprovisioned, the host name is reset to localhost.localdomain. También se eliminan las claves de host SSH, las configuraciones de servidor de nombres, la contraseña raíz y las concesiones DHCP almacenadas en caché.SSH host keys, nameserver configurations, root password, and cached DHCP leases are also deleted.

Para desaprovisionar la máquina virtual, use el agente de máquina virtual de Azure (waagent).To deprovision the VM, use the Azure VM agent (waagent). El agente de máquina virtual de Azure se instala en todas las máquinas virtuales y se utiliza para comunicarse con la plataforma Azure.The Azure VM agent is installed on every VM and is used to communicate with the Azure platform. El parámetro -force indica al agente que acepte solicitudes para restablecer la información específica de la máquina.The -force parameter tells the agent to accept prompts to reset the machine-specific information.

sudo waagent -deprovision+user -force

Cierre la conexión SSH a la máquina virtual:Close your SSH connection to the VM:

exit

Crear una imagen de máquina virtual personalizada a partir de la máquina virtual de origenCreate a custom VM image from the source VM

La máquina virtual de origen ahora está personalizada con el servidor web de Nginx instalado.The source VM is now customized with the Nginx web server installed. Vamos a crear la imagen de máquina virtual personalizada para usarla con un conjunto de escalado.Let's create the custom VM image to use with a scale set.

Para crear una imagen, es necesario desasignar la máquina virtual.To create an image, the VM needs to be deallocated. Desasigne la VM con az vm deallocate.Deallocate the VM with az vm deallocate. A continuación, establezca el estado de la máquina virtual como generalizado con az vm generalize para que la plataforma Azure sepa que la máquina virtual está preparada para usarla como imagen personalizada.Then, set the state of the VM as generalized with az vm generalize so that the Azure platform knows the VM is ready for use a custom image. Solo se puede crear una imagen de una máquina virtual generalizada:You can only create an image from a generalized VM:

az vm deallocate --resource-group myResourceGroup --name myVM
az vm generalize --resource-group myResourceGroup --name myVM

La desasignación y generalización de la máquina virtual puede tardar unos minutos.It may take a few minutes to deallocate and generalize the VM.

Ahora cree una imagen de la máquina virtual con az image create.Now, create an image of the VM with az image create. En el ejemplo siguiente se crea una imagen llamada myImage a partir de la máquina virtual:The following example creates an image named myImage from your VM:

az image create \
  --resource-group myResourceGroup \
  --name myImage \
  --source myVM

Creación de un conjunto de escalado a partir de la imagen de máquina virtual personalizadaCreate a scale set from the custom VM image

Cree un conjunto de escalado con az vmss create.Create a scale set with az vmss create. En lugar de una imagen de plataforma, como UbuntuLTS o CentOS, especifique el nombre de la imagen de la máquina virtual personalizada.Instead of a platform image, such as UbuntuLTS or CentOS, specify the name of your custom VM image. En el ejemplo siguiente, se crea un conjunto de escalado denominado myScaleSet que usa la imagen personalizada llamada myImage del paso anterior:The following example creates a scale set named myScaleSet that uses the custom image named myImage from the previous step:

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image myImage \
  --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.

Prueba del conjunto de escaladoTest your scale set

Para permitir que el tráfico llegue al conjunto de escalado y comprobar que el servidor web funciona correctamente, cree una regla del equilibrador de carga con az network lb rule create.To allow traffic to reach your scale set and that verify that the web server works correctly, create a load balancer rule with az network lb rule create. En el ejemplo siguiente, se crea una regla denominada myLoadBalancerRuleWeb que permite tráfico en el puerto TCP 80:The following example creates a rule named myLoadBalancerRuleWeb that allows traffic on TCP port 80:

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

Para ver el conjunto de escalado en acción, obtenga la dirección IP pública del equilibrador de carga con az network public-ip show.To see your scale set in action, get 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 myScaleSetLBPublicIP que se ha creado como parte del conjunto de escalado:The following example gets the IP address for myScaleSetLBPublicIP created as part of the scale set:

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

Escriba la dirección IP pública en un explorador web.Type the public IP address into your web browser. Se muestra la página web predeterminada de NGIN, como en el ejemplo siguiente:The default NGINX web page is displayed, as shown in the following example:

NGINX en ejecución desde la imagen de máquina virtual personalizada

Limpieza de recursosClean up resources

Para quitar el conjunto de escalado y los recursos adicionales, elimine el grupo de recursos y todos sus recursos con az group delete.To remove your scale set and additional resources, delete the resource group and all its resources with 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.The --no-wait parameter returns control to the prompt without waiting for the operation to complete. El parámetro --yes confirma que desea eliminar los recursos sin pedir confirmación adicional.The --yes parameter confirms that you wish to delete the resources without an additional prompt to do so.

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

Pasos siguientesNext steps

En este tutorial, aprendió a crear y utilizar una imagen de máquina virtual personalizada para los conjuntos de escalado con la CLI de Azure:In this tutorial, you learned how to create and use a custom VM image for your scale sets with the Azure CLI:

  • Crear y personalizar una máquina virtualCreate and customize a VM
  • Desaprovisionar y generalizar la máquina virtualDeprovision and generalize the VM
  • Crear una imagen de máquina virtual personalizadaCreate a custom VM image
  • Implementar un conjunto de escalado que usa la imagen de máquina virtual personalizadaDeploy a scale set that uses the custom VM image

Vaya al siguiente tutorial para aprender cómo implementar aplicaciones en el conjunto de escalado.Advance to the next tutorial to learn how to deploy applications to your scale set.