Usar a Galeria de Computação do Azure para criar um pool de imagens personalizado

Ao criar um pool de lotes do Azure usando a Configuração de Máquina Virtual, você especifica uma imagem de VM que fornece o sistema operacional para cada nó de computação no pool. Você pode criar um pool de máquinas virtuais com uma imagem do Azure Marketplace com suporte ou criar uma imagem personalizada com uma imagem da Galeria de Computação do Azure.

Ao usar a Galeria de Computação do Azure para sua imagem personalizada, você tem controle sobre o tipo e a configuração do sistema operacional, bem como sobre o tipo de discos de dados. Sua Imagem compartilhada pode incluir aplicativos e dados de referência que ficam disponíveis em todos os nós do pool de lotes assim que são provisionados.

Você também pode ter várias versões de uma imagem, conforme necessário para seu ambiente. Quando você usa uma versão de imagem para criar uma VM, a versão da imagem é usada para criar novos discos para a VM.

O uso de uma Imagem Compartilhada economiza tempo na preparação dos nós de computação do pool para executar sua carga de trabalho em lote. É possível usar uma imagem do Azure Marketplace e instalar software em cada nó de computação após o provisionamento, mas usar uma Imagem Compartilhada normalmente é mais eficiente. Além disso, você pode especificar várias réplicas para a Imagem Compartilhada, portanto, ao criar pools com muitas VMs (mais de 600 VMs), economizará tempo na criação do pool.

Usar uma Imagem Compartilhada configurada para seu cenário pode oferecer várias vantagens:

  • Use as mesmas imagens em todas as regiões. Você pode criar réplicas de imagens compartilhadas em diferentes regiões para que todos os seus pools utilizem a mesma imagem.
  • Configure o sistema operacional (SO). Você pode personalizar a configuração do disco do sistema operacional da imagem.
  • Pré-instalar aplicações. A pré-instalação de aplicativos no disco do sistema operacional é mais eficiente e menos propensa a erros do que a instalação de aplicativos após o provisionamento dos nós de computação com uma tarefa de início.
  • Copie grandes quantidades de dados uma vez. Torne os dados estáticos parte da Imagem Compartilhada gerenciada copiando-os para os discos de dados de uma imagem gerenciada. Isso só precisa ser feito uma vez e torna os dados disponíveis para cada nó do pool.
  • Aumente as piscinas para tamanhos maiores. Com a Galeria de Computação do Azure, você pode criar pools maiores com suas imagens personalizadas, juntamente com mais réplicas de imagens compartilhadas.
  • Melhor desempenho do que usar apenas uma imagem gerenciada como uma imagem personalizada. Para um pool de imagens personalizadas de Imagem Compartilhada, o tempo para atingir o estado estacionário é até 25% mais rápido e a latência ociosa da VM é até 30% menor.
  • Controle de versão e agrupamento de imagens para facilitar o gerenciamento. A definição de agrupamento de imagens contém informações sobre por que a imagem foi criada, para que sistema operacional ela é e informações sobre como usar a imagem. O agrupamento de imagens permite uma gestão de imagens mais fácil. Para obter mais informações, consulte Definições de imagem.

Pré-requisitos

  • Uma conta do Azure Batch. Para criar uma conta de lote, consulte os inícios rápidos de lote usando o portal do Azure ou a CLI do Azure.

Nota

A autenticação usando o Microsoft Entra ID é necessária. Se você usar a Autenticação de Chave Compartilhada, receberá um erro de autenticação.

  • uma imagem da Galeria de Computação do Azure. Para criar uma imagem compartilhada, você precisa ter ou criar um recurso de imagem gerenciado. A imagem deve ser criada a partir de instantâneos do disco do sistema operacional da VM e, opcionalmente, seus discos de dados anexados.

Nota

Se a Imagem Compartilhada não estiver na mesma assinatura que a conta Batch, você deverá registrar o provedor de recursos Microsoft.Batch para essa assinatura. As duas assinaturas devem estar no mesmo locatário do Microsoft Entra.

A imagem pode estar em uma região diferente, desde que tenha réplicas na mesma região da sua conta do Batch.

Se você usar um aplicativo Microsoft Entra para criar um pool de imagens personalizado com uma imagem da Galeria de Computação do Azure, esse aplicativo deverá ter recebido uma função interna do Azure que lhe dê acesso à Imagem Compartilhada. Você pode conceder esse acesso no portal do Azure navegando até a Imagem Compartilhada, selecionando Controle de acesso (IAM) e adicionando uma atribuição de função para o aplicativo.

Nota

As permissões de leitor para a imagem da Galeria de Computação do Azure são inadequadas, pois exigem a execução da seguinte ação mínima: Microsoft.Compute/disks/beginGetAccess/action para acesso apropriado.

Preparar uma imagem compartilhada

No Azure, você pode preparar uma imagem compartilhada a partir de uma imagem gerenciada, que pode ser criada a partir de:

  • Instantâneos do sistema operacional e dos discos de dados de uma VM do Azure
  • Uma VM do Azure generalizada com discos gerenciados
  • Um VHD local generalizado carregado na nuvem

Nota

O Batch suporta apenas imagens compartilhadas generalizadas; uma Imagem Compartilhada especializada não pode ser usada para criar um pool.

