Agentes de conjunto de escalado de máquinas virtuales de Azure

Azure DevOps Services

Los agentes de conjunto de escalado de máquinas virtuales de Azure, de ahora en adelante llamados agentes de conjunto de escalado, son una forma de agentes autohospedados que se pueden escalar automáticamente para satisfacer sus demandas. Esta elasticidad reduce la necesidad de ejecutar agentes dedicados de forma continua. A diferencia de los agentes hospedados por Microsoft, el tamaño y la imagen de las máquinas en las que se ejecutan los agentes tienen flexibilidad.

Si desea usar agentes hospedados de Microsoft, pero se encuentra limitado debido a lo que ofrecen, podría considerar la utilización de los agentes de conjunto de escalado. Estos son algunos ejemplos:

  • Necesita más memoria, más procesadores, más almacenamiento o más E/S que los que los agentes hospedados de Microsoft nativos ofrecen.
  • Necesitas una máquina virtual de tipo NCv2 con conjuntos de instrucciones concretos para el aprendizaje automático.
  • Debes realizar la implementación en una plataforma Azure App Service privada en una red virtual privada sin conectividad entrante.
  • Debe abrir el firewall corporativo para direcciones IP específicas para que los agentes hospedados de Microsoft puedan comunicarse con los servidores.
  • Debe restringir la conectividad de red de las máquinas de los agentes y permitirles acceder únicamente a sitios aprobados.
  • No es posible obtener agentes suficientes de Microsoft para satisfacer tus necesidades.
  • Tus trabajos superan el tiempo de espera del agente hospedado de Microsoft.
  • No puede crear particiones en trabajos paralelos hospedados en Microsoft para convertirlos en proyectos individuales o equipos en la organización.
  • Te recomendamos ejecutar varios trabajos consecutivos en un agente para aprovechar las ventajas de las cachés incrementales de paquetes de nivel de equipo y de origen.
  • Quiere ejecutar configuraciones adicionales o un calentamiento de la memoria caché antes de que un agente comience a aceptar trabajos.

Si desea usar agentes autohospedados, pero prefiere simplificar su administración, considere la posibilidad de emplear agentes de conjunto de escalado. Estos son algunos ejemplos:

  • Te recomendamos no ejecutar agentes dedicados de manera constante. Te recomendamos desaprovisionar las máquinas del agente que no se estén usando para ejecutar trabajos.
  • Si ejecutas un código que no es de confianza en la canalización, deberás volver a crear imágenes de las máquinas del agente tras cada trabajo.
  • Quiere simplificar la actualización periódica de la imagen base para los agentes.

Nota:

  • No se pueden ejecutar agentes de Mac mediante conjuntos de escalado. Solo puede ejecutar agentes de Windows o Linux de esta manera.

  • El uso de grupos de agentes de VMSS para Azure DevOps Services solo es compatible con la nube pública de Azure (servicio global). Actualmente, los grupos de agentes de VMSS no admiten ninguna otra oferta de nube nacional.

  • No debe asociar un VMSS a varios grupos.

Creación del conjunto de escalado

Para preparar la creación de agentes de conjunto de escalado, primero debe crear un conjunto de escalado de máquinas virtuales en Azure Portal. Debe crear el conjunto de escalado de máquinas virtuales de una manera determinada para que Azure Pipelines pueda administrarlo. En particular, debe deshabilitar el escalado automático para que Azure Pipelines pueda determinar cómo realizar el escalado en función del número de trabajos de canalización entrantes. Se recomienda usar los pasos siguientes para crear el conjunto de escalado.

En el ejemplo siguiente, se crean un nuevo grupo de recursos y un conjunto de escalado de máquinas virtuales con Azure Cloud Shell mediante la imagen de máquina virtual UbuntuLTS.

Nota:

