Zřízení linuxových výpočetních uzlů ve fondech Služby Batch
Azure Batch můžete použít ke spouštění paralelních výpočetních úloh na virtuálních počítačích s Linuxem i Windows. Tento článek podrobně popisuje, jak vytvořit fondy výpočetních uzlů Linuxu ve službě Batch pomocí klientských knihoven Batch Python i Batch .NET .
Konfigurace virtuálního počítače
Při vytváření fondu výpočetních uzlů ve službě Batch máte dvě možnosti, ze kterých můžete vybrat velikost uzlu a operační systém: Konfigurace cloudových služeb a konfigurace virtuálního počítače. Fondy konfigurace virtuálních počítačů se skládají z virtuálních počítačů Azure, které se můžou vytvářet z imagí Linuxu nebo Windows. Při vytváření fondu s konfigurací virtuálního počítače zadáte dostupnou velikost výpočetního uzlu, odkaz na image virtuálního počítače, který se má nainstalovat na uzly, a skladovou položku agenta uzlu Batch (program, který běží na každém uzlu a poskytuje rozhraní mezi uzlem a službou Batch).
Referenční informace k imagi virtuálního počítače
Služba Batch používá škálovací sady virtuálních počítačů k poskytování výpočetních uzlů v konfiguraci virtuálního počítače. Můžete zadat image z Azure Marketplace nebo pomocí Galerie výpočetních prostředků Azure připravit vlastní image.
Při vytváření odkazu na image virtuálního počítače je nutné zadat následující vlastnosti:
Referenční vlastnost obrázku | Příklad |
---|---|
Publisher | kanonický |
Nabízet | 0001-com-ubuntu-server-fokus |
Skladová jednotka (SKU) | 20_04-lts |
Verze | nejnovější |
Tip
Další informace o těchto vlastnostech a o tom, jak zadat image z Marketplace v imagích virtuálních počítačů s Linuxem na Azure Marketplace pomocí Azure CLI. Upozorňujeme, že některé image z Marketplace nejsou aktuálně kompatibilní se službou Batch.
Seznam imagí virtuálních počítačů
Ne všechny image z Marketplace jsou kompatibilní s aktuálně dostupnými agenty uzlů Batch. Pokud chcete zobrazit seznam všech podporovaných imagí virtuálních počítačů Marketplace pro službu Batch a jejich odpovídající skladové položky agenta uzlu, použijte list_supported_images (Python), ListSupportedImages (Batch .NET) nebo odpovídající rozhraní API v jiné jazykové sadě SDK.
Jednotka SKU zástupce uzlu
Agent uzlu Batch je program, který běží na každém uzlu ve fondu a poskytuje rozhraní pro řízení příkazů mezi uzlem a službou Batch. Existují různé implementace agenta uzlu, označovaného jako SKU, pro různé operační systémy. Při vytváření konfigurace virtuálního počítače v podstatě nejprve zadáte odkaz na image virtuálního počítače a pak zadáte agenta uzlu, který se má nainstalovat do image. Každá skladová položka agenta uzlu je obvykle kompatibilní s několika imagemi virtuálních počítačů. Pokud chcete zobrazit podporované skladové položky agenta uzlu a kompatibilitu imagí virtuálních počítačů, můžete použít příkaz Azure Batch CLI:
az batch pool supported-images list
Další informace najdete v tématu Účet – Výpis podporovaných imagí – REST API (služba Azure Batch) | Microsoft Docs.
Vytvoření fondu Linuxu: Batch Python
Následující fragment kódu ukazuje příklad použití klientské knihovny Microsoft Azure Batch pro Python k vytvoření fondu výpočetních uzlů Ubuntu Serveru. Další podrobnosti o modulu Batch Python najdete v referenční dokumentaci.
Tento fragment kódu vytvoří ImageReference explicitně a určuje všechny jeho vlastnosti (vydavatel, nabídka, skladová položka, verze). V produkčním kódu však doporučujeme použít metodu list_supported_images k výběru z dostupných kombinací skladových položek agenta image a uzlu za běhu.
# 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 už jsme zmínili dříve, doporučujeme použít metodu list_supported_images k dynamickému výběru z aktuálně podporovaných kombinací agenta uzlu nebo image z Marketplace (místo explicitního vytvoření ImageReference ). Následující fragment kódu Pythonu ukazuje, jak tuto metodu použít.
# 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)
Vytvoření fondu Linuxu: Batch .NET
Následující fragment kódu ukazuje příklad použití klientské knihovny Batch .NET k vytvoření fondu výpočetních uzlů Ubuntu Serveru. Další podrobnosti o batch .NET najdete v referenční dokumentaci.
Následující fragment kódu používá metodu PoolOperations.ListSupportedImages k výběru ze seznamu aktuálně podporovaných kombinací image Marketplace a agenta uzlu. Tato technika se doporučuje, protože seznam podporovaných kombinací se může čas od času změnit. Nejčastěji se přidávají podporované kombinace.
// 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();
I když předchozí fragment kódu používá metodu PoolOperations.istSupportedImages k dynamickému výpisu a výběru z podporovaných kombinací SKU agenta image a uzlu (doporučeno), můžete také explicitně nakonfigurovat ImageReference :
ImageReference imageReference = new ImageReference(
publisher: "canonical",
offer: "0001-com-ubuntu-server-focal",
sku: "20_04-lts",
version: "latest");
Připojení k uzlům s Linuxem pomocí SSH
Během vývoje nebo při řešení potíží můžete zjistit, že je nutné se přihlásit k uzlům ve fondu. Na rozdíl od výpočetních uzlů Windows nemůžete pro připojení k linuxovým uzlům použít protokol RDP (Remote Desktop Protocol). Místo toho služba Batch povolí přístup SSH na každém uzlu pro vzdálené připojení.
Následující fragment kódu Pythonu vytvoří uživatele na každém uzlu ve fondu, který se vyžaduje pro vzdálené připojení. Pak vytiskne informace o připojení SSH (Secure Shell) pro každý uzel.
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))
Tento kód bude mít výstup podobný následujícímu příkladu. V tomto případě fond obsahuje čtyři linuxové uzly.
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
Místo hesla můžete při vytváření uživatele na uzlu zadat veřejný klíč SSH.
V sadě Python SDK použijte parametr ssh_public_key na ComputeNodeUser.
V rozhraní .NET použijte vlastnost ComputeNodeUser.SshPublicKey .
Ceny
Služba Azure Batch je založená na technologiích Azure Cloud Services a Azure Virtual Machines. Samotná služba Batch se nabízí bez poplatků, což znamená, že se vám účtují jenom výpočetní prostředky (a související náklady, které zahrnují), které vaše řešení Batch spotřebovávají. Při výběru konfigurace virtuálního počítače se vám budou účtovat poplatky na základě cenové struktury služby Virtual Machines.
Pokud nasadíte aplikace do uzlů Batch pomocí balíčků aplikací, budou se vám účtovat také prostředky Azure Storage, které vaše balíčky aplikací spotřebovávají.
Další kroky
- Prozkoumejte ukázky kódu Pythonu v úložišti GitHubu azure-batch-samples a zjistěte, jak provádět běžné operace služby Batch, jako je fond, úloha a vytváření úkolů. Soubor README , který doprovází ukázky Pythonu, obsahuje podrobnosti o tom, jak nainstalovat požadované balíčky.
- Přečtěte si o používání spotových virtuálních počítačů Azure se službou Batch.