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

Ao criar um pool no Lote 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 a configuração e o tipo do sistema operacional, bem como 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 do Lote assim que são provisionados.

Além disso, você pode ter diversas versões de uma imagem conforme necessário para seu ambiente. Ao usar uma versão da imagem para criar uma VM, a versão da imagem é usada para criar novos discos para a VM.

Usar uma imagem compartilhada economiza tempo ao preparar os nós de computação do seu pool para executar sua carga de trabalho em lotes. É possível usar uma imagem do Azure Marketplace e instalar o software em cada nó de computação após o provisionamento, no entanto, normalmente, é mais eficiente usar uma imagem compartilhada. Além disso, você pode especificar várias réplicas para a imagem compartilhada para que, ao criar pools com várias VMs (mais de 600 VMs), economize tempo na criação do pool.

Usar uma imagem compartilhada configurada para o seu cenário pode fornecer 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 usem a mesma imagem.
  • Configure o SO (sistema operacional) . Você pode personalizar a configuração do disco do sistema operacional da imagem.
  • Pré-instalação aplicativos. A pré-instalação de aplicativos no disco do SO é mais eficiente e menos propenso a erros do que instalar aplicativos depois de provisionar os nós de computação com uma tarefa inicial.
  • Copie grandes quantidades de dados de uma só 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 disponibiliza dados para cada nó do pool.
  • Expanda os pools 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 imagem compartilhada.
  • Melhor desempenho do que usar apenas uma imagem gerenciada como imagem personalizada. Para um pool de imagens personalizado de Imagens Compartilhadas, o tempo para alcançar o estado constante é de até 25% mais rápido e a latência de ociosidade da VM é até 30% mais curta.
  • Agrupamento e controle de versão de imagem para facilitar o gerenciamento. A definição de agrupamento de imagens contém informações sobre o motivo pelo qual a imagem foi criada, para qual sistema operacional e informações sobre como usar a imagem. O agrupamento de imagens permite um gerenciamento mais fácil das imagens. Para saber mais, confira Definições de imagens.

Pré-requisitos

  • Uma conta do Lote do Azure. Para criar uma conta do Lote, confira os guias de início rápido do Lote usando o portal do Azure ou a CLI do Azure.

Observação

É necessária autenticação usando o Microsoft Entra ID. Se você usar o Shared Key Auth, 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 gerenciada. A imagem deve ser criada de instantâneos de disco do sistema operacional da VM e, opcionalmente, dos discos de dados anexados.

Observação

Se a Imagem Compartilhada não estiver na mesma assinatura que a conta do Lote, você precisará 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 que sua conta do Lote.

Se você usar um aplicativo do Microsoft Entra para criar um pool de imagens personalizado com uma imagem da Galeria de Computação do Azure, esse aplicativo deverá ter uma função interna do Azure que dê a ele 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.

Observação

As permissões do 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 de uma imagem gerenciada, que pode ser criada de:

  • Instantâneos de discos de dados e do SO de uma VM do Azure
  • Uma VM do Azure generalizada com discos gerenciados
  • Um VHD local generalizado carregado para a nuvem

Observação

O Lote dá suporte apenas a 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, gerar um instantâneo e criar uma imagem do instantâneo.

Preparar uma VM

Se você estiver criando uma VM para a imagem, use uma imagem do Azure Marketplace com suporte do Lote como a imagem base para sua imagem gerenciada.

Para ver uma lista completa das referências de imagens atuais do Azure Marketplace com suporte do Lote do Azure, use uma das seguintes APIs para retornar uma lista de imagens de VM do Windows e do Linux:

Siga estas diretrizes ao criar VMs:

  • Verifique se a VM é 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 de script personalizado, na VM. Se a imagem contém uma extensão pré-instalada, o Azure pode ter problemas ao implantar a o pool do Lote.
  • Ao usar discos de dados anexados, você precisa montar e formatar os discos de dentro de uma VM para usá-los.
  • Verifique se a imagem do sistema operacional base que você forneceu usa unidade temporária padrão. O agente do nó de Lote no momento espera unidade temporária padrão.
  • Verifique se o disco do sistema operacional não está criptografado.
  • Quando a VM estiver em execução, conecte-se a ela via RDP (para Windows) ou SSH (para Linux). Instale o software necessário ou copie os dados desejados.
  • Para provisionamento de pool mais rápido, use a Configuração de cache de disco ReadWrite para o disco do SO da VM.

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

Criar uma imagem

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

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

Observação

Se a imagem base tiver informações do plano de compra, verifique se a imagem da galeria tem informações do plano de compra idênticas às da imagem base. Para obter mais informações sobre como criar uma imagem que tenha um plano de compra, veja 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 informações do plano de compra para a imagem da galeria.

Para obter informações do plano de compra referentes a essas imagens do Marketplace, confira as diretrizes para VMs do Linux ou do Windows.

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

Criar um pool de uma imagem compartilhada usando a CLI do Azure

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

Importante

A ID de SKU do agente de nó deve se alinhar com o publicador/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 de uma imagem compartilhada usando C#

Como alternativa, você pode criar um pool de uma imagem compartilhada usando o SDK 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 de uma imagem compartilhada usando Python

Você também pode criar um pool 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 de uma imagem compartilhada ou imagem personalizada usando o portal do Azure

Usar as etapas a seguir para criar um pool de uma imagem compartilhada no portal do Azure.

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

Crie um pool de uma imagem compartilhada com o portal.

Considerações sobre pools 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 estiver criando um pool com 3.000 VMs, você deverá manter pelo menos 10 réplicas da sua imagem. Sempre sugerimos manter mais réplicas do que os requisitos mínimos para obter melhor desempenho.

  • Tempo limite de redimensionamento. Se o pool contiver um número fixo de nós (se não tiver dimensionamento automático), aumente a propriedade resizeTimeout 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óximas etapas