En este ejemplo, se usa la imagen de máquina virtual UbuntuLTS para el conjunto de escalado. Si necesita una imagen de máquina virtual personalizada como base para el agente, cree la imagen personalizada antes de crear el conjunto de escalado siguiendo los pasos descritos en Creación de un conjunto de escalado con imagen, software o tamaño de disco personalizados.

  1. Vaya a Azure Cloud Shell en https://shell.azure.com/.

  2. Ejecute el siguiente comando para comprobar la suscripción predeterminada de Azure.

    az account list -o table
    

    Si la suscripción deseada no aparece como predeterminada, seleccione la suscripción deseada.

    az account set -s <your subscription ID>
    
  3. Cree un grupo de recursos para el conjunto de escalado de máquinas virtuales.

    az group create \
    --location westus \
    --name vmssagents
    
  4. Cree un conjunto de escalado de máquinas virtuales en el grupo de recursos. En este ejemplo, se especifica la imagen de VM Ubuntu2204.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image Ubuntu2204 \
    --vm-sku Standard_D2_v4 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --generate-ssh-keys \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer "" \
    --orchestration-mode Uniform
    

    Nota:

    Azure Pipelines no admite el sobreaprovisionamiento del conjunto de escalado ni el escalado automático. Asegúrese de que ambas características estén deshabilitadas para el conjunto de escalado.

    Dado que Azure Pipelines administra el conjunto de escalado, se requieren o recomiendan las siguientes opciones:

    • --disable-overprovision: requerido
    • --upgrade-policy-mode manual: requerido
    • --load-balancer "": Azure Pipelines no requiere un equilibrador de carga para enrutar los trabajos a los agentes del grupo de agentes de conjunto de escalado, pero la configuración de un equilibrador de carga es una manera de obtener una dirección IP para los agentes de conjunto de escalado que puede usar para las reglas de firewall. Otra opción para obtener una dirección IP para los agentes de conjunto de escalado es crear el conjunto de escalado mediante las opciones --public-ip-address. Para obtener más información sobre cómo configurar el conjunto de escalado con un equilibrador de carga o una dirección IP pública, consulte la documentación de Virtual Machine Scale Sets y az vmss create.
    • --instance-count 2: esta configuración no es obligatoria, pero le ofrece la oportunidad de comprobar que el conjunto de escalado es totalmente funcional antes de crear un grupo de agentes. La creación de las dos máquinas virtuales puede tardar varios minutos. Más adelante, al crear el grupo de agentes, Azure Pipelines elimina estas dos máquinas virtuales y crea otras nuevas.

    Importante

    Si ejecuta este script mediante la CLI de Azure en Windows, debe incluir el "" de --load-balancer "" entre comillas simples como esta: --load-balancer '""'

    Si el tamaño de la máquina virtual admite discos de sistema operativo efímeros, los parámetros siguientes para habilitar discos del sistema operativo efímeros son opcionales, pero se recomiendan para mejorar los tiempos de creación de nueva imagen de la máquina virtual.

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    Importante

    Los discos del sistema operativo efímeros no se admiten en todos los tamaños de máquina virtual. Para obtener una lista de los tamaños de máquina virtual admitidos, consulte Discos de sistema operativo efímeros para máquinas virtuales de Azure.

    Seleccione cualquier imagen de Linux o Windows (ya sea de Azure Marketplace o su propia imagen personalizada) para crear el conjunto de escalado. No instale previamente el agente de Azure Pipelines en la imagen. Azure Pipelines instala automáticamente el agente a medida que aprovisiona nuevas máquinas virtuales. En el ejemplo anterior, hemos usado una imagen UbuntuLTS básica. Para obtener instrucciones sobre cómo crear y usar una imagen personalizada, consulte Preguntas más frecuentes.

    Seleccione cualquier SKU de máquina virtual y SKU de almacenamiento.

    Nota:

    Las consideraciones de licencias limitan la distribución de imágenes hospedadas por Microsoft. No podemos proporcionar estas imágenes para que las use en los agentes del conjunto de escalado. Sin embargo, los scripts que usamos para generar estas imágenes son de código abierto. Puede usar estos scripts y crear sus propias imágenes personalizadas.

  5. Después de crear el conjunto de escalado, vaya al conjunto de escalado en Azure Portal y compruebe la siguiente configuración:

    • Directiva de actualización: manual

      Verify upgrade policy.

      También puede comprobar esta configuración ejecutando el siguiente comando de la CLI de Azure.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • Escalado: escalado manual

      Verify manual scale policy.

Importante

Azure Pipelines no admite la protección de instancias. Asegúrese de que tiene deshabilitadas las protecciones de instancias reducir horizontalmente y acciones de conjunto de escalado.

Modos de orquestación

Los conjuntos de escalado de máquinas virtuales de Azure se pueden configurar con dos modos de orquestación: Uniforme y Flexible. La compatibilidad de Azure Pipelines con el modo de orquestación Uniforme está disponible con carácter general para todos los clientes.

El modo de orquestación Flexible permite a Azure Pipelines poner en cola varias operaciones de conjunto de escalado en paralelo. La compatibilidad de Azure Pipelines con orquestación Flexible está disponible a solicitud y está sujeta a evaluación. Los patrones de uso de los clientes deben indicar una ventaja significativa. Estos clientes tienen grandes conjuntos de escalado, no reutilizan agentes para varios trabajos, ejecutan varios trabajos de corta duración en paralelo y usan exclusivamente discos de SO efímeros en sus máquinas virtuales. Si desea usar esta característica, póngase en contacto con nuestro equipo de soporte técnico.

