培训
模块
为 Azure 虚拟桌面创建和管理会话主机映像 - Training
共享映像库简化了整个组织的自定义映像共享。 自定义映像可用于启动部署任务,例如预加载应用程序、应用程序配置和其他 OS 配置。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用虚拟机配置创建 Azure Batch 池时,需指定一个虚拟机 (VM) 映像,为池中每个计算节点提供操作系统。 你可以使用受支持的 Azure 市场映像创建虚拟机池,或者使用 Azure Compute Gallery 映像创建自定义映像。
使用 Azure Compute Gallery 创建自定义映像时,可以控制操作系统类型和配置,以及数据磁盘的类型。 共享映像可以包含应用程序和引用数据,Batch 池节点预配好后即可使用这些数据。
也可根据环境的需要创建多个映像版本。 在使用某个映像版本创建 VM 时,将使用该映像版本来创建 VM 的新磁盘。
在准备池的计算节点以运行 Batch 工作负荷时,使用共享映像可以节省时间。 可以在每个预配后的计算节点上使用 Azure 市场映像并安装软件,但通常情况下,使用共享映像会更加高效。 另外,可以为共享映像指定多个副本。这样,当你创建包含多个 VM(600 个 VM 以上)的池时,就会节省创建池的时间。
使用根据方案配置的共享映像有几个优点:
备注
需要使用 Microsoft Entra ID 进行身份验证。 如果使用共享密钥身份验证,则将收到身份验证错误。
备注
如果共享映像与批处理帐户不在同一订阅中,则必须为使用共享映像的订阅注册 Microsoft.Batch 资源提供程序。 这两个订阅必须位于同一个 Microsoft Entra 租户中。
只要映像的副本与 Batch 帐户位于同一区域,该映像就可以位于不同区域中。
如果使用 Microsoft Entra 应用程序通过 Azure Compute Gallery 映像创建自定义映像池,必须向该应用程序授予 Azure 内置角色,使其能够访问共享映像。 可以通过导航到共享映像,选择“访问控制(IAM)”,并为应用程序添加角色分配,在 Azure 门户中授予此访问权限。
备注
Azure Compute Gallery 映像的读取者权限不足,因为它们需要执行以下最低操作:Microsoft.Compute/disks/beginGetAccess/action 以便进行适当的访问。
在 Azure 中,可以基于托管映像准备共享映像,托管映像可通过以下方式创建:
备注
Batch 仅支持通用共享映像;专用共享映像无法用于创建池。
以下步骤展示了如何准备 VM、创建快照,然后基于该快照创建映像。
若要为映像创建新的 VM,请使用 Batch 支持的 Azure 市场映像作为托管映像的基础映像。
若要获取 Azure Batch 支持的当前 Azure 市场映像引用的完整列表,请使用以下 API 之一返回 Windows 和 Linux VM 映像的列表:
创建 VM 时,请遵循这些准则:
需要创建 Azure Compute Gallery,才能提供自定义映像。 在以下步骤中,创建映像时,请选择此库。 若要了解如何为映像创建 Azure Compute Gallery,请参阅 创建 Azure Compute Gallery。
若要在门户中从 VM 创建映像,请参阅捕获 VM 的映像。
若要使用 VM 以外的源创建映像,请参阅创建映像。
备注
如果基础映像包含购买计划信息,请确保库映像包含与基础映像相同的购买计划信息。 有关如何创建包含购买计划的映像的详细信息,请参阅在创建映像时提供 Azure 市场购买计划信息。
如果基础映像没有购买计划信息,请避免为库映像指定任何购买计划信息。
有关这些市场映像的购买计划信息,请参阅 Linux 或 Windows VM 指南。
使用 Azure PowerShell Get-AzGalleryImageDefinition 或 Azure CLI az sig image-definition show 检查库映像是否包含正确的计划信息。
若要使用 Azure CLI 从共享映像创建池,请使用 az batch pool create
命令。 在 --image
字段中指定共享映像 ID。 确保 OS 类型和 SKU 与 --node-agent-sku-id
指定的版本匹配
重要
节点代理 SKU ID 必须与发布者/产品/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# 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 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 门户中,使用以下步骤从共享映像创建池。
如果打算使用共享映像创建包含数百或数千 VM 或更多 VM 的池,请按以下指南操作。
Azure Compute Gallery 副本数。 对于实例数多达 300 的每个池,我们建议至少保留一个副本。 例如,如果要创建包含 3,000 个 VM 的池,则应至少保留映像的 10 个副本。 我们始终建议保留比最低要求更多的副本,以便获得更好的性能。
调整超时。 如果池包含固定数目的节点(如果池不会自动缩放),请根据池大小增大池的 resizeTimeout
属性的值。 对于每 1,000 个 VM,建议的调整超时值至少为 15 分钟。 例如,对于包含 2,000 个 VM 的池,建议的调整超时值至少为 30 分钟。
培训
模块
为 Azure 虚拟桌面创建和管理会话主机映像 - Training
共享映像库简化了整个组织的自定义映像共享。 自定义映像可用于启动部署任务,例如预加载应用程序、应用程序配置和其他 OS 配置。