使用 Azure 計算資源庫建立自定義映像集區

當您使用虛擬機組態建立 Azure Batch 集區時,您會指定 VM 映像,為集區中的每個計算節點提供操作系統。 您可以使用支援的 Azure Marketplace 映像建立虛擬機集區,或使用 Azure 計算資源庫映像建立自定義映像

當您針對自定義映像使用 Azure 計算資源庫時,您可以控制作業系統類型和組態,以及數據磁碟的類型。 您的共用映像可以包含應用程式和參考數據,這些數據會在布建后立即在所有 Batch 集區節點上取得。

您也可以視環境需要擁有多個映像版本。 當您使用映像版本來建立 VM 時,映像版本會用來建立 VM 的新磁碟。

使用共用映像可節省準備集區計算節點以執行 Batch 工作負載的時間。 布建之後,可以使用 Azure Marketplace 映射,並在每個計算節點上安裝軟體,但使用共用映像通常更有效率。 此外,您可以為共用映像指定多個複本,因此當您建立具有許多 VM 的集區(超過 600 部 VM)時,您將節省集區建立時間。

使用針對您的案例設定的共用映像可提供數個優點:

  • 跨區域使用相同的映像。 您可以跨不同區域建立共用映像複本,讓所有集區都使用相同的映像。
  • 設定作業系統 (OS)。 您可以自訂映像作業系統磁碟的設定。
  • 預安裝應用程式。 在 OS 磁碟上預先安裝應用程式比使用啟動工作佈建計算節點之後安裝應用程式更有效率且容易出錯。
  • 複製大量數據一次。 將靜態數據複製到受控映射的數據磁碟,使其成為受控共用映射的一部分。 這只需要完成一次,並讓數據可供集區的每個節點使用。
  • 將集區成長為較大的大小。 透過 Azure 計算資源庫,您可以使用自訂映像建立較大的集區,以及更多共用映像複本。
  • 效能優於只使用受控映射作為自定義映像。 若為共用映像自定義映射集區,達到穩定狀態的時間最多可快 25%,且 VM 閑置延遲縮短至 30%。
  • 映射版本設定和群組,以方便管理。 映射群組定義包含映像建立原因、映像用途,以及使用映像的相關信息。 群組影像可讓您更輕鬆地管理映像。 如需詳細資訊,請參閱 映像定義

必要條件

注意

需要使用 Microsoft Entra 識別碼進行驗證。 如果您使用共用金鑰驗證,您將會收到驗證錯誤。

  • Azure 計算資源庫映像。 若要建立共用映像,您必須擁有或建立受控映像資源。 映像應該從 VM OS 磁碟的快照集建立,並選擇性地從其鏈接的數據磁碟建立。

注意

如果共用映像不在與 Batch 帳戶相同的訂用帳戶中,您必須 註冊該訂用帳戶的 Microsoft.Batch 資源提供者 。 這兩個訂用帳戶必須位於相同的 Microsoft Entra 租使用者中。

映射可以位於不同的區域中,只要其具有與 Batch 帳戶相同區域中的複本即可。

如果您使用 Microsoft Entra 應用程式來建立具有 Azure 計算資源庫映像的自定義映射集區,該應用程式必須已獲得 Azure 內建角色 的授與,才能存取共用映射。 您可以在 Azure 入口網站 中授與此存取權,方法是流覽至 [共用映射]、選取 [訪問控制]、[IAM] 並新增應用程式的角色指派。

注意

Azure 計算資源庫映射的讀取者許可權不足,因為它們需要執行下列最低動作:Microsoft.Compute/disks/beginGetAccess/action 以取得適當的存取權。

準備共用映像

在 Azure 中,您可以從受控映射準備共用映像,您可以從下列專案建立:

  • Azure VM OS 和數據磁碟的快照集
  • 具有受控磁碟的一般化 Azure VM
  • 上傳至雲端的一般化內部部署 VHD

注意

Batch 僅支援一般化的共用映射;特製化的共用映像無法用來建立集區。

下列步驟示範如何準備 VM、擷取快照集,以及從快照集建立映射。

準備 VM

如果您要為映像建立新的 VM,請使用 Batch 支援的 Azure Marketplace 映射作為受控映像的基底映射。