Creación del grupo de agentes del conjunto de escalado

  1. Vaya a Configuración del proyecto en Azure DevOps, seleccione Grupos de agentes en Canalizaciones y seleccione Agregar grupo para crear un nuevo grupo de agentes.

    Create agent pool.

    Importante

    Puede crear el grupo de conjunto de escalado en Configuración del proyecto o Configuración de la organización, pero al eliminar un grupo de conjunto de escalado, debe eliminarlo desde Configuración de la organización y no desde Configuración del proyecto.

  2. Seleccione Conjunto de escalado de máquinas virtuales de Azure para el tipo de grupo. Seleccione la suscripción de Azure que contiene el conjunto de escalado, elija Autorizar y elija el conjunto de escalado de máquinas virtuales deseado de esa suscripción. Si tiene una conexión de servicio existente, puede elegirla en la lista en lugar de la suscripción.

    Importante

    • Para configurar un grupo de agentes de conjunto de escalado, debe tener permisos de Propietario o Administrador de acceso de usuario en la suscripción seleccionada. Si tiene uno de estos permisos pero recibe un error al seleccionar Autorizar, consulte la solución de problemas.

    • La única conexión de servicio admitida actualmente es una conexión de servicio de Azure Resource Manager (ARM) basada en una clave de entidad de servicio. Se producirá un error en las conexiones de servicio de ARM basadas en una credencial de certificado o en una identidad administrada. Al intentar enumerar los conjuntos de escalado existentes en la suscripción, verá un error similar al siguiente:

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. Seleccione el conjunto de escalado de máquinas virtuales deseado de esa suscripción.

  4. Especifique un nombre para el grupo de agentes.

  5. Configure las siguientes opciones:

    • Anular automáticamente las máquinas virtuales después de cada uso: se usa una nueva instancia de máquina virtual para cada trabajo. La máquina virtual para a sin conexión después de ejecutar un trabajo y se vuelve a crear una imagen antes de recoger otro trabajo.
    • Guarde un agente incorrecto para la investigación: indica si se deben guardar máquinas virtuales de agente incorrectas para solucionar problemas en lugar de eliminarlas.
    • Número máximo de máquinas virtuales del conjunto de escalado: Azure Pipelines escalará horizontalmente de forma automática el número de agentes, pero no superará este límite.
    • Número de agentes que se mantendrán en suspensión: Azure Pipelines reducirá automáticamente el número de agentes, pero se asegurará de que siempre haya esta cantidad de agentes disponibles para ejecutar nuevos trabajos. Si establece Número de agentes que se mantendrán en suspensión en 0, por ejemplo, para conservar el costo de un bajo volumen de trabajos, Azure Pipelines iniciará una máquina virtual solo cuando tenga un trabajo.
    • Retraso en minutos antes de eliminar los agentes inactivos en exceso: para tener en cuenta la variabilidad de la carga de compilación durante todo el día, Azure Pipelines esperará la duración especificada antes de eliminar un agente inactivo en exceso.
    • Configurar las máquinas virtuales para ejecutar pruebas interactivas (solo sistema operativo Windows Server): los agentes para Windows se pueden configurar para ejecutarse sin permisos elevados con el inicio de sesión automático y con la interfaz de usuario interactiva, o bien se pueden configurar para ejecutarse con permisos elevados. Active esta casilla para ejecutar sin permisos elevados con la interfaz de usuario interactiva. En cualquier caso, el usuario del agente es miembro del grupo Administradores.
  6. Cuando estén configuradas las opciones, seleccione Crear para crear el grupo de agentes.

Uso del grupo de agentes de conjunto de escalado

El uso de un grupo de agentes de conjunto de escalado es similar a cualquier otro grupo de agentes. Puede usarlo en canalizaciones clásicas de compilación, versión o YAML. Los permisos de usuario, los permisos de canalización, las aprobaciones y otras comprobaciones funcionan de la misma manera que en cualquier otro grupo de agentes. Para obtener más información, consulte Grupos de agentes.

Importante

Se debe tener cuidado al realizar cambios directamente en el conjunto de escalado en Azure Portal.

  • No debe cambiar muchas de las opciones de configuración del conjunto de escalado en Azure Portal. Azure Pipelines actualiza la configuración del conjunto de escalado. Cualquier cambio manual que realice en el conjunto de escalado puede interferir con el funcionamiento de Azure Pipelines.
  • No podrás cambiar el nombre ni eliminar un conjunto de escalado sin eliminar primero el grupo del conjunto de escalado en Azure Pipelines.

Cómo Administra Azure Pipelines el conjunto de escalado

Una vez creado el grupo de agentes del conjunto de escalado, Azure Pipelines escala automáticamente las máquinas del agente.

Azure Pipelines muestrea el estado de los agentes del grupo y las máquinas virtuales del conjunto de escalado cada 5 minutos. La decisión de escalar o reducir horizontalmente se basa en el número de agentes inactivos en ese momento. Un agente se considera inactivo si está en línea y no ejecuta un trabajo de canalización. Azure Pipelines realiza una operación de escalado horizontal si se cumple alguna de las condiciones siguientes:

  • El número de agentes inactivos está por debajo del número de agentes en espera que especifique.
  • No hay agentes inactivos para los trabajos de canalización que esperan en la cola.

Si se cumple una de estas condiciones, Azure Pipelines aumenta el número de máquinas virtuales. El escalado horizontal se realiza en incrementos de un determinado porcentaje del tamaño máximo del grupo. Espere 20 minutos para que las máquinas se creen para cada paso.

Azure Pipelines reduce horizontalmente los agentes cuando el número de agentes inactivos supera el recuento de agentes en espera durante más de 30 minutos (configurable mediante la opción Retraso en minutos antes de eliminar los agentes inactivos en exceso).

