Bagikan melalui


Sediakan simpul komputasi Linux di kumpulan Batch

Anda dapat menggunakan Azure Batch untuk menjalankan beban kerja komputasi paralel pada komputer virtual Linux dan Windows. Artikel ini menjelaskan cara membuat kumpulan simpul komputasi Linux di layanan Batch dengan menggunakan pustaka klien Batch Python dan Batch .NET.

Konfigurasi Mesin Virtual

Ketika membuat kumpulan simpul komputasi di Batch, Anda memiliki dua opsi untuk memilih ukuran simpul dan sistem operasi: Konfigurasi Layanan Cloud dan Konfigurasi Komputer Virtual. Kumpulan Konfigurasi Komputer Virtual terdiri dari VM Azure, yang dapat dibuat dari citra Linux atau Windows. Ketika membuat kumpulan dengan Konfigurasi Komputer Virtual, tentukan ukuran simpul komputasi yang tersedia, referensi citra komputer virtual yang akan diinstal pada simpul, dan agen simpul Batch SKU (program yang berjalan pada setiap simpul dan menyediakan antarmuka antara simpul dan layanan Batch).

Referensi citra komputer virtual

Layanan Batch menggunakan rangkaian skala komputer virtual untuk menyediakan simpul komputasi dalam Konfigurasi Komputer Virtual. Anda dapat menentukan gambar dari Marketplace Azure, atau menggunakan Azure Compute Gallery untuk menyiapkan gambar kustom.

Saat membuat referensi citra komputer virtual, Anda harus menentukan properti berikut:

Properti referensi citra Contoh
Publisher kanonis
Penawaran 0001-com-ubuntu-server-focal
SKU 20_04-lts
Versi terbaru

Tip

Anda dapat mempelajari selengkapnya tentang properti ini dan cara menentukan citra Marketplace di Cari citra Linux VM di Azure Marketplace dengan Azure CLI. Perhatikan bahwa beberapa citra Marketplace saat ini tidak kompatibel dengan Batch.

Daftar citra komputer virtual

Tidak semua citra Marketplace kompatibel dengan agen simpul Batch yang tersedia saat ini. Untuk mencantumkan semua citra komputer virtual Marketplace yang didukung layanan Batch dan SKU agen simpul yang sesuai, gunakan list_supported_images (Python), ListSupportedImages (Batch .NET), atau API yang sesuai dalam bahasa lain SDK.

SKU agen simpul

Agen simpul Batch adalah program yang berjalan pada setiap simpul di kumpulan dan menyediakan antarmuka command-and-control antara simpul dan layanan Batch. Ada berbagai implementasi agen simpul, yaitu SKU, untuk sistem operasi yang berbeda. Pada dasarnya, ketika Anda membuat Konfigurasi Komputer Virtual, tentukan referensi citra komputer virtual terlebih dahulu, lalu tentukan agen simpul untuk diinstal pada citra. Biasanya, setiap agen simpul SKU kompatibel dengan beberapa citra komputer virtual. Untuk melihat SKU agen simpul yang didukung dan kompatibilitas gambar mesin virtual, Anda dapat menggunakan perintah CLI Azure Batch:

az batch pool supported-images list

Untuk informasi selengkapnya, Anda dapat merujuk ke Akun - Daftar Gambar yang Didukung - REST API (layanan Azure Batch) | Microsoft Docs.

Buat kumpulan Linux: Batch Python

Cuplikan kode berikut ini menunjukkan contoh cara menggunakan Microsoft Azure Batch Client Library for Python untuk membuat kumpulan simpul komputasi Ubuntu Server. Untuk detail selengkapnya tentang modul Batch Python, lihat dokumentasi referensi.

Cuplikan ini membuat ImageReference secara eksplisit dan menentukan setiap propertinya (penerbit, penawaran, SKU, versi). Namun, dalam kode produksi, kami sarankan Anda menggunakan metode list_supported_images untuk memilih dari kombinasi SKU agen citra dan simpul yang tersedia pada waktu runtime.

# 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)

Seperti yang telah disebutkan, kami sarankan menggunakan metode list_supported_images untuk secara dinamis memilih dari kombinasi citra agen simpul/Marketplace yang saat ini didukung (alih-alih membuat ImageReference secara eksplisit). Cuplikan Python berikut menunjukkan cara menggunakan metode ini.

# 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)

Buat kumpulan Linux: Batch .NET

Cuplikan kode berikut ini menunjukkan contoh cara menggunakan pustaka klien Batch .NET untuk membuat kumpulan simpul komputasi Ubuntu Server. Untuk detail selengkapnya tentang Batch .NET, lihat dokumentasi referensi.

Cuplikan kode berikut menggunakan metode PoolOperations.ListSupportedImages untuk memilih dari daftar kombinasi SKU citra dan simpul Marketplace yang saat ini didukung. Teknik ini direkomendasikan, karena daftar kombinasi yang didukung dapat berubah dari waktu ke waktu. Umumnya, kombinasi yang didukung ditambahkan.

// 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();

Meski cuplikan sebelumnya menggunakan metode PoolOperations.istSupportedImages untuk secara dinamis mencantumkan dan memilih opsi dari kombinasi SKU agen simpul dan citra yang didukung (disarankan), Anda juga dapat mengonfigurasikan ImageReference secara eksplisit:

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

Sambungkan ke simpul Linux menggunakan SSH

Selama pengembangan atau saat memecahkan masalah, Anda mungkin merasa perlu untuk masuk ke simpul di kumpulan Anda. Tidak seperti simpul komputasi Windows, Anda tidak dapat menggunakan Protokol Desktop Jarak Jauh (RDP) untuk menyambungkan ke simpul Linux. Sebaliknya, layanan Batch memungkinkan akses SSH pada setiap simpul untuk koneksi jarak jauh.

Cuplikan kode Python berikut membuat pengguna pada setiap simpul dalam kumpulan, yang diperlukan untuk koneksi jarak jauh. Lalu mencetak informasi koneksi shell aman (SSH) untuk setiap simpul.

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))

Kode ini akan memiliki output yang mirip dengan contoh berikut. Dalam hal ini, kumpulan berisi empat simpul 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

Alih-alih kata sandi, Anda dapat menentukan kunci publik SSH saat membuat pengguna pada simpul.

Di Python SDK, gunakan parameter ssh_public_key pada ComputeNodeUser.

Di .NET, gunakan properti ComputeNodeUser.SshPublicKey.

Harga

Azure Batch dibangun pada teknologi Azure Cloud Services dan Azure Virtual Machines. Layanan Batch itu sendiri ditawarkan tanpa biaya, yang berarti Anda hanya dikenakan biaya untuk sumber daya komputasi (dan biaya terkait) yang dikonsumsi solusi Batch Anda. Ketika memilih Konfigurasi Komputer Virtual, Anda dikenakan biaya berdasarkan struktur harga Komputer Virtual.

Jika menyebarkan aplikasi ke simpul Batch menggunakan paket aplikasi, Anda juga dikenakan biaya untuk sumber daya Azure Storage yang digunakan paket aplikasi Anda.

Langkah berikutnya