Uso de Azure Compute Gallery para crear un grupo de imágenes personalizado

Al crear un grupo en Azure Batch con Configuración de máquina virtual, se especifica una imagen de máquina virtual (VM) que proporciona el sistema operativo para cada nodo de proceso en el grupo. Puede crear un grupo de máquinas virtuales con una imagen de Azure Marketplace admitida o crear una imagen personalizada con una imagen de Azure Compute Gallery.

Al usar Azure Compute Gallery para la imagen personalizada, tiene el control sobre la configuración y el tipo del sistema operativo, así como el tipo de discos de datos. Su imagen compartida puede incluir aplicaciones y datos de referencia que estarán disponibles en todos los nodos del grupo de lotes en cuanto se aprovisionen.

También puede tener varias versiones de una imagen según sea necesario para su entorno. Cuando se usa una versión de la imagen para crear una VM, la versión de la imagen se usa para crear nuevos discos para la VM.

El uso de una imagen de Shared Image le ahorra tiempo a la hora de preparar los nodos de ejecución del grupo para ejecutar la carga de trabajo de Batch. Se puede usar una imagen de Azure Marketplace e instalar el software en cada nodo de ejecución una vez que se haya aprovisionado, pero el uso de una imagen de Shared Image podría ser más eficiente. Además, puede especificar varias réplicas para la imagen de Shared Image, por lo que al crear grupos con muchas VM (más de 600), ahorrará tiempo en la creación del grupo.

El uso de una imagen de Shared Image configurada para su escenario puede proporcionar varias ventajas:

  • Uso de las mismas imágenes en todas las regiones. Puede crear réplicas de imágenes de Shared Image en distintas regiones para que todos los grupos usen la misma imagen.
  • Configuración del sistema operativo (SO). La configuración del disco de sistema operativo de la imagen se puede personalizar.
  • Preinstalar las aplicaciones. Preinstalar las aplicaciones en el disco del sistema operativo es más eficaz y menos propenso a errores que instalar las aplicaciones después de aprovisionar los nodos de ejecución con una tarea de inicio.
  • Copia de grandes cantidades de datos una vez. Convierta en estáticos parte de los datos de la imagen de Shared Image administrada copiándolos en los discos de datos de una imagen administrada. Solo debe hacerse una vez y los datos estarán disponibles para cada nodo del grupo.
  • Aumento de los grupos a tamaños más grandes. Con Azure Compute Gallery, puede crear grupos más grandes con las imágenes personalizadas junto con más réplicas de imágenes compartidas.
  • Mejor rendimiento que el uso de una imagen administrada como imagen personalizada. Para un grupo de imágenes personalizadas de Shared Image, el tiempo necesario para alcanzar el estado estable es hasta un 25 % más rápido y la latencia de inactividad de la máquina virtual es hasta un 30 % más breve.
  • Control de versiones y agrupación de imágenes para facilitar su administración. La definición de la agrupación de imágenes contiene información acerca de por qué se creó la imagen, para qué sistema operativo sirve e información acerca del uso de la imagen. La agrupación de imágenes permite una administración más sencilla de las imágenes. Para más información, consulte Definiciones de imagen.

Requisitos previos

  • Una cuenta de Azure Batch Para crear una cuenta de Batch, consulte las guías de inicio rápido de Batch con Azure Portal o la CLI de Azure.

Nota:

Se requiere autenticación mediante Microsoft Entra ID. Si utiliza Shared Key Auth, obtendrá un error de autenticación., obtendrá un error de autenticación.

  • una imagen de Azure Compute Gallery Para crear una imagen de Shared Image Gallery, debe tener o crear un recurso de imagen administrada. La imagen debe crearse desde instantáneas del disco del sistema operativo de la máquina virtual y, opcionalmente, de sus discos de datos conectados.

Nota

Si la imagen compartida no está en la misma suscripción que la cuenta de Batch, debe registrar el proveedor de recursos Microsoft.Batch para esa suscripción. Las dos suscripciones deben estar en el mismo inquilino de Microsoft Entra.

La imagen puede estar en distintas regiones, siempre que tenga réplicas en la misma región que la cuenta de Batch.

Si usa una aplicación de Microsoft Entra para crear un grupo de imágenes personalizadas con una imagen de Azure Compute Gallery, debe haberse concedido a la aplicación un rol integrado de Azure que le proporcione acceso a Shared Image. Para conceder este acceso en Azure Portal, navegue a la imagen compartida, seleccione Control de acceso (IAM) y agregue una asignación de roles para la aplicación.