Para reunir todo esto en un ejemplo, considere un grupo de agentes de conjunto de escalado configurado con dos agentes en espera y cuatro agentes como máximo. Supongamos que desea anular la máquina virtual después de cada uso. Además, supongamos que no hay máquinas virtuales con las que empezar en el conjunto de escalado.

  • Dado que el número de agentes inactivos es 0 y dado que el número de agentes inactivos está por debajo del número de agentes en espera de 2, Azure Pipelines escala horizontalmente y agrega dos máquinas virtuales al conjunto de escalado. Una vez que estos agentes estén en línea, habrá dos agentes inactivos.

  • Supongamos que llega un trabajo de canalización y se asigna a uno de los agentes.

  • En este momento, el número de agentes inactivos es 1 y es menor que el número de agentes en espera de 2. Por lo tanto, Azure Pipelines escala horizontalmente y agrega 2 máquinas virtuales más (el tamaño del incremento usado en este ejemplo). En este momento, el grupo tiene tres agentes inactivos y un agente ocupado.

  • Supongamos que se completa el trabajo del primer agente. Azure Pipelines desconecta ese agente para volver a crear la imagen de esa máquina. Después de unos minutos, vuelve con una imagen nueva. En este momento, tendremos cuatro agentes inactivos.

  • Si no llega ningún otro trabajo en 30 minutos (configurable mediante la opción Retraso en minutos antes de eliminar los agentes inactivos en exceso), Azure Pipelines determina que hay más agentes inactivos de los necesarios. Por lo tanto, reduce el grupo a dos agentes.

A lo largo de esta operación, el objetivo de Azure Pipelines es alcanzar el número deseado de agentes inactivos en espera. Los grupos se escalan de manera horizontal y se reducen lentamente. A lo largo del día, el grupo se escalará horizontalmente a medida que las solicitudes se pongan en la cola por la mañana y se reducirá horizontalmente a medida que la carga disminuya por la noche. Puede que observe más agentes inactivos de los que desea en varias ocasiones, lo que es algo esperado, ya que Azure Pipelines converge gradualmente con las restricciones que especifique.

Nota:

Azure Pipelines puede tardar una hora o más en escalar horizontalmente o reducir horizontalmente las máquinas virtuales. Azure Pipelines escalará horizontalmente en pasos, supervisará las operaciones en busca de errores y reaccionará mediante la eliminación de las máquinas inutilizables y la creación de nuevas en el transcurso del tiempo. Esta operación correctiva puede tardar más de una hora.

Para lograr la máxima estabilidad, las operaciones del conjunto de escalado se realizan secuencialmente. Por ejemplo, si el grupo necesita escalar horizontalmente y también hay máquinas incorrectas que eliminar, Azure Pipelines escalará primero el grupo. Una vez que el grupo se haya escalado horizontalmente para alcanzar el número deseado de agentes inactivos en espera, se eliminarán las máquinas incorrectas, en función de la opción Guarde un agente incorrecto para la investigación. Para obtener más información, consulte Agentes en estado incorrecto.

Debido al tamaño de muestreo de 5 minutos, es posible que todos los agentes puedan ejecutar canalizaciones durante un breve período de tiempo y no se produzca ningún escalado horizontal.

Personalización de la configuración del agente de canalización

Puede personalizar la configuración del agente de Azure Pipelines mediante la definición de variables de entorno en la imagen personalizada del sistema operativo del conjunto de escalado. Por ejemplo, el directorio de trabajo del agente de conjunto de escalado tiene como valor predeterminado C:\a para Windows y /agent/_work para Linux. Si desea cambiar el directorio de trabajo, establezca una variable de entorno denominada VSTS_AGENT_INPUT_WORK con el directorio de trabajo deseado. Puede encontrar más información en la documentación Configuración desatendida del agente de Pipelines. Estos son algunos ejemplos:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Importante

Se debe tener precaución al personalizar el agente de Pipelines. Algunas configuraciones entran en conflicto con otras opciones de configuración necesarias, lo que hace que el agente no se registre y se elimine la máquina virtual. Estas opciones configuración no se deben establecer ni modificar:

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ... y cualquier cosa relacionada con los grupos de implementación.

Personalización del inicio de la máquina virtual mediante la extensión de script personalizado

Es posible que los usuarios quieran ejecutar scripts de inicio en las máquinas del agente de conjunto de escalado antes de que esas máquinas empiecen a ejecutar trabajos de canalización. Algunos casos de uso comunes para los scripts de inicio incluyen la instalación de software, el calentamiento de las memorias caché o la captura de repositorios. Puede ejecutar scripts de inicio instalando la extensión de script personalizado para Windows o la extensión de script personalizado para Linux.

Esta extensión se ejecutará en todas las máquinas virtuales del conjunto de escalado inmediatamente después de crearla o de volver a crear la imagen. La extensión de script personalizado se ejecutará antes de ejecutar la extensión del agente de Azure Pipelines.

Este es un ejemplo sobre cómo crear una extensión de script personalizado para Linux.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Este es un ejemplo sobre cómo crear una extensión de script personalizado para Windows.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

Importante

