Udostępnij za pośrednictwem


Aprowizowanie węzłów obliczeniowych systemu Linux w pulach usługi Batch

Za pomocą usługi Azure Batch można uruchamiać równoległe obciążenia obliczeniowe na maszynach wirtualnych z systemami Linux i Windows. W tym artykule opisano sposób tworzenia pul węzłów obliczeniowych systemu Linux w usłudze Batch przy użyciu bibliotek klienckich batch Python i Batch .NET .

Konfiguracja maszyny wirtualnej

Podczas tworzenia puli węzłów obliczeniowych w usłudze Batch dostępne są dwie opcje wyboru rozmiaru węzła i systemu operacyjnego: Konfiguracja usług Cloud Services i Konfiguracja maszyny wirtualnej. Pule konfiguracji maszyny wirtualnej składają się z maszyn wirtualnych platformy Azure, które mogą być tworzone na podstawie obrazów systemu Linux lub Windows. Podczas tworzenia puli przy użyciu konfiguracji maszyny wirtualnej należy określić dostępny rozmiar węzła obliczeniowego, odwołanie do obrazu maszyny wirtualnej do zainstalowania w węzłach oraz jednostkę SKU agenta węzła usługi Batch (program uruchamiany w każdym węźle i udostępnia interfejs między węzłem i usługą Batch).

Dokumentacja obrazu maszyny wirtualnej

Usługa Batch używa zestawów skalowania maszyn wirtualnych do udostępniania węzłów obliczeniowych w konfiguracji maszyny wirtualnej. Możesz określić obraz z witryny Azure Marketplace lub użyć galerii obliczeń platformy Azure do przygotowania obrazu niestandardowego.

Podczas tworzenia odwołania do obrazu maszyny wirtualnej należy określić następujące właściwości:

Właściwość odwołania do obrazu Przykład
Publisher kanoniczny
Oferta 0001-com-ubuntu-server-focal
SKU 20_04-lts
Wersja latest

Napiwek

Aby dowiedzieć się więcej o tych właściwościach i sposobach określania obrazów z witryny Marketplace, zobacz Znajdowanie obrazów maszyn wirtualnych z systemem Linux w witrynie Azure Marketplace przy użyciu interfejsu wiersza polecenia platformy Azure. Pamiętaj, że niektóre obrazy witryny Marketplace nie są obecnie zgodne z usługą Batch.

Lista obrazów maszyn wirtualnych

Nie wszystkie obrazy witryny Marketplace są zgodne z aktualnie dostępnymi agentami węzłów usługi Batch. Aby wyświetlić listę wszystkich obsługiwanych obrazów maszyn wirtualnych witryny Marketplace dla usługi Batch i odpowiadających im jednostek SKU agenta węzła, użyj list_supported_images (Python), ListSupportedImages (Batch .NET) lub odpowiedniego interfejsu API w innym zestawie SDK języka.

Jednostka SKU agenta węzła

Agent węzła usługi Batch to program uruchamiany w każdym węźle w puli i udostępnia interfejs polecenia i sterowania między węzłem a usługą Batch. Istnieją różne implementacje agenta węzła, znane jako jednostki SKU, dla różnych systemów operacyjnych. Zasadniczo podczas tworzenia konfiguracji maszyny wirtualnej należy najpierw określić odwołanie do obrazu maszyny wirtualnej, a następnie określić agenta węzła do zainstalowania na obrazie. Zazwyczaj każda jednostka SKU agenta węzła jest zgodna z wieloma obrazami maszyn wirtualnych. Aby wyświetlić obsługiwane jednostki SKU agenta węzła i zgodność obrazów maszyny wirtualnej, możesz użyć polecenia interfejsu wiersza polecenia usługi Azure Batch:

az batch pool supported-images list

Aby uzyskać więcej informacji, zapoznaj się z tematem Konto — Wyświetlanie listy obsługiwanych obrazów — interfejs API REST (usługa Azure Batch) | Microsoft Docs.

Tworzenie puli systemu Linux: Usługa Batch Python

Poniższy fragment kodu przedstawia przykład użycia biblioteki klienta usługi Microsoft Azure Batch dla języka Python do utworzenia puli węzłów obliczeniowych systemu Ubuntu Server. Aby uzyskać więcej informacji na temat modułu usługi Batch w języku Python, zapoznaj się z dokumentacją referencyjną.

Ten fragment kodu tworzy jawnie element ImageReference i określa każdą z jego właściwości (wydawca, oferta, jednostka SKU, wersja). Jednak w kodzie produkcyjnym zalecamy użycie metody list_supported_images do wybrania kombinacji jednostki SKU agenta obrazu i węzła w czasie wykonywania.

# Import the required modules from the
# Azure Batch Client Library for Python
import azure.batch.batch_service_client as batch
import azure.batch.batch_auth as batchauth
import azure.batch.models as batchmodels

# Specify Batch account credentials
account = "<batch-account-name>"
key = "<batch-account-key>"
batch_url = "<batch-account-url>"

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

# Initialize the Batch client
creds = batchauth.SharedKeyCredentials(account, key)
config = batch.BatchServiceClientConfiguration(creds, batch_url)
client = batch.BatchServiceClient(creds, batch_url)

# Create the unbound pool
new_pool = batchmodels.PoolAddParameter(id=pool_id, vm_size=vm_size)
new_pool.target_dedicated = node_count

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