Nota:

Los permisos de lectura para la imagen Azure Compute Gallery son inadecuados, ya que requieren la ejecución de la siguiente acción mínima: Microsoft.Compute/disks/beginGetAccess/action para obtener el acceso adecuado.

Preparación de una imagen compartida

En Azure, puede preparar una imagen compartida a partir de una imagen administrada, que se puede crear a partir de:

  • Instantáneas del sistema operativo y los discos de datos de una máquina virtual de Azure
  • Una máquina virtual de Azure generalizada con discos administrados
  • Un disco duro virtual local generalizado cargado en la nube

Nota

Batch solo admite imágenes compartidas generalizadas; no se puede usar una imagen compartida especializada para crear un grupo.

Consulte los siguientes pasos para preparar la máquina virtual, tome una instantánea y cree una imagen a partir de ella.

Preparación de la máquina virtual

Si va a crear una máquina virtual para la imagen, use una imagen de Azure Marketplace admitida por Batch como imagen base para la imagen administrada.

Para obtener una lista completa de las referencias de imágenes de Azure Marketplace actuales compatibles con Azure Batch, use una de las siguientes API para obtener una lista de imágenes de máquinas virtuales Windows y Linux:

Siga estas instrucciones al crear máquinas virtuales.

  • Asegúrese de que la máquina virtual se crea con un disco administrado. Se trata de la configuración de almacenamiento predeterminada cuando se crea una máquina virtual.
  • No instale extensiones de Azure, como la extensión de script personalizado, en la máquina virtual. Si la imagen contiene una extensión preinstalada, Azure podría experimentar problemas al implementar el grupo de Batch.
  • Cuando use discos de datos conectados, debe montar y dar formato a los discos desde una máquina virtual para usarlos.
  • Asegúrese de que la imagen del sistema operativo base que proporcione usa la unidad temporal predeterminada. El agente de nodo de Batch actualmente espera la unidad temporal predeterminada.
  • Asegúrese de que el disco del sistema operativo no esté cifrado.
  • Una vez que la máquina virtual está en ejecución, conéctese a ella a través de RDP (para Windows) o SSH (para Linux). Instale el software necesario o copie los datos deseados.
  • Para que el aprovisionamiento de grupo se realice más rápidamente, use la configuración de caché de disco ReadWrite para el disco del sistema operativo de la máquina virtual.

Debe crear una instancia de Azure Compute Gallery para que la imagen personalizada esté disponible. Seleccione esta galería al crear la imagen en los siguientes pasos. Para obtener información sobre cómo crear una instancia de Azure Compute Gallery para las imágenes, consulte Creación de una instancia de Azure Compute Gallery.

Crear una imagen

Para crear una imagen a partir de una máquina virtual en el portal, consulte Captura de una imagen de una máquina virtual.

Para crear una imagen con un origen distinto de una máquina virtual, consulte Crear una imagen.

Nota:

Si la imagen base tiene información del plan de compra, asegúrese de que la imagen de la galería tenga información de plan de compra idéntica como imagen base. Para más información sobre la creación de una imagen que tiene un plan de compra, consulte Proporcionar información del plan de compra de Azure Marketplace al crear imágenes.

Si la imagen base no tiene información del plan de compra, evite especificar la información del plan de compra para la imagen de la galería.

Para más información sobre el plan de compra sobre estas imágenes de Azure Marketplace, consulte las instrucciones para las máquinas virtuales Linux o Windows.

Use Azure PowerShell Get-AzGalleryImageDefinition o la CLI de Azure az sig image-definition show para comprobar si la imagen de la galería tiene información de plan correcta.

Creación de un grupo a partir de una imagen de Shared Image con la CLI de Azure

Para crear un grupo a partir de la imagen de Shared Image mediante la CLI de Azure, use el comando az batch pool create. Especifique el identificador de la imagen de Shared Image en el campo --image. Asegúrese de que el tipo de sistema operativo y la SKU coinciden con las versiones especificadas por --node-agent-sku-id.

Importante

El id. de SKU del agente del nodo debe alinearse con el editor/oferta/SKU para que el nodo se inicie.

az batch pool create \
    --id mypool --vm-size Standard_A1_v2 \
    --target-dedicated-nodes 2 \
    --image "/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}" \
    --{node-agent-sku-id}

Creación de un grupo a partir de una imagen de Shared Image mediante C#

Como alternativa, puede crear un grupo a partir de una imagen de Shared Image mediante el SDK de C#.