Los scripts ejecutados en la extensión de script personalizado deben devolver el código de salida 0 para que la máquina virtual finalice el proceso de creación de la máquina virtual. Si la extensión de script personalizada produce una excepción o devuelve un código de salida distinto de cero, la extensión de Azure Pipelines no se ejecutará y la máquina virtual no se registrará en el grupo de agentes de Azure DevOps.

Es posible que la extensión se ejecute antes de que se aprovisionen todos los recursos de la máquina virtual, en cuyo caso verá un error similar a "error al instalar los requisitos previos básicos". Para corregirlo, agregue un comando sleep al principio del script, por ejemplo, sleep 30.

Ciclo de vida de un agente de conjunto de escalado

Este es el flujo de operaciones de un agente de conjunto de escalado de máquinas virtuales de Azure Pipelines.

  1. El trabajo de ajuste de tamaño del grupo de agentes de conjunto de escalado de Azure DevOps determina que el grupo tiene demasiados pocos agentes inactivos y se debe escalar horizontalmente. Azure Pipelines realiza una llamada a los conjuntos de escalado de Azure para aumentar la capacidad del conjunto de escalado.

  2. El conjunto de escalado de Azure comienza a crear las nuevas máquinas virtuales. Una vez que las máquinas virtuales están en ejecución, los conjuntos de escalado de Azure ejecutan secuencialmente las extensiones de máquina virtual instaladas.

  3. Si se instala la extensión de script personalizado, se ejecuta antes de la extensión del agente de Azure Pipelines. Si la extensión de script personalizado devuelve un código de salida distinto de cero, se anula el proceso de creación de la máquina virtual y se elimina.

  4. Se ejecuta la extensión del agente de Azure Pipelines. Esta extensión descarga la versión más reciente del agente de Azure Pipelines junto con la versión más reciente del script de configuración. Los scripts de configuración se pueden encontrar en direcciones URL con los siguientes formatos:

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.sh, por ejemplo, versión 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1, por ejemplo, versión 17
  5. El script de configuración crea un usuario local llamado AzDevOps si el sistema operativo es Windows Server o Linux. Para el sistema operativo cliente Windows 10, el agente se ejecuta como LocalSystem. A continuación, el script descomprime, instala y configura el agente de Azure Pipelines. Como parte de la configuración, el agente se registra con el grupo de agentes de Azure DevOps y aparece en la lista del grupo de agentes en estado Sin conexión.

  6. En la mayoría de los escenarios, el script de configuración inicia inmediatamente el agente para que se ejecute como el usuario local AzDevOps. El agente se pone en línea y está listo para ejecutar trabajos de canalización.

    Si el grupo está configurado para la interfaz de usuario interactiva, la máquina virtual se reinicia después de configurar el agente. Después del reinicio, el usuario local inicia sesión automáticamente y se inicia el agente de canalizaciones. A continuación, el agente se pone en línea y está listo para ejecutar trabajos de canalización.

Creación de un conjunto de escalado con imagen, software o tamaño de disco personalizados

Si solo quiere crear un conjunto de escalado con el disco de sistema operativo predeterminado de 128 GB mediante una imagen de Azure disponible públicamente, vaya directamente al paso 10 y use el nombre de la imagen pública (UbuntuLTS, Win2019DataCenter, etc.) para crear el conjunto de escalado. De lo contrario, siga estos pasos para personalizar la imagen de máquina virtual.

  1. Cree una máquina virtual con la imagen de sistema operativo deseada y, opcionalmente, expanda el tamaño del disco del sistema operativo de 128 GB a <myDiskSizeGb>.

    • Si empieza con una imagen de Azure disponible, por ejemplo <myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • Si empieza con un VHD generalizado:

      1. En primer lugar, cree la máquina virtual con un disco no administrado del tamaño deseado y, a continuación, conviértalo en un disco administrado:

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. Apagar la máquina virtual

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. Desasignación de la máquina virtual

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. Conversión en un disco administrado

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. Reinicie la máquina virtual

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. Conéctese mediante Escritorio remoto (o SSH) a la dirección IP pública de la máquina virtual para personalizar la imagen. Es posible que tenga que abrir puertos en el firewall para desbloquear los puertos RDP (3389) o SSH (22).

    1. Windows: si <MyDiskSizeGb> es mayor que 128 GB, amplíe el tamaño del disco del sistema operativo para rellenar el tamaño del disco especificado por <MyDiskSizeGb>.

      Abra la herramienta DiskPart como administrador y ejecute estos comandos de DiskPart:

      1. list volume (para ver los volúmenes)
      2. select volume 2 (en función del volumen que sea la unidad del sistema operativo)
      3. extend size 72000 (para ampliar la unidad en 72 GB, de 128 GB a 200 GB)
  3. Instale cualquier software adicional deseado en la máquina virtual.

  4. Para personalizar los permisos del usuario del agente de canalización, puede crear un usuario llamado AzDevOps y conceder a ese usuario los permisos que necesita. El script de inicio del agente de conjunto de escalado creará este usuario si aún no existe.

  5. Reinicie la máquina virtual al terminar con las personalizaciones.

  6. Generalice la máquina virtual.

    • Windows: desde una ventana de la consola de administración:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Importante

    Espere a que la máquina virtual finalice la generalización y el apagado. No continúe hasta que la máquina virtual se haya detenido. Espere 60 minutos.

  7. Desasignación de la máquina virtual

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. Marque la máquina virtual como generalizada.

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. Cree una imagen de máquina virtual basada en la imagen generalizada. Al realizar estos pasos para actualizar una imagen de conjunto de escalado existente, anote la dirección URL del identificador de imagen de la salida.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. Cree el conjunto de escalado basado en la imagen de máquina virtual personalizada.

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. Compruebe que ambas máquinas virtuales creadas en el conjunto de escalado estén en línea, que tengan nombres diferentes y que alcancen el estado Correcto.

