将临时 OS 磁盘节点用于 Azure Batch 池

某些 Azure 虚拟机 (VM) 系列支持使用临时 OS 磁盘,这些磁盘会在节点虚拟机本地存储上创建 OS 磁盘。 默认的 Batch 池配置对节点 OS 磁盘使用 Azure 托管磁盘,其中托管磁盘类似于物理磁盘,但已经过虚拟化并保留在远程 Azure 存储中。

对于 Batch 工作负载,使用临时 OS 磁盘的主要好处是降低了与池相关的成本、使得缩短节点启动时间成为可能,而且由于 OS 磁盘性能更好而提高了应用程序的性能。 在选择是否应对工作负载使用临时 OS 磁盘时,请考虑以下影响:

  • 到临时 OS 磁盘的读/写延迟更低,这可能会提高应用程序性能。
  • 临时 OS 磁盘没有存储费用,而每个托管的 OS 磁盘都会产生费用。
  • 在 Batch 支持的情况下,与托管磁盘相比,使用临时磁盘时能更快地重置计算节点的映像。
  • 使用临时 OS 磁盘时,节点启动时间可能略微缩短。
  • 临时 OS 磁盘的耐用性和可用性不高;当 VM 因任何原因被删除时,OS 磁盘会丢失。 由于 Batch 工作负载本质上是无状态的,并且通常不依赖于对持久化 OS 磁盘的更改,因此临时 OS 磁盘适用于大多数 Batch 工作负载。
  • 目前并非所有 Azure VM 系列都支持临时 OS 磁盘。 如果 VM 大小不支持临时 OS 磁盘,则必须使用托管 OS 磁盘。

注意

临时 OS 磁盘配置仅适用于“virtualMachineConfiguration”池,不可用于“cloudServiceConfiguration”池。 建议为 Batch 池使用“virtualMachineConfiguration”,因为“cloudServiceConfiguration”池不支持某些功能,而且没有计划任何新功能。 2024 年 2 月 29 日之后,无法创建新的“cloudServiceConfiguration”池,也无法向现有池添加新节点。 有关详细信息,请参阅将 Batch 池配置从云服务迁移到虚拟机

VM 系列支持

若要确定 VM 系列是否支持临时 OS 磁盘,请查看每个 VM 实例的相关文档。 例如,Ddv4 和 Ddsv4 系列支持临时 OS 磁盘。

或者,可通过编程方式查询以检查“EphemeralOSDiskSupported”功能。 临时 OS 磁盘常见问题解答中提供了一个示例 PowerShell cmdlet,它可用于查询此功能。

创建一个使用临时 OS 磁盘的池

默认情况下未设置 EphemeralOSDiskSettings 属性。 必须设置此属性才能在池节点上配置对临时 OS 磁盘的使用。

提示

由于服务托管的逐出策略,临时 OS 磁盘不能与 Batch 池中的现成 VM 结合使用。

以下示例显示如何创建一个 Batch 池,其中节点使用临时 OS 磁盘而非托管磁盘。

代码示例

此代码片段演示如何使用 Azure Batch Python SDK 和临时磁盘(缓存)创建具有临时 OS 磁盘的池。

virtual_machine_configuration=batch.models.VirtualMachineConfiguration(
    image_reference=image_ref_to_use,
    node_agent_sku_id=node_sku_id,
    os_disk=batch.models.OSDisk(
        ephemeral_os_disk_settings=batch.models.DiffDiskSettings(
            placement=batch.models.DiffDiskPlacement.cache_disk
        )
    )
)

这是相同的代码片段,但它用于使用 Azure Batch .NET SDK 和 C# 创建具有临时 OS 磁盘的池。

VirtualMachineConfiguration virtualMachineConfiguration = new VirtualMachineConfiguration(
        imageReference: imageReference,
        nodeAgentSkuId: nodeAgentSku
        );
virtualMachineConfiguration.OSDisk = new OSDisk();
virtualMachineConfiguration.OSDisk.EphemeralOSDiskSettings = new DiffDiskSettings();
virtualMachineConfiguration.OSDisk.EphemeralOSDiskSettings.Placement = DiffDiskPlacement.CacheDisk;

后续步骤