private static VirtualMachineConfiguration CreateVirtualMachineConfiguration(ImageReference imageReference)
{
    return new VirtualMachineConfiguration(
        imageReference: imageReference,
        nodeAgentSkuId: {});
}

private static ImageReference CreateImageReference()
{
    return new ImageReference(
        virtualMachineImageId: "/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}");
}

private static void CreateBatchPool(BatchClient batchClient, VirtualMachineConfiguration vmConfiguration)
{
    try
    {
        CloudPool pool = batchClient.PoolOperations.CreatePool(
            poolId: PoolId,
            targetDedicatedComputeNodes: PoolNodeCount,
            virtualMachineSize: PoolVMSize,
            virtualMachineConfiguration: vmConfiguration);

        pool.Commit();
    }
    ...
}

Creación de un grupo a partir de una imagen compartida mediante Python

También puede crear un grupo a partir de una imagen compartida mediante el SDK de Python:

# Import the required modules from the
# Azure Batch Client Library for Python
import azure.batch as batch
import azure.batch.models as batchmodels
from azure.common.credentials import ServicePrincipalCredentials

# Specify Batch account and service principal account credentials
account = "{batch-account-name}"
batch_url = "{batch-account-url}"
ad_client_id = "{sp-client-id}"
ad_tenant = "{tenant-id}"
ad_secret = "{sp-secret}"

# Pool settings
pool_id = "LinuxNodesSamplePoolPython"
vm_size = "STANDARD_D2_V3"
node_count = 1

# Initialize the Batch client with Azure AD authentication
creds = ServicePrincipalCredentials(
    client_id=ad_client_id,
    secret=ad_secret,
    tenant=ad_tenant,
    resource="https://batch.core.windows.net/"
)
client = batch.BatchServiceClient(creds, batch_url)

# Configure the start task for the pool
start_task = batchmodels.StartTask(
    command_line="printenv AZ_BATCH_NODE_STARTUP_DIR"
)
start_task.run_elevated = True

# Create an ImageReference which specifies the image from
# Azure Compute Gallery to install on the nodes.
ir = batchmodels.ImageReference(
    virtual_machine_image_id="/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}"
)

# Create the VirtualMachineConfiguration, specifying
# the VM image reference and the Batch node agent to
# be installed on the node.
vmc = batchmodels.VirtualMachineConfiguration(
    image_reference=ir,
    {node_agent_sku_id}
)

# Create the unbound pool
new_pool = batchmodels.PoolAddParameter(
    id=pool_id,
    vm_size=vm_size,
    target_dedicated_nodes=node_count,
    virtual_machine_configuration=vmc,
    start_task=start_task
)

# Create pool in the Batch service
client.pool.add(new_pool)

Crear una imagen compartida o personalizada mediante Azure Portal

Use los pasos siguientes para crear un grupo a partir de una imagen compartida en Azure Portal.

  1. Abra Azure Portal.
  2. Vaya a Cuentas de Batch y seleccione su cuenta.
  3. Seleccione Grupos y, luego, Agregar para crear un grupo.
  4. En la sección Tipo de imagen, seleccione Azure Compute Gallery.
  5. Complete el resto de secciones con información sobre la imagen administrada.
  6. Seleccione Aceptar.
  7. Una vez asignado el nodo, utilice Conectar para generar usuario y el archivo RDP para Windows O utilice SSH para Linux para iniciar sesión en el nodo asignado y verificar.

Cree un grupo a partir de una imagen compartida con el portal.

Consideraciones sobre grupos grandes

Si tiene previsto crear un grupo con cientos o miles de VM o más mediante una imagen de Shared Image, use la siguiente guía.

  • Números de réplica de Azure Compute Gallery. Para cada grupo con hasta 300 instancias, se recomienda conservar al menos una réplica. Por ejemplo, si está creando un grupo con 3 000 MV, debería mantener al menos 10 réplicas de su imagen. Siempre se recomienda mantener más réplicas que las indicadas por los requisitos mínimos para un mejor rendimiento.

  • Tiempo de espera del cambio de tamaño. Si el grupo contiene un número de nodos fijo (no se escala automáticamente), aumente la propiedad resizeTimeout del grupo en función de su tamaño. Por cada 1 000 MV, el tiempo de espera recomendado para redimensionar es de al menos 15 minutos. Por ejemplo, el tiempo de espera recomendado para redimensionar un grupo con 2 000 MV es de al menos 30 minutos.

Pasos siguientes