Ya está listo para crear un grupo de agentes mediante este conjunto de escalado.

Actualización de un conjunto de escalado existente con una nueva imagen personalizada

Para actualizar la imagen en un conjunto de escalado existente, siga los pasos descritos en la anterior sección Creación de un conjunto de escalado con imágenes, software o tamaño de disco personalizados hasta el paso az image create para generar la imagen personalizada del sistema operativo. Anote la dirección URL de la propiedad ID que se genera desde el comando az image create. A continuación, actualice el conjunto de escalado con la nueva imagen como se muestra en el ejemplo siguiente. Una vez actualizada la imagen del conjunto de escalado, todas las máquinas virtuales futuras del conjunto de escalado se crearán con la nueva imagen.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

Sistemas operativos compatibles

Actualmente, los agentes de conjunto de escalado admiten Ubuntu Linux, Windows Server/DataCenter 2016/2019 y el cliente Windows 10.

Problemas conocidos

  • No se admiten distribuciones de Debian o RedHat Linux. Solo se admite Ubuntu.
  • El cliente Windows 10 no admite la ejecución del agente de canalización como usuario local y, por lo tanto, el agente no puede interactuar con la interfaz de usuario. El agente se ejecutará como servicio local en su lugar.

Solución de problemas

Vaya a Configuración del proyecto en Azure DevOps, seleccione Grupos de agentes en Canalizaciones y seleccione el grupo de agentes. Seleccione la pestaña con la etiqueta Diagnósticos.

En la pestaña Diagnóstico, se muestran todas las acciones ejecutadas por Azure DevOps para crear, eliminar o volver a crear la imagen de las máquinas virtuales en el conjunto de escalado de Azure. Los diagnósticos también registran los errores detectados al intentar realizar estas acciones. Revise los errores para asegurarse de que el conjunto de escalado tenga suficientes recursos para escalar horizontalmente. Si la suscripción de Azure ha alcanzado el límite de recursos en máquinas virtuales, núcleos de CPU, discos o direcciones IP, esos errores se mostrarán aquí.

Agentes en estado incorrecto

Cuando los agentes o las máquinas virtuales no se inician, no se pueden conectar a Azure DevOps o se desconectan de manera inesperada, Azure DevOps registra los errores en la pestaña Diagnósticos del grupo de agentes e intenta eliminar la máquina virtual asociada. La configuración de redes, la personalización de imágenes y los reinicios pendientes pueden causar estos problemas. La conexión a la máquina virtual para depurar y recopilar registros puede ayudar con la investigación.

Si desea que Azure DevOps guarde una máquina virtual de agente en estado incorrecto para su investigación y no la elimine automáticamente cuando detecte el estado incorrecto, vaya a Configuración del proyecto en Azure DevOps, seleccione Grupos de agentes en Canalizaciones y seleccione el grupo de agentes. Elija Configuración, seleccione la opción Guarde un agente incorrecto para la investigación y seleccione Guardar.

Save unhealthy agent setting.

Ahora, cuando se detecta un agente incorrecto en el conjunto de escalado, Azure DevOps guarda ese agente y la máquina virtual asociada. El agente guardado estará visible en la pestaña Diagnósticos de la interfaz de usuario del grupo de agentes. Vaya a Configuración del proyecto en Azure DevOps, seleccione Grupos de agentes en Canalizaciones, seleccione el grupo de agentes, elija Diagnósticos y anote el nombre del agente.

Saved agents card.

Busque la máquina virtual asociada en el conjunto de escalado de máquinas virtuales de Azure mediante Azure Portal, en la lista Instancias.

Azure portal Virtual Machine Scale Set instances.

Seleccione la instancia, elija Conectar y realice la investigación.

Connect to virtual machine instance.

Para eliminar el agente guardado cuando haya terminado con la investigación, vaya a Configuración del proyecto en Azure DevOps, seleccione Grupos de agentes en Canalizaciones y seleccione el grupo de agentes. Seleccione la pestaña con la etiqueta Diagnósticos. Busque el agente en la tarjeta Agentes guardados para la investigación y seleccione Eliminar. Esto quita el agente del grupo y elimina la máquina virtual asociada.

Saved agents card delete button.

Preguntas más frecuentes

¿Dónde puedo encontrar las imágenes usadas para los agentes hospedados por Microsoft?