# Create an ImageReference which specifies the Marketplace
# virtual machine image to install on the nodes
ir = batchmodels.ImageReference(
    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 = batchmodels.VirtualMachineConfiguration(
    image_reference=ir,
    node_agent_sku_id="batch.node.ubuntu 20.04")

# Assign the virtual machine configuration to the pool
new_pool.virtual_machine_configuration = vmc

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

Jak wspomniano wcześniej, zalecamy użycie metody list_supported_images do dynamicznego wybierania spośród aktualnie obsługiwanych kombinacji agenta węzła/obrazu witryny Marketplace (zamiast jawnego tworzenia funkcji ImageReference). Poniższy fragment kodu języka Python pokazuje, jak używać tej metody.

# Get the list of supported images from the Batch service
images = client.account.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 = batchmodels.VirtualMachineConfiguration(
    image_reference=image.image_reference,
    node_agent_sku_id=image.node_agent_sku_id)

Tworzenie puli systemu Linux: Batch .NET

Poniższy fragment kodu przedstawia przykład użycia biblioteki klienta platformy .NET usługi Batch do utworzenia puli węzłów obliczeniowych systemu Ubuntu Server. Aby uzyskać więcej informacji na temat platformy .NET usługi Batch, zapoznaj się z dokumentacją referencyjną.

Poniższy fragment kodu używa metody PoolOperations.ListSupportedImages do wybrania z listy aktualnie obsługiwanych kombinacji jednostek SKU agenta platformy Marketplace i obrazu platformy Marketplace. Ta technika jest zalecana, ponieważ lista obsługiwanych kombinacji może ulec zmianie od czasu do czasu. Najczęściej dodawane są obsługiwane kombinacje.

// 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<ImageInformation> images =
    batchClient.PoolOperations.ListSupportedImages().ToList();

// Find the appropriate image information
ImageInformation 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 VirtualMachineConfiguration for use when actually
// creating the pool
VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration(image.ImageReference, image.NodeAgentSkuId);

// Create the unbound pool object using the VirtualMachineConfiguration
// created above
CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    virtualMachineSize: vmSize,
    virtualMachineConfiguration: virtualMachineConfiguration,
    targetDedicatedComputeNodes: nodeCount);

// Commit the pool to the Batch service
await pool.CommitAsync();

Mimo że poprzedni fragment kodu używa metody PoolOperations.istSupportedImages do dynamicznego wyświetlania listy i wybierania z obsługiwanych kombinacji jednostek SKU agenta obrazu i węzła (zalecane), można również jawnie skonfigurować metodę ImageReference :

ImageReference imageReference = new ImageReference(
    publisher: "canonical",
    offer: "0001-com-ubuntu-server-focal",
    sku: "20_04-lts",
    version: "latest");

Nawiązywanie połączenia z węzłami systemu Linux przy użyciu protokołu SSH

Podczas programowania lub rozwiązywania problemów może być konieczne zalogowanie się do węzłów w puli. W przeciwieństwie do węzłów obliczeniowych systemu Windows nie można używać protokołu RDP (Remote Desktop Protocol) do nawiązywania połączenia z węzłami systemu Linux. Zamiast tego usługa Batch umożliwia dostęp SSH w każdym węźle na potrzeby połączenia zdalnego.

Poniższy fragment kodu języka Python tworzy użytkownika w każdym węźle w puli, który jest wymagany do połączenia zdalnego. Następnie wyświetla informacje o połączeniu secure shell (SSH) dla każdego węzła.

import datetime
import getpass
import azure.batch.batch_service_client as batch
import azure.batch.batch_auth as batchauth
import azure.batch.models as batchmodels

# 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 = batchauth.SharedKeyCredentials(
    batch_account_name,
    batch_account_key
)
batch_client = batch.BatchServiceClient(
    credentials,
    base_url=batch_account_url
)

# Create the user that will be added to each node in the pool
user = batchmodels.ComputeNodeUser(username)
user.password = password
user.is_admin = True
user.expiry_time = \
    (datetime.datetime.today() + datetime.timedelta(days=30)).isoformat()

# Get the list of nodes in the pool
nodes = batch_client.compute_node.list(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.compute_node.add_user(pool_id, node.id, user)

    # Obtain SSH login information for the node
    login = batch_client.compute_node.get_remote_login_settings(pool_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))

Ten kod będzie miał dane wyjściowe podobne do poniższego przykładu. W takim przypadku pula zawiera cztery węzły systemu 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

Zamiast hasła można określić klucz publiczny SSH podczas tworzenia użytkownika w węźle.

W zestawie SDK języka Python użyj parametru ssh_public_key dla elementu ComputeNodeUser.

Na platformie .NET użyj właściwości ComputeNodeUser.SshPublicKey .

Cennik

Usługa Azure Batch jest oparta na usługach Azure Cloud Services i technologii Azure Virtual Machines. Sama usługa Batch jest oferowana bez ponoszenia kosztów, co oznacza, że opłaty są naliczane tylko za zasoby obliczeniowe (i związane z nimi koszty) używane przez rozwiązania usługi Batch. Po wybraniu opcji Konfiguracja maszyny wirtualnej opłaty są naliczane na podstawie struktury cen usługi Virtual Machines.

W przypadku wdrażania aplikacji w węzłach usługi Batch przy użyciu pakietów aplikacji są również naliczane opłaty za zasoby usługi Azure Storage używane przez pakiety aplikacji.

Następne kroki

  • Zapoznaj się z przykładami kodu języka Python w repozytorium GitHub azure-batch-samples, aby zobaczyć, jak wykonywać typowe operacje usługi Batch, takie jak pula, zadanie i tworzenie zadań. Plik README dołączony do przykładów języka Python zawiera szczegółowe informacje o sposobie instalowania wymaganych pakietów.
  • Dowiedz się więcej o korzystaniu z maszyn wirtualnych typu spot platformy Azure z usługą Batch.