Usare la raccolta di calcolo di Azure per creare un pool di immagini personalizzato

Quando si crea un pool in Azure Batch usando la configurazione della macchina virtuale, specificare l'immagine di macchina virtuale (VM) che fornisce la configurazione del sistema operativo per ogni nodo di calcolo nel pool. È possibile creare un pool di macchine virtuali con un'immagine di Azure Marketplace supportata o creare un'immagine personalizzata con un'immagine della raccolta di calcolo di Azure.

Quando si usa la raccolta di calcolo di Azure per l'immagine personalizzata, si ha il controllo sul tipo e sulla configurazione del sistema operativo, nonché sul tipo di dischi dati. L'immagine condivisa può includere applicazioni e dati di riferimento che diventano disponibili in tutti i nodi del pool di Batch non appena viene effettuato il provisioning.

È possibile inoltre avere più versioni di un'immagine in base alle necessità del proprio ambiente. Quando si usa una versione dell'immagine per creare una macchina virtuale, vengono creati nuovi dischi per la VM.

L'uso di un'Immagine condivisa permette di risparmiare tempo nel preparare i nodi di calcolo del pool per l'esecuzione del carico di lavoro di Batch. È possibile usare un'immagine di Azure Marketplace e installare il software in ogni nodo di calcolo dopo averne effettuato il provisioning, tuttavia l'uso di un'Immagine condivisa in genere è più efficiente. Inoltre, è possibile specificare più repliche per l'Immagine condivisa, in modo tale che quando si creano pool con molte VM (più di 600), si risparmia tempo durante la creazione degli stessi.

L'uso di un'Immagine condivisa configurata per uno scenario specifico può essere caratterizzato da numerosi vantaggi:

  • Usare le stesse immagini tra le diverse aree. È possibile creare repliche di Immagini condivise tra diverse aree in modo che tutti i pool usino la stessa immagine.
  • Configurare il sistema operativo. È possibile personalizzare la configurazione del disco del sistema operativo dell'immagine.
  • Pre-installare applicazioni. La pre-installazione delle applicazioni sul disco del sistema operativo risulta essere più efficiente e meno soggetta a errori rispetto all'installazione di applicazioni dopo il provisioning dei nodi di calcolo con un'attività di avvio.
  • Copiare grandi quantità di dati una volta sola. Incorporare i dati statici nell'Immagine condivisa gestita copiandoli nei dischi dati di un'immagine gestita. Questa operazione deve essere eseguita solo una volta e consente di rendere i dati disponibili per ogni nodo del pool.
  • Aumentare le dimensioni dei pool. Con Azure Compute Gallery è possibile creare pool di dimensioni maggiori con le immagini personalizzate insieme a più repliche di immagini condivise.
  • Prestazioni migliori rispetto all'uso di un'immagine gestita come immagine personalizzata. Per un pool di immagini personalizzate dell'immagine condivisa, il tempo necessario per raggiungere lo stato stabile è fino al 25% più veloce e la latenza di inattività della macchina virtuale è fino al 30% più breve.
  • Controllo delle versioni delle immagini e raggruppamento per la semplificazione della gestione. La definizione di raggruppamento delle immagini contiene informazioni sui motivi per cui è stata creata l'immagine, sul sistema operativo per cui è stata creata e le informazioni sull'uso. Il raggruppamento delle immagini consente una gestione più semplice delle stesse. Per altre informazioni, vedere Definizioni delle immagini.

Prerequisiti

Nota

L'autenticazione con Microsoft Entra ID è obbligatoria. Se si usa l'autenticazione con chiave condivisa, verrà visualizzato un errore di autenticazione.

  • un'immagine della raccolta di calcolo di Azure. Per creare un'Immagine condivisa, è necessario avere o creare una risorsa immagine gestita. È consigliabile creare l'immagine dagli snapshot del disco del sistema operativo della macchina virtuale e, facoltativamente, i relativi dischi dati collegati.

Nota

Se l'immagine condivisa non si trova nella stessa sottoscrizione dell'account Batch, è necessario registrare il provider di risorse Microsoft.Batch per tale sottoscrizione. Le due sottoscrizioni devono trovarsi nello stesso tenant di Microsoft Entra.

L'immagine può trovarsi in un'area diversa purché disponga di repliche nella stessa area dell'account Batch.

Se si usa un'applicazione Microsoft Entra per creare un pool di immagini personalizzato con un'immagine della raccolta di calcolo di Azure, all'applicazione deve essere stato concesso un ruolo predefinito di Azure che consente l'accesso all'immagine condivisa. È possibile concedere questo accesso nel portale di Azure passando all'immagine condivisa, selezionando Controllo di accesso (IAM) e aggiungendo un'assegnazione di ruolo per l'applicazione.

