Verwenden der Azure Compute Gallery zum Erstellen eines benutzerdefinierten Imagepools

Wenn Sie einen Azure Batch-Pool mithilfe der Konfiguration des virtuellen Computers erstellen, geben Sie das Image eines virtuellen Computers (VM) an, das das Betriebssystem für jeden Computeknoten im Pool bereitstellt. Sie können einen Pool von virtuellen Computern mit einem unterstützten Image vom Azure Marketplace erstellen oder ein benutzerdefiniertes Image mit einem Image aus der Azure Compute Gallery erstellen.

Wenn Sie die Azure Compute Gallery für Ihr benutzerdefiniertes Image verwenden, haben Sie die Kontrolle über den Typ und die Konfiguration des Betriebssystems sowie über den Typ der Datenträger. Ihr freigegebenes Image kann Anwendungen und Verweisdaten enthalten, die auf allen Knoten des Batch-Pools verfügbar werden, sobald sie bereitgestellt werden.

Sie können auch nach Bedarf mehrere Versionen eines Image für Ihre Umgebung verwenden. Wenn Sie eine Imageversion zum Erstellen eines virtuellen Computers verwenden, wird die Imageversion verwendet, um neue Datenträger für den virtuellen Computer zu erstellen.

Durch die Verwendung eines freigegebenen Image sparen Sie Zeit beim Vorbereiten der Computekonten des Pools auf die Ausführung Ihrer Batch-Workload. Es ist zwar möglich, nach der Bereitstellung ein Azure Marketplace-Image zu verwenden und Software auf jedem Computeknoten zu installieren, aber die Verwendung eines freigegebenen Image ist in der Regel effizienter. Darüber hinaus können Sie mehrere Replikate für das freigegebene Image angeben, sodass Sie beim Erstellen von Pools mit vielen VMs (mehr als 600 VMs) Zeit bei der Poolerstellung sparen.

Die Verwendung eines für Ihr Szenario konfigurierten freigegebenen Image kann mehrere Vorteile bieten:

  • Dieselben Images in den Regionen verwenden: Sie können freigegebene Imagereplikate in verschiedenen Regionen erstellen, sodass alle Pools dasselbe Image verwenden.
  • Das Betriebssystem (Operating System, OS) konfigurieren: Sie können die Konfiguration des Betriebssystemdatenträgers des Images anpassen.
  • Anwendungen vorab installieren: Das Vorinstallieren von Anwendungen auf dem Betriebssystemdatenträger ist effizienter und weniger fehleranfällig als die Installation von Anwendungen nach der Bereitstellung der Computeknoten mit einem Starttask.
  • Große Datenmengen einmalig kopieren: Sie können statische Daten zu einem Teil des verwalteten freigegebenen Image machen, indem Sie die Daten auf die Datenträger eines verwalteten Image kopieren. Dieser Vorgang muss nur einmal ausgeführt werden und stellt Daten für jeden Knoten des Pools zur Verfügung.
  • Pools auf größere Größen skalieren: Mit Azure Compute Gallery können Sie größere Pools mit Ihren benutzerdefinierten Images zusammen mit weiteren freigegebenen Image-Replikaten erstellen.
  • Bessere Leistung als bei einfacher Verwendung eines verwalteten Images als benutzerdefiniertes Image. Bei Verwendung eines Shared Image-Pools benutzerdefinierter Images verkürzt sich die Zeit, die der Pool benötigt, um den stabilen Status zu erreichen, um bis zu 25 Prozent, und die Leerlaufzeit des virtuellen Computers verkürzt sich um bis zu 30 Prozent.
  • Versionsverwaltung und Gruppierung von Images zur einfacheren Verwaltung: Die Imagegruppierungsdefinition enthält Informationen darüber, warum das Image erstellt wurde, für welches Betriebssystem es vorgesehen ist und wie es verwendet wird. Das Gruppieren von Images ermöglicht eine einfachere Imageverwaltung. Weitere Informationen finden Sie unter Imagedefinitionen.

Voraussetzungen

Hinweis

Die Authentifizierung mit Microsoft Entra ID ist erforderlich. Wenn Sie die Authentifizierung mit gemeinsam verwendetem Schlüssel nutzen, erhalten Sie einen Authentifizierungsfehler.

  • ein Azure Compute Gallery Image. Zum Erstellen eines freigegebenen Images müssen Sie über eine verwaltete Imageressource verfügen oder eine verwaltete Imageressource erstellen. Das Image sollte auf der Grundlage von Momentaufnahmen des Betriebssystemdatenträgers des virtuellen Computers und optional seiner angefügten Datenträger erstellt werden.

Hinweis

