Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode usar o Lote do Azure para executar cargas de trabalho de computação paralelas em máquinas virtuais do Linux e do Windows. Este artigo detalha como criar pools de nós de computação Linux no serviço Batch usando as bibliotecas de cliente Batch Python e Azure.Compute.Batch.
Configuração de Máquina Virtual
Ao criar um conjunto de nós de computação no Batch, você tem duas opções para escolher o tamanho do nó e o sistema operacional: Configuração de Serviços de Nuvem e Configuração de Máquina Virtual. Os pools de Configuração de Máquina Virtual são compostos de VMs do Azure, que podem ser criadas usando imagens do Linux ou do Windows. Ao criar um pool com a Configuração de Máquina Virtual, você especifica um tamanho de nó de computação disponível, a referência de imagem de máquina virtual a ser instalada nos nós e o SKU do agente de nó de lote (um programa que é executado em cada nó e fornece uma interface entre o nó e o serviço de lote).
Referência da imagem da máquina virtual
O serviço Batch usa conjuntos de dimensionamento de máquinas virtuais para fornecer nós de computação na Configuração de Máquina Virtual. Você pode especificar uma imagem do Azure Marketplace ou usar a Galeria de Computação do Azure para preparar uma imagem personalizada.
Ao criar uma referência de imagem de máquina virtual, você deve especificar as seguintes propriedades:
| Propriedade de referência de imagem | Exemplo |
|---|---|
| Publicador | canônico |
| Oferta | 0001-com-ubuntu-server-focal |
| SKU | 20_04-lts |
| Versão | mais recente |
Dica
Você pode saber mais sobre essas propriedades e como especificar imagens do Marketplace em Localizar imagens de VM do Linux no Azure Marketplace com a CLI do Azure. Observe que algumas imagens do Marketplace não são atualmente compatíveis com o Batch.
Lista de imagens de máquinas virtuais
Nem todas as imagens do Marketplace são compatíveis com os agentes de nó atualmente de Lote disponíveis. Para listar todas as imagens de máquina virtual do Marketplace com suporte para o serviço do Lote e seus SKUs de agentes de nó correspondentes, use list_supported_images (Python), BatchClient.GetSupportedImagesAsync (Azure.Compute.Batch) ou a API correspondente em outro SDK de linguagem.
SKU do agente do nó
O agente de nó em lote é um programa executado em cada nó no pool e fornece a interface de comando e controle entre o nó e o serviço em lote. Há diferentes implementações do agente de nó, conhecidas como SKUs, para diferentes sistemas operacionais. Essencialmente, ao criar uma Configuração da Máquina Virtual, você primeiro especifica a referência da imagem da máquina virtual e, em seguida, especifica o agente de nó que será instalado na imagem. Normalmente, cada SKU do agente do nó é compatível com várias imagens de máquina virtual. Para exibir as compatibilidades de imagem da máquina virtual e as SKUs do agente de nó com suporte, você pode usar o comando CLI do Lote do Azure:
az batch pool supported-images list
Para obter mais informações, consulte Conta – Listar imagens compatíveis – API REST (serviço Lote do Azure) | Microsoft Docs.
Crie um pool do Linux: Python no Lote
O trecho de código a seguir mostra um exemplo de como usar a Biblioteca de Cliente do Lote do Azure para Python para criar um pool de nós de computação com Ubuntu Server. Para mais detalhes sobre o módulo Batch para Python, consulte a documentação de referência.
Esse snippet cria um BatchVmImageReference explicitamente e especifica cada uma de suas propriedades (publisher, offer, SKU, version). No entanto, no código de produção, recomendamos usar o método list_supported_images para selecionar uma das combinações disponíveis de SKU do agente do nó e imagem no runtime.
# Import the required modules from the
# Azure Batch Client Library for Python
from azure.batch import BatchClient, models
from azure.core.credentials import AzureNamedKeyCredential
# Specify Batch account credentials
account = "<batch-account-name>"
key = "<batch-account-key>"
account_endpoint = "<batch-account-url>"
# Pool settings
pool_id = "LinuxNodesSamplePoolPython"
vm_size = "STANDARD_D2_V3"
node_count = 1
# Initialize the Batch client
creds = AzureNamedKeyCredential(account, key)
client = BatchClient(endpoint=account_endpoint, credential=creds)
# Configure the start task for the pool
start_task = models.BatchStartTask(
command_line="printenv AZ_BATCH_NODE_STARTUP_DIR",
user_identity=models.UserIdentity(
auto_user=models.AutoUserSpecification(
elevation_level=models.ElevationLevel.ADMIN,
scope=models.AutoUserScope.POOL,
)
),
)
# Create an ImageReference which specifies the Marketplace
# virtual machine image to install on the nodes
ir = models.BatchVmImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="20_04-lts",
version="latest")
# Create the VirtualMachineConfiguration, specifying
# the VM image reference and the Batch node agent
# to install on the node
vmc = models.VirtualMachineConfiguration(
image_reference=ir,
node_agent_sku_id="batch.node.ubuntu 20.04")
# Create the unbound pool
new_pool = models.BatchPoolCreateOptions(
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.create_pool(pool=new_pool)
Como mencionamos anteriormente, recomendamos usar o método list_supported_images para selecionar dinamicamente entre as combinações de imagens do agente do nó/Marketplace com suporte no momento (em vez de criar uma BatchVmImageReference explicitamente). O snippet de código Python a seguir mostra como usar esse método.
# Get the list of supported images from the Batch service
images = list(client.list_supported_images())
# Obtain the desired image reference
image = None
for img in images:
if (img.image_reference.publisher.lower() == "canonical" and
img.image_reference.offer.lower() == "0001-com-ubuntu-server-focal" and
img.image_reference.sku.lower() == "20_04-lts"):
image = img
break
if image is None:
raise RuntimeError('invalid image reference for desired configuration')
# Create the VirtualMachineConfiguration, specifying the VM image
# reference and the Batch node agent to be installed on the node
vmc = models.VirtualMachineConfiguration(
image_reference=image.image_reference,
node_agent_sku_id=image.node_agent_sku_id)
Criar um pool Linux: Batch .NET
O snippet de código a seguir mostra um exemplo de como usar o Azure. Compute.Batch e Azure. ResourceManager.Batch bibliotecas de clientes para criar um pool de nós de computação do Ubuntu Server. Para obter mais detalhes, consulte a documentação de referência.
O snippet de código a seguir usa o método BatchClient.GetSupportedImages para fazer a seleção na lista de combinações de SKU do agente do nó e imagem do Marketplace com suporte no momento. Essa técnica é recomendável porque a lista de combinações com suporte pode ser alterada periodicamente. Normalmente, combinações suportadas são adicionadas.
// Pool settings
const string poolId = "LinuxNodesSamplePoolDotNet";
const string vmSize = "STANDARD_D2_V3";
const int nodeCount = 1;
// Obtain a collection of all available node agent SKUs.
// This allows us to select from a list of supported
// VM image/node agent combinations.
List<BatchSupportedImage> images = new List<BatchSupportedImage>();
await foreach (BatchSupportedImage img in batchClient.GetSupportedImagesAsync())
{
images.Add(img);
}
// Find the appropriate image information
BatchSupportedImage image = null;
foreach (var img in images)
{
if (img.ImageReference.Publisher == "canonical" &&
img.ImageReference.Offer == "0001-com-ubuntu-server-focal" &&
img.ImageReference.Sku == "20_04-lts")
{
image = img;
break;
}
}
// Create the BatchVmConfiguration for use when actually creating the pool.
// Note that the data-plane discovery uses Azure.Compute.Batch.BatchVmImageReference
// but the ARM pool data type uses Azure.ResourceManager.Batch.Models.BatchImageReference.
BatchVmConfiguration vmConfiguration = new BatchVmConfiguration(
imageReference: new BatchImageReference()
{
Publisher = image.ImageReference.Publisher,
Offer = image.ImageReference.Offer,
Sku = image.ImageReference.Sku,
Version = image.ImageReference.Version
},
nodeAgentSkuId: image.NodeAgentSkuId);
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = vmSize,
DeploymentConfiguration = new BatchDeploymentConfiguration() { VmConfiguration = vmConfiguration },
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = nodeCount }
}
};
// Commit the pool to the Batch service via Azure.ResourceManager.Batch.
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, poolId, poolData);
Embora o trecho de código anterior use o método BatchClient.GetSupportedImages para listar e selecionar dinamicamente entre as combinações de SKU de imagem e de agente de nó com suporte (recomendado), você também pode configurar um BatchVmImageReference de forma explícita:
BatchImageReference imageReference = new BatchImageReference()
{
Publisher = "canonical",
Offer = "0001-com-ubuntu-server-focal",
Sku = "20_04-lts",
Version = "latest"
};
Conectar-se a nós do Linux usando SSH
Durante o desenvolvimento ou durante a solução de problemas, talvez seja necessário entrar nos nós em seu pool. Ao contrário dos nós de computação do Windows, não é possível usar o protocolo RDP para se conectar aos nós do Linux. Em vez disso, o serviço do Lote habilita acesso do SSH em cada nó para a conexão remota.
O trecho de código Python a seguir cria um usuário em cada nó de um pool, o que é necessário para a conexão remota. Ele imprime as informações de conexão SSH (secure shell) para cada nó.
import datetime
import getpass
from azure.batch import BatchClient, models
from azure.core.credentials import AzureNamedKeyCredential
# Specify your own account credentials
batch_account_name = ''
batch_account_key = ''
batch_account_url = ''
# Specify the ID of an existing pool containing Linux nodes
# currently in the 'idle' state
pool_id = ''
# Specify the username and prompt for a password
username = 'linuxuser'
password = getpass.getpass()
# Create a BatchClient
credentials = AzureNamedKeyCredential(
batch_account_name,
batch_account_key
)
batch_client = BatchClient(
endpoint=batch_account_url,
credential=credentials
)
# Create the user that will be added to each node in the pool
user = models.BatchNodeUserCreateOptions(
name=username,
password=password,
is_admin=True,
expiry_time=(datetime.datetime.utcnow() + datetime.timedelta(days=30)),
)
# Get the list of nodes in the pool
nodes = batch_client.list_nodes(pool_id=pool_id)
# Add the user to each node in the pool and print
# the connection information for the node
for node in nodes:
# Add the user to the node
batch_client.create_node_user(pool_id=pool_id, node_id=node.id, user=user)
# Obtain SSH login information for the node
login = batch_client.get_node_remote_login_settings(pool_id=pool_id,
node_id=node.id)
# Print the connection info for the node
print("{0} | {1} | {2} | {3}".format(node.id,
node.state,
login.remote_login_ip_address,
login.remote_login_port))
Esse código terá uma saída semelhante ao exemplo a seguir. Nesse caso, o pool contém quatro nós Linux.
Password:
tvm-1219235766_1-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50000
tvm-1219235766_2-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50003
tvm-1219235766_3-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50002
tvm-1219235766_4-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50001
Em vez de uma senha, você pode especificar uma chave pública SSH ao criar um usuário em um nó.
No SDK do Python, use o parâmetro ssh_public_key em BatchNodeUserCreateOptions.
Em .NET, use a propriedade BatchNodeUserCreateOptions.SshPublicKey.
Preços
O Lote do Azure é baseado nas tecnologias de Serviços de Nuvem do Azure e Máquinas Virtuais do Azure. O serviço de Lote em si é oferecido sem custos, o que significa que você é cobrado apenas pelos recursos de computação (e os custos associados envolvidos) que as soluções do Lote consomem. Ao escolher a Configuração da Máquina Virtual, você é cobrado com base na estrutura de Preços das Máquinas Virtuais.
Se você implantar aplicativos nos nós do Batch usando pacotes de aplicativos, você também será cobrado pelos recursos do Armazenamento do Azure consumidos pelos seus pacotes de aplicativos.
Próximas etapas
- Explore os exemplos de código Python no repositório azure-batch-samples do GitHub para ver como executar as operações comuns do Lote, como criação de pool, trabalho e tarefa. O README que acompanha os exemplos em Python contém detalhes sobre como instalar os pacotes necessários.
- Saiba mais sobre o uso de VMs Spot do Azure com o Batch.