Las consideraciones de licencias limitan la distribución de imágenes hospedadas por Microsoft. No podemos proporcionar estas imágenes para que las use en los agentes del conjunto de escalado. Sin embargo, los scripts que usamos para generar estas imágenes son de código abierto. Puede usar estos scripts y crear sus propias imágenes personalizadas.

¿Cómo puedo configurar agentes de conjunto de escalado para ejecutar pruebas de UI?

Cree un conjunto de escalado con un sistema operativo Windows Server y, al crear el grupo de agentes, seleccione la opción "Configurar las máquinas virtuales para ejecutar pruebas interactivas".

¿Cómo puedo eliminar agentes?

Vaya a Configuración del proyecto en Azure DevOps, seleccione Grupos de agentes en Canalizaciones y seleccione el grupo de agentes. Seleccione la pestaña etiquetada como Agentes. Haga clic en el botón de alternancia "Habilitado" para deshabilitar el agente. El agente deshabilitado completará la canalización que se está ejecutando actualmente y no recogerá trabajo adicional. En unos minutos después de completar su trabajo de canalización actual, se eliminará el agente.

¿Puedo configurar el grupo de agentes de conjunto de escalado para que tenga cero agentes en espera?

Si establece Número de agentes que se mantendrán en suspensión en cero, por ejemplo, para conservar el costo de un bajo volumen de trabajos, Azure Pipelines iniciará una máquina virtual solo cuando tenga un trabajo.

¿Cuánto cuestan los agentes del conjunto de escalado?

Los precios de los agentes de conjunto de escalado son similares a los de otros agentes autohospedados. El cliente proporciona la infraestructura para ejecutar el software del agente y los trabajos y paga por el número deseado de trabajos que se pueden ejecutar simultáneamente mediante la compra de trabajos en paralelo.

Para los agentes de conjunto de escalado, la infraestructura para ejecutar el software del agente y los trabajos es Azure Virtual Machine Scale Sets y los precios se describen en Precios de Virtual Machine Scale Sets.

Para obtener más información sobre cómo comprar trabajos paralelos, consulta: Configuración y pago de trabajos paralelos.

¿Cuáles son algunos problemas comunes y sus soluciones?

Se observan más agentes inactivos que los deseados en varias ocasiones.

Para comprender mejor por qué ocurre esto, consulta: Administración del conjunto de escalado por parte de Azure Pipelines. A lo largo de la operación de escalado, el objetivo de Azure Pipelines es alcanzar el número deseado de agentes inactivos en espera. Los grupos se escalan de manera horizontal y se reducen lentamente. Durante un día, el grupo se escalará horizontalmente a medida que las solicitudes se pongan en la cola por la mañana y se reducirán horizontalmente a medida que la carga disminuya por la noche. Este es el comportamiento que se espera que tenga a medida que Azure Pipelines converge gradualmente con las restricciones que le hayas especificado.

El escalado vertical del VMSS no se produce en el intervalo de cinco minutos esperado.

El trabajo de escalado se ejecuta cada cinco minutos, pero solamente si se procesa una única operación. Es posible que el escalado vertical no se ejecute en menos de cinco minutos. Por diseño, se ha programado de esta manera.

Con frecuencia, el conjunto de escalado de máquinas virtuales Linux de Azure DevOps no es capaz de iniciar la canalización.

Lo primero que se debe hacer al experimentar problemas con los agentes del conjunto de escalado es dirigirse a la pestaña Diagnósticos del grupo de agentes.

Además, te recomendamos guardar la máquina virtual incorrecta para así depurarla más adelante. Para más información, consulta: Agentes incorrectos.

Los agentes guardados se mantienen a menos que los elimine. Si el agente no se conecta en 10 minutos, se marcará como incorrecto y se guardará, si es posible. Solo se conservará una máquina virtual en estado guardada. Si el agente se desconecta inesperadamente (debido a un reinicio de la máquina virtual o a un problema relativo a la imagen), no se guarda para investigación.

Solo se guardan las máquinas virtuales para las que no se inician los agentes. Si una máquina virtual tiene un estado de error durante la creación, no se guarda. En este caso, el mensaje de la pestaña Diagnósticos es "eliminar máquina en estado incorrecto", en lugar de "no se ha podido iniciar".

Ha activado la opción para anular automáticamente las máquinas virtuales después de cada uso para el grupo de agentes, pero se observa que no se vuelve a crear la imagen de las máquinas virtuales como debería y se seleccionan nuevos trabajos a medida que se ponen en cola.

La opción que permite desmontar la máquina virtual después de cada compilación solo funcionará en Windows Server y con imágenes de Linux compatibles. No es compatible con imágenes del cliente de Windows.

El conjunto de escalado de máquinas virtuales muestra el agente como sin conexión si se reinicia la máquina virtual.

El comportamiento esperado es mostrar los agentes como sin conexión si se reinicia la máquina virtual. El servicio del agente se ejecuta únicamente en el contexto de systemd. Sin embargo, si la máquina se reinicia por el motivo que sea, se la considerará una máquina virtual incorrecta y se eliminará. Para más información, consulta: Agentes incorrectos.