Wenn das freigegebene Image sich nicht im gleichen Abonnement wie das Batch-Konto befindet, müssen Sie für das Abonnement den Ressourcenanbieter „Microsoft.Batch“ registrieren. Die beiden Abonnements müssen demselben Microsoft Entra-Mandanten zugeordnet sein.

Das Image kann sich in unterschiedlichen Regionen befinden, sofern es über Replikate in derselben Region wie Ihr Batch-Konto verfügt.

Wenn Sie eine Microsoft Entra-Anwendung verwenden, um einen Pool mit benutzerdefinierten Images mit einem Azure Compute Gallery-Image zu erstellen, muss dieser Anwendung eine in Azure integrierte Rolle erteilt worden sein, die ihr Zugriff auf das freigegebene Image gewährt. Sie können diesen Zugriff im Azure-Portal erteilen, indem Sie zum Shared Image navigieren, Zugriffssteuerung (IAM) auswählen und eine Rollenzuweisung für die Anwendung hinzufügen.

Hinweis

Leserberechtigungen für das Azure Compute Gallery-Image sind unzureichend, da sie die Ausführung der folgenden Mindestaktion für den entsprechenden Zugriff erfordern: Microsoft.Compute/disks/beginGetAccess/action.

Vorbereiten eines Shared Image

In Azure können Sie ein freigegebenes Image aus einem verwalteten Image vorbereiten, das seinerseits aus Folgendem erstellt werden kann:

  • Momentaufnahmen des Betriebssystems und der Datenträger eines virtuellen Azure-Computers
  • Einen generalisierten virtuellen Azure-Computer mit verwalteten Datenträgern
  • Eine generalisierte lokale VHD, die in die Cloud hochgeladen wurde

Hinweis

Batch unterstützt nur universelle freigegebene Images. Ein freigegebenes Image für einen spezifischen Anwendungsfall kann nicht zum Erstellen eines Pools verwendet werden.

In den folgenden Schritten wird gezeigt, wie Sie einen virtuellen Computer vorbereiten, eine Momentaufnahme erstellen und ein Image auf der Grundlage der Momentaufnahme erstellen.

Vorbereiten eines virtuellen Computers

Wenn Sie eine neue VM für das Image erstellen, können Sie ein von Batch unterstütztes Azure Marketplace-Image als Basisimage für Ihr verwaltetes Image verwenden.

Um eine vollständige Liste der aktuellen Azure Marketplace Imageverweise abzurufen, die von Azure Batch unterstützt werden, verwenden Sie eine der folgenden APIs, um eine Liste der Windows- und Linux-VM-Images zurückzugeben:

Beachten Sie beim Erstellen von VMs die folgenden Richtlinien:

  • Stellen Sie sicher, dass der virtuelle Computer mit einem verwalteten Datenträger erstellt wird. Dies ist die Standardeinstellung für den Speicher, wenn Sie einen virtuellen Computer erstellen.
  • Installieren Sie auf dem virtuellen Computer keine Azure-Erweiterungen wie zum Beispiel die benutzerdefinierte Skripterweiterung. Wenn das Image eine vorinstallierte Erweiterung enthält, treten in Azure beim Bereitstellen des Batch-Pools unter Umständen Probleme auf.
  • Wenn Sie die angefügten Datenträger verwenden, müssen Sie sie innerhalb eines virtuellen Computers einbinden und formatieren, um sie zu verwenden.
  • Stellen Sie sicher, dass das von Ihnen bereitgestellte Basisbetriebssystem-Image den standardmäßigen temporären Datenträger verwendet. Der Batch-Knoten-Agent erwartet derzeit den standardmäßigen temporären Datenträger.
  • Stellen Sie sicher, dass der Betriebssystemdatenträger nicht verschlüsselt ist.
  • Sobald der virtuelle Computer ausgeführt wird, stellen Sie über RDP (für Windows) oder SSH (für Linux) eine Verbindung mit ihm her. Installieren Sie erforderliche Software, oder kopieren Sie die gewünschten Daten.
  • Für eine schnellere Poolbereitstellung verwenden Sie die Datenträgercache-Einstellung „ReadWrite“ für den Betriebssystemdatenträger der VM.

Sie müssen einen Azure Compute Gallery erstellen, um das benutzerdefinierte Image verfügbar zu machen. Wählen Sie diesen Katalog aus, wenn Sie in den folgenden Schritten ein Image erstellen. Informationen zum Erstellen einer Azure Compute Gallery für Ihre Images finden Sie unter Erstellen einer Azure Compute Gallery.

Erstellen eines Images

