Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Batch használatával linuxos és Windows rendszerű virtuális gépeken is futtathat párhuzamos számítási feladatokat. Ez a cikk részletesen bemutatja, hogyan hozhat létre Linux rendszerű számítási csomópontkészleteket a Batch szolgáltatásban mind a Batch Python, mind a Azure.Compute.Batch ügyfélkönyvtár használatával.
Virtuális gép konfigurációja
Amikor számítási csomópontokból álló készletet hoz létre a Batchben, két lehetőség közül választhatja ki a csomópont méretét és operációs rendszerét: a Cloud Services konfigurációját és a virtuális gépek konfigurációját. A virtuálisgép-konfigurációs készletek Azure-beli virtuális gépekből állnak, amelyek Linux vagy Windows rendszerképekből hozhatók létre. Amikor Virtual Machine Configuration használatával hoz létre készletet, meg kell adnia egy elérhető számításicsomópont-méretet, a csomópontokra telepítendő virtuálisgép-rendszerkép referenciáját, valamint a Batch-csomópontügynök SKU-ját (egy olyan programot, amely minden csomóponton fut, és kapcsolatot biztosít a csomópont és a Batch szolgáltatás között).
Virtuális gép rendszerképének referenciája
A Batch szolgáltatás virtuálisgép-méretezési csoportokkal biztosítja a számítási csomópontokat a virtuális gép konfigurációjában. Megadhat egy rendszerképet az Azure Marketplace-ről, vagy az Azure Compute Gallery használatával egyéni rendszerképet készíthet elő.
Virtuálisgép-rendszerkép-referencia létrehozásakor a következő tulajdonságokat kell megadnia:
| A képhivatkozás tulajdonsága | Példa |
|---|---|
| Kiadó | kanonikus |
| Ajánlás | 0001-com-ubuntu-server-focal |
| SKU | 20_04-lts |
| Verzió | legújabb |
Tipp
A tulajdonságokról, valamint a Marketplace-rendszerképek megadásáról további információt a Linux rendszerű virtuális gépek rendszerképeinek keresése az Azure Marketplace-en az Azure CLI használatával című cikkben talál. Vegye figyelembe, hogy egyes Marketplace-rendszerképek jelenleg nem kompatibilisek a Batchtel.
Virtuálisgép-rendszerképek listája
Nem minden Marketplace-rendszerkép kompatibilis a jelenleg elérhető Batch-csomópontügynökökkel. A Batch szolgáltatáshoz támogatott Marketplace virtuálisgép-rendszerképek és a hozzájuk tartozó csomópontügynök termékváltozatainak listázásához használja a list_supported_images (Python), BatchClient.GetSupportedImagesAsync (Azure. Compute.Batch), vagy a megfelelő API egy másik nyelvű SDK-ban.
Csomópontügynök SKU
A Batch csomópontügynök egy olyan program, amely a készlet minden csomópontján fut, és biztosítja a parancs- és vezérlési felületet a csomópont és a Batch szolgáltatás között. A csomópontügynök különböző implementációi érhetők el a különböző operációs rendszerekhez; ezeket SKU-knak nevezik. A virtuálisgép-konfiguráció létrehozásakor először meg kell adnia a virtuális gép lemezképének hivatkozását, majd meg kell adnia a lemezképre telepíteni kívánt csomópontügynököt. Az egyes csomópontügynök-SKU-k általában több virtuálisgép-rendszerképpel kompatibilisek. A támogatott csomópontügynök termékváltozatainak és a virtuális gépek rendszerkép-kompatibilitásainak megtekintéséhez használja az Azure Batch CLI parancsot:
az batch pool supported-images list
További információ: Fiók – Támogatott képek listázása – REST API (Azure Batch Service) | Microsoft Docs.
Linux-készlet létrehozása: Batch Python
Az alábbi kódrészlet egy példát mutat be arra, hogyan hozhat létre Ubuntu Server számítási csomópontokat tartalmazó készletet a Pythonhoz készült Microsoft Azure Batch ügyfélkódtár használatával. A Batch Python-modullal kapcsolatos további részletekért tekintse meg a referenciadokumentációt.
Ez a kódrészlet kifejezetten létrehoz egy BatchVmImageReference-t , és meghatározza annak minden tulajdonságát (közzétevő, ajánlat, termékváltozat, verzió). Az éles kódban azonban azt javasoljuk, hogy a list_supported_images metódus használatával válasszon a rendelkezésre álló rendszerkép- és csomópontügynök-termékváltozat-kombinációk közül futásidőben.
# 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)
Ahogy korábban említettük, javasoljuk, hogy a list_supported_images metódus használatával dinamikusan válasszon a jelenleg támogatott csomópontügynök/Marketplace-rendszerkép kombinációk közül (aHelyett, hogy kifejezetten BatchVmImageReference-t hoznánk létre). A következő Python-kódrészlet bemutatja, hogyan használható ez a módszer.
# 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)
Linux-készlet létrehozása: Batch .NET
Az alábbi kódrészlet egy példát mutat arra, hogyan használhatók a Azure.Compute.Batch és Azure.ResourceManager.Batch ügyfélkódtárak Ubuntu Server rendszerű számítási csomópontokból álló készlet létrehozásához. További részletekért tekintse meg a referenciadokumentációt.
Az alábbi kódrészlet a BatchClient.GetSupportedImages metódust használja a jelenleg támogatott Marketplace-rendszerképek és csomópontügynök-termékváltozatok listájából való kiválasztáshoz. Ez a technika azért ajánlott, mert a támogatott kombinációk listája időről időre változhat. A leggyakrabban támogatott kombinációk kerülnek hozzáadásra.
// 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);
Bár az előző kódrészlet a BatchClient.GetSupportedImages metódust használja a támogatott kép- és csomópontügynök-termékváltozat-kombinációk dinamikus listázásához és kiválasztásához (ajánlott), a BatchVmImageReference-t explicit módon is konfigurálhatja:
BatchImageReference imageReference = new BatchImageReference()
{
Publisher = "canonical",
Offer = "0001-com-ubuntu-server-focal",
Sku = "20_04-lts",
Version = "latest"
};
Csatlakozás Linux-csomópontokhoz SSH használatával
A fejlesztés vagy hibaelhárítás során előfordulhat, hogy be kell jelentkeznie a készlet csomópontjaira. A Windows számítási csomópontokkal ellentétben a Távoli asztali protokoll (RDP) nem használható Linux-csomópontokhoz való csatlakozáshoz. Ehelyett a Batch szolgáltatás lehetővé teszi az SSH-hozzáférést minden csomóponton a távoli kapcsolathoz.
A következő Python-kódrészlet létrehoz egy felhasználót a készlet minden csomópontján, ami a távoli kapcsolathoz szükséges. Ezután megjeleníti az egyes csomópontokhoz tartozó biztonságos parancsértelmezőhöz (SSH) kapcsolódási adatokat.
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))
A kód kimenete az alábbi példához hasonló lesz. Ebben az esetben a készletcsoport négy Linux-csomópontot tartalmaz.
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
Jelszó helyett megadhat egy nyilvános SSH-kulcsot, amikor egy felhasználót hoz létre egy csomóponton.
A Python SDK-ban használja a ssh_public_key paramétert BatchNodeUserCreateOptions.
A .NET használja a BatchNodeUserCreateOptions.SshPublicKey tulajdonságot.
Díjszabás
Az Azure Batch az Azure Cloud Servicesre és az Azure Virtual Machines technológiára épül. Maga a Batch szolgáltatás díjmentesen érhető el, ami azt jelenti, hogy csak a Batch-megoldások által felhasznált számítási erőforrásokért (és a kapcsolódó költségekért) kell fizetnie. A virtuális gépek konfigurációja kiválasztásakor a díjak a Virtuális gépek díjszabási struktúrája alapján kerülnek felszámításra.
Ha alkalmazásokat helyez üzembe a Batch-csomópontokon alkalmazáscsomagokkal, az alkalmazáscsomagok által felhasznált Azure Storage-erőforrásokért is fizetnie kell.
Következő lépések
- Az Azure-Batch-minták GitHub-adattárában található Python-kódmintákat megismerve megtudhatja, hogyan hajthat végre gyakori Batch-műveleteket, például készletet, feladatot és feladatlétrehozásokat. A Python-mintákat kísérő README részletes információkat tartalmaz a szükséges csomagok telepítéséről.
- Ismerje meg, hogyan használhatja az Azure Spot virtuális gépeket a Batch használatával.