As etapas a seguir mostram como preparar uma VM, tirar um instantâneo e criar uma imagem a partir do instantâneo.

Preparar uma VM

Se estiver a criar uma nova VM para a imagem, utilize a imagem do Azure Marketplace suportada pelo Batch como imagem base para a imagem gerida.

Para obter uma lista completa das referências de imagem atuais do Azure Marketplace suportadas pelo Azure Batch, utilize uma das seguintes APIs para devolver uma lista de imagens de VM do Windows e Linux:

Siga estas diretrizes ao criar VMs:

  • Verifique se a VM foi criada com um disco gerenciado. Essa é a configuração de armazenamento padrão quando você cria uma VM.
  • Não instale extensões do Azure, como a extensão Script Personalizado, na VM. Se a imagem contiver uma extensão pré-instalada, o Azure poderá encontrar problemas ao implantar o pool de lotes.
  • Ao usar discos de dados anexados, você precisa montar e formatar os discos de dentro de uma VM para usá-los.
  • Certifique-se de que a imagem base do SO fornecida utiliza a unidade temporária predefinida. O agente do nó Batch atualmente espera a unidade temporária padrão.
  • Certifique-se de que o disco do SO não está encriptado.
  • Quando a VM estiver em execução, conecte-se a ela via RDP (para Windows) ou SSH (para Linux). Instale qualquer software necessário ou copie os dados desejados.
  • Para um provisionamento de pool mais rápido, use a configuração de cache de disco ReadWrite para o disco do sistema operacional da VM.

Você precisa criar uma Galeria de Computação do Azure para disponibilizar sua imagem personalizada. Selecione esta galeria ao criar a imagem nas etapas a seguir. Para saber como criar uma Galeria de Computação do Azure para suas imagens, consulte Criar uma Galeria de Computação do Azure.

Criar uma imagem

Para criar uma imagem de uma VM no portal, consulte Capturar uma imagem de uma VM.

Para criar uma imagem usando uma fonte diferente de uma VM, consulte Criar uma imagem.

Nota

Se a imagem base tiver informações do plano de compra, certifique-se de que a imagem da galeria tenha informações do plano de compra idênticas às da imagem base. Para obter mais informações sobre como criar imagens com plano de compra, consulte Fornecer informações do plano de compra do Azure Marketplace ao criar imagens.

Se a imagem base não tiver informações do plano de compra, evite especificar qualquer informação do plano de compra para a imagem da galeria.

Para obter informações sobre o plano de compra sobre essas imagens do Marketplace, consulte as orientações para VMs Linux ou Windows .

Use o Azure PowerShell Get-AzGalleryImageDefinition ou Azure CLI az sig image-definition show para verificar se a imagem da galeria tem informações corretas do plano.

Criar um pool a partir de uma Imagem Compartilhada usando a CLI do Azure

Para criar um pool a partir de sua Imagem Compartilhada usando a CLI do Azure, use o az batch pool create comando. Especifique o ID da --image imagem compartilhada no campo. Verifique se o tipo de sistema operacional e o SKU correspondem às versões especificadas por --node-agent-sku-id

Importante

A ID de SKU do agente do nó deve estar alinhada com o editor/oferta/SKU para que o nó seja iniciado.

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}

Criar um pool a partir de uma imagem compartilhada usando C#

Como alternativa, você pode criar um pool a partir de uma Imagem Compartilhada usando o SDK do 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();
    }
    ...
}

Criar um pool a partir de uma imagem compartilhada usando Python

Você também pode criar um pool a partir de uma Imagem Compartilhada usando o SDK do 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)

Criar um pool a partir de uma Imagem Compartilhada ou Imagem Personalizada usando o portal do Azure

Use as etapas a seguir para criar um pool a partir de uma Imagem Compartilhada no portal do Azure.

  1. Abra o portal do Azure.
  2. Vá para Contas em lote e selecione sua conta.
  3. Selecione Pools e, em seguida, Add para criar um novo pool.
  4. Na seção Tipo de Imagem, selecione Galeria de Computação do Azure.
  5. Preencha as seções restantes com informações sobre sua imagem gerenciada.
  6. Selecione OK.
  7. Depois que o nó estiver alocado, use Connect para gerar usuário e o arquivo RDP para Windows OU use SSH para Linux para fazer login no nó alocado e verificar.

Crie um pool com a partir de uma imagem compartilhada com o portal.

Considerações para piscinas grandes

Se você planeja criar um pool com centenas ou milhares de VMs ou mais usando uma Imagem Compartilhada, use as diretrizes a seguir.

  • Números de réplica da Galeria de Computação do Azure. Para cada pool com até 300 instâncias, recomendamos que você mantenha pelo menos uma réplica. Por exemplo, se você estiver criando um pool com 3.000 VMs, deverá manter pelo menos 10 réplicas da imagem. Sugerimos sempre manter mais réplicas do que os requisitos mínimos para um melhor desempenho.

  • Redimensione o tempo limite. Se o pool contiver um número fixo de nós (se ele não for dimensionado automaticamente), aumente a resizeTimeout propriedade do pool dependendo do tamanho do pool. Para cada 1.000 VMs, o tempo limite de redimensionamento recomendado é de pelo menos 15 minutos. Por exemplo, o tempo limite de redimensionamento recomendado para um pool com 2.000 VMs é de pelo menos 30 minutos.

Próximos passos