若要取得 Azure Batch 所支援之目前 Azure Marketplace 映射參考的完整列表,請使用下列其中一個 API 傳回 Windows 和 Linux VM 映射列表:

建立 VM 時,請遵循下列指導方針:

  • 確定 VM 是使用受控磁碟建立的。 這是當您建立 VM 時的預設記憶體設定。
  • 請勿在 VM 上安裝 Azure 擴充功能,例如自定義腳本擴充功能。 如果映像包含預安裝的擴充功能,Azure 可能會在部署 Batch 集區時遇到問題。
  • 使用連結的數據磁碟時,您必須從 VM 內掛接和格式化磁碟,才能使用這些磁碟。
  • 請確定您提供的基底 OS 映射會使用預設暫存磁碟驅動器。 Batch 節點代理程式目前預期預設暫存磁碟驅動器。
  • 確定 OS 磁碟未加密。
  • VM 執行之後,請透過 RDP(適用於 Windows)或 SSH 連線到 VM(適用於 Linux)。 安裝任何必要的軟體或複製所需的數據。
  • 若要加快集區布建速度,請使用 VM OS 磁碟的 ReadWrite 磁碟快取設定

您必須建立 Azure 計算資源庫,讓您的自定義映像可供使用。 在下列步驟中建立映射時,請選取此資源庫。 若要瞭解如何為您的映像建立 Azure 計算資源庫,請參閱 建立 Azure 計算資源庫

建立映像

若要在入口網站中從 VM 建立映像,請參閱 擷取 VM 的映像。

若要使用 VM 以外的來源建立映像,請參閱 建立映像

注意

如果基底映像有購買方案資訊,請確定資源庫映像與基底映射具有相同的購買方案資訊。 如需建立具有購買方案之映像的詳細資訊,請參閱 建立映射時提供 Azure Marketplace 購買方案資訊。

如果基底映像沒有購買方案資訊,請避免指定資源庫映像的任何購買方案資訊。

如需這些 Marketplace 映像的購買方案資訊,請參閱 LinuxWindows VM 的指引。

使用 Azure PowerShell Get-AzGalleryImageDefinition 或 Azure CLI az sig image-definition show 來檢查資源庫映射是否有正確的計劃資訊。

使用 Azure CLI 從共用映像建立集區

若要使用 Azure CLI 從共用映像建立集區,請使用 az batch pool create 命令。 在欄位中指定共用映像標識碼 --image 。 確定 OS 類型和 SKU 符合 指定的版本 --node-agent-sku-id

重要

節點代理程式 SKU 標識碼必須與發行者/供應專案/SKU 一致,節點才能啟動。

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}

使用 C 從共用映像建立集區#

或者,您可以使用 C# SDK 從共用映像建立集區。

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

使用 Python 從共用映像建立集區

您也可以使用 Python SDK 從共享映射建立集區:

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

使用 Azure 入口網站 從共用映像或自定義映像建立集區

使用下列步驟,從 Azure 入口網站 中的共用映像建立集區。

  1. 開啟 Azure 入口網站
  2. 移至 Batch 帳戶 ,然後選取您的帳戶。
  3. 選取 [集區],然後選取 [新增] 以建立新的集區。
  4. 在 [ 映射類型 ] 區段中,選取 [Azure 計算資源庫]。
  5. 使用受控映像的相關信息完成其餘區段。
  6. 選取 [確定]。
  7. 配置節點之後,請使用 連線 來產生使用者和 Windows 的 RDP 檔案,或使用 SSH 登入已配置的節點並確認。

使用入口網站從共用映像建立集區。

大型集區的考慮

如果您打算使用共用映像建立具有數百或數千個 VM 或更多 VM 的集區,請使用下列指引。

  • Azure 計算資源庫複本編號。 針對每個具有最多 300 個實例的集區,建議您保留至少一個複本。 例如,如果您要建立具有 3,000 個 VM 的集區,您應該保留至少 10 個映射複本。 我們一律建議保留比最低需求更多的複本,以提升效能。

  • 調整逾時大小。 如果您的集區包含固定數目的節點(如果未自動調整),請根據集區大小增加 resizeTimeout 集區的屬性。 針對每 1,000 部 VM,建議的大小逾時至少為 15 分鐘。 例如,針對具有 2,000 個 VM 的集區,建議重設大小逾時至少為 30 分鐘。

下一步