Nota

Le autorizzazioni di lettura per l'immagine della raccolta di calcolo di Azure non sono adeguate perché richiedono l'esecuzione dell'azione minima seguente: Microsoft.Compute/disks/beginGetAccess/action per l'accesso appropriato.

Preparare un'immagine condivisa

In Azure è possibile preparare un'immagine condivisa da un'immagine gestita, che può essere creata da:

  • Snapshot dei dischi dati e sistema operativo di una macchina virtuale di Azure
  • Una macchina virtuale generalizzata di Azure con dischi gestiti
  • Un disco rigido virtuale locale generalizzato caricato nel cloud

Nota

Batch supporta solo immagini condivise generalizzate; Non è possibile usare un'immagine condivisa specializzata per creare un pool.

I passaggi seguenti illustrano come preparare una macchina virtuale, acquisire uno snapshot e creare un'immagine dallo snapshot.

Preparare una VM

Se si sta creando una nuova macchina virtuale per l'immagine, usare l'immagine di Azure Marketplace supportata da Batch come immagine di base per l'immagine gestita.

Per ottenere un elenco completo dei riferimenti correnti alle immagini di Azure Marketplace supportate da Azure Batch, usare una delle API seguenti per restituire un elenco di immagini di macchine virtuali Windows e Linux:

Per la creazione di macchine virtuali, seguire queste linee guida:

  • Assicurarsi che la macchina virtuale venga creata con un disco gestito. Questa è l'impostazione di archiviazione predefinita quando si crea una macchina virtuale.
  • Non installare le estensioni di Azure, ad esempio l'estensione Script personalizzato, nella macchina virtuale. Se l'immagine contiene un'estensione preinstallata, Azure può incontrare alcuni problemi durante la distribuzione del pool di Batch.
  • Quando si usano dischi dati allegati è necessario montare e formattare i dischi all'interno di una macchina virtuale per poterli usare.
  • Verificare che l'immagine del sistema operativo di base usi l'unità temporanea predefinita. L'agente del nodo Batch attualmente prevede l'uso dell'unità temporanea predefinita.
  • Assicurarsi che il disco del sistema operativo non sia crittografato.
  • Quando la VM è in esecuzione, connetterla tramite RDP (per Windows) o SSH (per Linux). Installare il software necessario o copiare i dati desiderati.
  • Per un provisioning più rapido del pool, usare l'impostazione della cache del disco ReadWrite per il disco del sistema operativo della macchina virtuale.

È necessario creare una raccolta di calcolo di Azure per rendere disponibile l'immagine personalizzata. Selezionare questa raccolta durante la creazione dell'immagine nei passaggi seguenti. Per informazioni su come creare una raccolta di calcolo di Azure per le immagini, vedere Creare una raccolta di calcolo di Azure.

Creare un'immagine

Per creare un'immagine da una macchina virtuale nel portale, vedere Acquisire un'immagine di una macchina virtuale.

Per creare un'immagine usando un'origine diversa da una macchina virtuale, vedere Creare un'immagine.

Nota

Se l'immagine di base contiene informazioni sul piano di acquisto, assicurarsi che l'immagine della raccolta disponga di informazioni identiche sul piano di acquisto dell'immagine di base. Per altre informazioni sulla creazione di un'immagine con piano di acquisto, vedere Fornire informazioni sul piano di acquisto di Azure Marketplace durante la creazione di immagini.

Se l'immagine di base non contiene informazioni sul piano di acquisto, evitare di specificare informazioni sul piano di acquisto per l'immagine della raccolta.

Per informazioni sul piano di acquisto su queste immagini del Marketplace, vedere le linee guida per le macchine virtuali Linux o Windows .

Usare Azure PowerShell Get-AzGalleryImageDefinition o l'interfaccia della riga di comando di Azure az sig image-definition show per verificare se l'immagine della raccolta contiene informazioni corrette sul piano.

Creare un pool da Immagini condivise con l'interfaccia della riga di comando di Azure

Per creare un pool dalle Immagini condivise con l'interfaccia della riga di comando di Azure, usare il comando az batch pool create. Specificare l'ID Immagine condivisa nel campo --image. Assicurarsi che il tipo di sistema operativo e lo SKU corrispondano alle versioni specificate da --node-agent-sku-id

Importante

L'ID SKU dell'agente del nodo deve essere allineato al server di pubblicazione/offerta/SKU per consentire l'avvio del nodo.