Informationen zum Erstellen eines Images von einer VM im Portal finden Sie unter Capture an image of a VM (Erfassen eines Images eines virtuellen Computers).

Wie Sie ein Image mit einer anderen Quelle als einer VM erstellen, erfahren Sie unter Erstellen eines Images.

Hinweis

Wenn das Basisimage über Informationen zum Erwerbsplan verfügt, stellen Sie sicher, dass das Katalogimage die gleichen Erwerbsplaninformationen wie das Basisimage enthält. Weitere Informationen zum Erstellen eines Images, das über einen Erwerbsplan verfügt, finden Sie unter Bereitstellen von Azure Marketplace-Erwerbsplaninformationen beim Erstellen von Images.

Wenn das Basisbild keine Erwerbsplaninformationen enthält, geben Sie möglichst keine Erwerbsplaninformationen für das Katalogimage an.

Erwerbsplaninformationen zu diesen Marketplace-Images finden Sie in der Anleitung für Linux- oder Windows-VMs.

Verwenden Sie in Azure PowerShell Get-AzGalleryImageDefinition oder den Azure CLI-Befehl az sig image-definition show, um zu überprüfen, ob das Katalogimage die richtigen Planinformationen enthält.

Erstellen eines Pools aus einem freigegebenen Image mithilfe der Azure-Befehlszeilenschnittstelle

Um mithilfe der Azure-Befehlszeilenschnittstelle einen Pool aus Ihrem freigegebenen Image zu erstellen, verwenden Sie den Befehl az batch pool create. Geben Sie im Feld --image die ID des freigegebenen Image an. Stellen Sie sicher, dass der Betriebssystemtyp und die SKU mit den von --node-agent-sku-id angegebenen Versionen übereinstimmen.

Wichtig

Die SKU-ID des Knoten-Agents muss an der Herausgeber-/Angebots-SKU ausgerichtet sein, damit der Knoten gestartet werden kann.

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}

Erstellen eines Pools aus einem freigegebenen Image mit C#

Alternativ können Sie einen Pool aus einem freigegebenen Image mit dem C# SDK erstellen.

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();
    }
    ...
}

Erstellen eines Pools aus einem freigegebenen Image mithilfe von Python

Sie können einen Pool aus einem freigegebenen Image auch mit dem Python SDK erstellen:

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

Erstellen eines Pools aus einem freigegebenen Image oder einem benutzerdefinierten Image über das Azure-Portal

Gehen Sie wie folgt vor, um über das Azure-Portal einen Pool auf der Grundlage eines freigegebenen Images zu erstellen:

  1. Öffnen Sie das Azure-Portal.
  2. Navigieren Sie zu Batch-Konten, und wählen Sie Ihr Konto aus.
  3. Wählen Sie Pools und anschließend Hinzufügen aus, um einen neuen Pool zu erstellen.
  4. Wählen Sie im Abschnitt Imagetyp die Option Azure Compute Gallery aus.
  5. Geben Sie in den restlichen Abschnitten Informationen zu Ihrem verwalteten Image an.
  6. Klickan Sie auf OK.
  7. Nachdem der Knoten zugewiesen wurde, verwenden Sie Connect, um Benutzer und die RDP-Datei für Windows zu generieren, ODER verwenden Sie SSH für Linux, um sich beim zugewiesenen Knoten anzumelden und zu verifizieren.

Erstellen Sie einen Pool auf der Grundlage eines freigegebenen Images mithilfe des Portals.

Überlegungen zu großen Pools

Wenn Sie beabsichtigen, einen Pool mit Hunderten oder Tausenden von VMs oder mehr mit einem freigegebenen Image zu erstellen, beachten Sie die folgenden Hinweise.

  • Azure Compute Gallery Replikatnummern. Es wird empfohlen, für jeden Pool mit bis zu 300 Instanzen mindestens ein Replikat beizubehalten. Wenn Sie z. B. einen Pool mit 3.000 VMs erstellen, sollten Sie mindestens 10 Replikate Ihres Image beibehalten. Sie sollten immer mehr Replikate beibehalten als in den Mindestanforderungen vorgesehen sind, um eine bessere Leistung zu erzielen.

  • Timeout bei Größenänderung. Wenn Ihr Pool eine feste Anzahl von Knoten enthält (also nicht automatisch skaliert wird), erhöhen Sie die Eigenschaft resizeTimeout des Pools abhängig von der Größe des Pools. Bei jeweils 1.000 VMs beträgt das empfohlene Timeout bei Größenänderung mindestens 15 Minuten. Beispielsweise beträgt das empfohlene Timeout bei Größenänderung für einen Pool mit 2.000 VMs mindestens 30 Minuten.

Nächste Schritte