使用 Azure Compute Gallery 來建立自訂映像集區
當您使用虛擬機器設定建立 Azure Batch 集區時,需指定 VM 映像,以提供集區中每個計算節點的作業系統。 您可以使用支援的 Azure Marketplace 映像來建立虛擬機器的集區,或使用 Azure Compute Gallery 映像來建立自訂映像。
Azure Compute Gallery 的優點
使用 Azure Compute Gallery 建立自訂映像時,您可以控制作業系統類型和設定,以及資料磁碟的類型。 共用映像可能包含應用程式和參考資料,只要將其佈建便可在所有 Batch 集區節點上使用。
您也可以視需要為環境準備多個映像版本。 當您使用映像版本來建立 VM 時,系統會使用映像版本來建立 VM 的新磁碟。
使用共用映像可以節省準備集區計算節點以執行 Batch 工作負載的時間。 您可以使用 Azure Marketplace 映像,並且在佈建後於每個節點上安裝軟體,但使用共用映像通常更有效率。 此外,您可以為共用映像指定多個複本,如此一來,當您建立具有許多 VM 的集區 (超過 600 個 VM) 時,就可以節省建立集區的時間。
使用專為您的案例設定的共用映像有幾個優點:
- 跨區域使用相同映像。 您可以跨不同區域來建立共用映像複本,讓您的所有集區都能使用相同映像。
- 設定作業系統 (OS)。 您可以自訂映像作業系統磁碟的設定。
- 預先安裝應用程式。 在 OS 磁碟上預先安裝應用程式,與在佈建計算節點之後使用開始工作來安裝應用程式相比,這樣更有效率且更不容易出錯。
- 一次複製大量資料。 藉由將靜態資料複製到受控映像的資料磁碟,使靜態資料成為受控共用映像的一部分。 這只需要執行一次,就能將資料提供給集區的每個節點。
- 讓集區變大。 使用 Azure Compute Gallery 時,您可以使用自訂映像及更多的共用映像複本來建立更大的集區。
- 效能高於只使用受控映像作為自訂映像。 針對共用映像自訂映像集區,達到穩定狀態所花的時間可加快最多 25%,且 VM 閒置延遲可縮短最多 30%。
- 對映像進行版本控制和分組,以便管理。 映像群組定義包含建立映像的原因、目標作業系統,以及使用映像的相關資訊。 群組映像可讓您更輕鬆地管理映像。 如需詳細資訊,請參閱映像定義。
必要條件
- Azure Batch 帳戶。 若要建立 Batch 帳戶,請參閱使用 Azure 入口網站或 Azure CLI 的 Batch 快速入門。
注意
需要使用 Microsoft Entra ID 進行驗證。 如果您使用共用金鑰驗證,則會收到驗證錯誤。
- Azure Compute Gallery 映像。 若要建立共用映像,您必須擁有或建立受控映像資源。 您應該從 VM 之 OS 磁碟 (以及視需要從其連結之資料磁碟) 的快照集建立該映像。
注意
如果共用映像與 Batch 帳戶不是在相同的訂用帳戶中,您必須為使用該共用映像的訂用帳戶註冊 Microsoft.Batch 資源提供者。 兩個訂用帳戶必須位於相同的 Microsoft Entra 租用戶下。
只要映像的複本與您的 Batch 帳戶位於相同的區域,映像就可以位於不同的區域。
如果您使用 Microsoft Entra 應用程式來以 Azure Compute Gallery 映像建立自訂映像集區,該應用程式必須獲授與 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 映像清單:
- PowerShell:Azure Batch 支援的映像
- Azure CLI:Azure Batch 集區支援的映像
- Batch 服務 API:Batch 服務 API 和 Azure Batch 服務支援的映像
建立 VM 時,請遵循下列指導方針:
- 請確定以受控磁碟建立 VM。 當您建立 VM 時,這是預設的儲存體設定。
- 不要在 VM 上安裝 Azure 延伸模組,例如自訂指令碼延伸模組。 如果映像包含預先安裝的延伸模組,則 Azure 在部署 Batch 集區時可能會遇到問題。
- 使用連結的資料磁碟時,您必須在 VM 內掛接並格式化磁碟,才能使用這些磁碟。
- 確定您提供的基本 OS 映像使用預設的暫存磁碟機。 Batch 節點代理程式目前需要有預設的暫存磁碟機。
- 確定 OS 磁碟未加密。
- 一旦 VM 開始執行之後,請透過 RDP (適用於 Windows) 或 SSH (適用於 Linux) 向它連線。 安裝任何必要的軟體或複製所需的資料。
- 如需更快速的集區佈建,請對 VM 的 OS 磁碟使用 ReadWrite 磁碟快取設定。
建立 Azure Compute Gallery
您必須建立 Azure Compute Gallery,讓自訂映像可供使用。 在下列步驟中建立映像時,請選取此資源庫。 若要了解如何為映像建立 Azure Compute Gallery,請參閱建立 Azure Compute Gallery。
建立映像
若要在入口網站中從 VM 建立映像,請參閱擷取 VM 的映像。
若要使用 VM 以外的來源建立映像,請參閱建立映像。
注意
如果基礎映像有購買方案資訊,請確定資源庫映像與基礎映像具有相同的購買方案資訊。 如需有關建立具有購買方案之映像的詳細資訊,請參閱建立映像時提供 Azure Marketplace 購買方案資訊。
如果基礎映像沒有購買方案資訊,請避免為資源庫映像指定任何購買方案資訊。
如需這些 Marketplace 映像的購買方案相關資訊,請參閱 Linux 或 Windows 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 入口網站中,您可以使用下列步驟從共用映像建立集區。
- 開啟 Azure 入口網站。
- 移至 [Batch 帳戶] 並選取您的帳戶。
- 依序選取 [集區] 和 [新增],以建立新的集區。
- 在 [映像類型] 區段中,選取 [Azure Compute Gallery]。
- 使用受控映像的相關資訊來完成其餘各節。
- 選取 [確定]。
- 配置節點之後,請使用 [連線] 來產生使用者和適用於 Windows 的 RDP 檔案,或使用 SSH 來讓 Linux 登入所配置的節點並確認。
大型集區的考量
如果您打算使用共用映像來建立具有數百部、數千部或更多 VM 的集區,請使用下列指導方針。
Azure Compute Gallery 複本數目。 針對有多達 300 個執行個體的每個集區,建議至少保留一個複本。 例如,如果您要建立的集區包含 3,000 個 VM,則應該至少保留映像的 10 個複本。 為獲得更好的效能,我們一律建議您保留高於最低需求的複本數目。
調整逾時。 如果您的集區包含固定數目的節點 (如果不進行自動調整),請根據集區大小來增加集區的
resizeTimeout
屬性。 針對每 1,000 部 VM,調整大小的建議逾時時間至少為 15 分鐘。 例如,針對具有 2,000 部 VM 的集區,調整大小的建議逾時時間應至少為 30 分鐘。
下一步
- 如需更深入的 Batch 概觀,請參閱 Batch 服務工作流程和資源。
- 了解 Azure Compute Gallery。