az batch pool create \
    --id mypool --vm-size Standard_A1_v2 \
    --target-dedicated-nodes 2 \
    --image "/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}" \
    --{node-agent-sku-id}

Creare un pool da Immagini condivise con C#

In alternativa, è possibile creare un pool da un'Immagine condivisa con l'SDK C#.

private static VirtualMachineConfiguration CreateVirtualMachineConfiguration(ImageReference imageReference)
{
    return new VirtualMachineConfiguration(
        imageReference: imageReference,
        nodeAgentSkuId: {});
}

private static ImageReference CreateImageReference()
{
    return new ImageReference(
        virtualMachineImageId: "/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}");
}

private static void CreateBatchPool(BatchClient batchClient, VirtualMachineConfiguration vmConfiguration)
{
    try
    {
        CloudPool pool = batchClient.PoolOperations.CreatePool(
            poolId: PoolId,
            targetDedicatedComputeNodes: PoolNodeCount,
            virtualMachineSize: PoolVMSize,
            virtualMachineConfiguration: vmConfiguration);

        pool.Commit();
    }
    ...
}

Creare un pool da Immagini condivise con Python

È inoltre possibile creare un pool da un'Immagine condivisa con l'SDK Python:

# Import the required modules from the
# Azure Batch Client Library for Python
import azure.batch as batch
import azure.batch.models as batchmodels
from azure.common.credentials import ServicePrincipalCredentials

# Specify Batch account and service principal account credentials
account = "{batch-account-name}"
batch_url = "{batch-account-url}"
ad_client_id = "{sp-client-id}"
ad_tenant = "{tenant-id}"
ad_secret = "{sp-secret}"

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

# Initialize the Batch client with Azure AD authentication
creds = ServicePrincipalCredentials(
    client_id=ad_client_id,
    secret=ad_secret,
    tenant=ad_tenant,
    resource="https://batch.core.windows.net/"
)
client = batch.BatchServiceClient(creds, batch_url)

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

# Create an ImageReference which specifies the image from
# Azure Compute Gallery to install on the nodes.
ir = batchmodels.ImageReference(
    virtual_machine_image_id="/subscriptions/{sub id}/resourceGroups/{resource group name}/providers/Microsoft.Compute/galleries/{gallery name}/images/{image definition name}/versions/{version id}"
)

# Create the VirtualMachineConfiguration, specifying
# the VM image reference and the Batch node agent to
# be installed on the node.
vmc = batchmodels.VirtualMachineConfiguration(
    image_reference=ir,
    {node_agent_sku_id}
)

# Create the unbound pool
new_pool = batchmodels.PoolAddParameter(
    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.pool.add(new_pool)

Creare un pool da un'immagine condivisa o da un'immagine personalizzata usando il portale di Azure

Usare la procedura seguente per creare un pool da un'Immagine condivisa nel portale di Azure.

  1. Apri il portale di Azure.
  2. Passare ad account Batch e selezionare l'account.
  3. Selezionare Pool quindi Aggiungi per creare un nuovo pool.
  4. Nella sezione Tipo di immagine selezionare Raccolta di calcolo di Azure.
  5. Completare le sezioni rimanenti con le informazioni relative all'immagine gestita.
  6. Seleziona OK.
  7. Dopo aver allocato il nodo, usare Connessione per generare l'utente e il file RDP per Windows OPPURE usare SSH per consentire a Linux di accedere al nodo allocato e verificare.

Creare un pool da un'Immagine condivisa con il portale.

Considerazioni per i pool di grandi dimensioni

Se si prevede di creare un pool con centinaia o migliaia di VM o più con un'immagine condivisa, usare le indicazioni seguenti.

  • Numeri di replica della raccolta di calcolo di Azure. Per ogni pool con un massimo di 300 istanze, è consigliabile mantenere almeno una replica. Ad esempio, se si sta creando un pool con 3.000 macchine virtuali, è consigliabile mantenere almeno 10 repliche dell'immagine. Per ottenere prestazioni migliori, è sempre consigliabile mantenere un numero maggiore di repliche rispetto ai requisiti minimi.

  • Timeout ridimensionamento. Aumentare la proprietà resizeTimeout del pool in base alle dimensioni del pool, se il pool contiene un numero fisso di nodi (e se non viene ridimensionato automaticamente). Per ogni 1.000 macchine virtuali, il timeout di ridimensionamento consigliato è di almeno 15 minuti. Ad esempio, il timeout di ridimensionamento consigliato per un pool con 2.000 macchine virtuali è di almeno 30 minuti.

Passaggi successivi