Cuando los agentes o las máquinas virtuales no se inician, no se pueden conectar a Azure DevOps o se desconectan de manera inesperada, Azure DevOps registra los errores en la pestaña Diagnósticos del grupo de agentes e intenta eliminar la máquina virtual asociada. La configuración de redes, la personalización de imágenes y los reinicios pendientes pueden causar estos problemas. Para evitar que ocurran, deshabilita la actualización de software en la imagen. También puedes conectarte a la máquina virtual para depurar y recopilar registros con los que se facilitará la investigación del problema.

Aparecen varias etiquetas, como _AzureDevOpsElasticPoolTimeStamp, para el VMSS en Cost Management.

Cuando se crea el grupo, se agrega una etiqueta al conjunto de escalado para marcarlo como en uso (y así evitar que dos grupos usen el mismo conjunto de escalado) y otra para la marca de tiempo, que se actualiza cada vez que se ejecuta el trabajo de configuración (cada dos horas).

No se puede crear un nuevo grupo de agentes de conjunto de escalado y aparece un mensaje de error que indica que ya existe un grupo con el mismo nombre.

Es posible que reciba un mensaje de error como This virtual machine scale set is already in use by pool <pool name> porque la etiqueta todavía existe en el conjunto de escalado incluso después de la eliminación. Cuando se elimina un grupo de agentes, se intenta eliminar también la etiqueta del conjunto de escalado. Sin embargo, esta es una funcionalidad limitada, con la que el trabajo se dará por finalizado después de tres intentos. Además, puede haber un máximo de un intervalo de dos horas, en el que un conjunto de escalado de máquinas virtuales sin uso por parte de ningún grupo de agentes no se puede asignar a uno nuevo. La solución para este problema es, o bien esperar a que finalice dicho intervalo de tiempo, o bien eliminar manualmente la etiqueta del conjunto de escalado de Azure Portal. Al visualizar el conjunto de escalado en Azure Portal, selecciona el vínculo Etiquetas de la izquierda y elimina la etiqueta llamada _AzureDevOpsElasticPool.

El trabajo de mantenimiento del conjunto de escalado de máquinas virtuales no se ejecuta en los agentes ni obtiene registros.

El trabajo de mantenimiento se ejecuta una vez cada 24 horas. Es probable que las máquinas virtuales se rellenen antes de que finalice este periodo de tiempo. Considera la posibilidad de aumentar el tamaño del disco en la máquina virtual y agregar un script en la canalización para eliminar el contenido.

Si se especifica que AzDevOps es el administrador principal en el script del conjunto de escalado de máquinas virtuales, pueden aparecer problemas con las configuraciones del agente en las instancias del conjunto de escalado.

Si especifica AzDevOps como administrador principal en el script del conjunto de escalado de máquinas virtuales, puede observar problemas con las configuraciones del agente en las instancias del conjunto de escalado (la contraseña del usuario se cambia si ya existe).

Este problema se produce porque los scripts de extensión del agente intentan crear el usuario AzDevOps y cambiar su contraseña.

Nota:

No hay problema en crear el usuario y concederle permisos adicionales, pero no debe ser el administrador principal y no se debe depender de la contraseña, ya que la contraseña se cambiará. Para evitar el problema, seleccione otro usuario como administrador principal al crear el conjunto de escalado, en lugar de AzDevOps.

Se produce un error en la instalación de la extensión del agente en las instancias del conjunto de escalado debido a las configuraciones de firewall y seguridad de red.

La extensión debe ser capaz de descargar los archivos del agente de compilación desde https://vstsagentpackage.azureedge.net/agent. Además, el agente de compilación debe poder registrarse con Azure DevOps Services. Asegúrate de que esta dirección URL y las direcciones IP y URL relacionadas con Azure DevOps Services estén abiertas en la instancia. Para obtener información sobre las direcciones IP y URL que deben desbloquearse en el firewall, consulta: Direcciones IP permitidas y direcciones URL de dominio.

¿Por qué el script de configuración del agente del conjunto de escalado llama a Add-MpPreference y configura Windows Defender en el agente?

Para mejorar el rendimiento y la fiabilidad, los scripts de configuración llaman a Add-MpPreference con un ExclusionPath que contiene C:\ y D:\, que deshabilita el análisis programado y en tiempo real de Windows Defender para los archivos de estas carpetas del agente. Para cambiar el comportamiento predeterminado, establezca una variable de entorno denominada ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSION en true.

Quiero aumentar el tamaño del grupo. ¿Qué debo tener en cuenta?

Antes de aumentar el tamaño del grupo, asegúrese de que la instancia de Azure Virtual Network configurada para el grupo de Virtual Machine Scale Sets tenga un intervalo de espacio de direcciones lo suficientemente grande como para dar cabida a todos los nuevos agentes. Si no es así, puede obtener un error similar a Error al aumentar la capacidad. La subred azure-devops-agent-pool-fabrikam-fiber con el prefijo de dirección 12.123.45.224/28 no tiene capacidad suficiente para 5 direcciones IP.