Azure Batch 中的节点和池

在 Azure Batch 工作流中,计算节点(或节点)是用于处理一部分应用程序工作负荷的虚拟机 。 池是运行应用程序的节点集合。 本文将详细介绍节点和池,以及创建节点和池并在 Azure Batch 工作流中使用时的注意事项。

Nodes

节点是专门用于处理一部分应用程序工作负荷的 Azure 虚拟机 (VM) 或云服务 VM。 节点大小确定了 CPU 核心数目、内存容量,以及分配给节点的本地文件系统大小。

可以使用 Azure 虚拟机市场提供的 Azure 云服务映像或自己准备的自定义映像创建 Windows 或 Linux 节点池。

节点可以运行节点操作系统环境支持的任何可执行文件或脚本。 可执行文件或脚本包括 *.exe、*.cmd、*.bat 和 PowerShell 脚本(适用于 Windows),以及二进制文件、shell 和 Python 脚本(适用于 Linux)。

Batch 中的所有计算节点还包括:

默认情况下,节点可以彼此通信,但无法与不属于同一池的虚拟机通信。 若要允许节点安全地与其他虚拟机或本地网络通信,可以在 Azure 虚拟网络 (VNet) 的子网中预配该池。 当你这样做时,可以通过公共 IP 地址访问节点。 这些公共 IP 地址由 Batch 创建,可能会在池的生存期内更改。 你还可以创建具有所控制的静态公共 IP 地址的池,这样可确保它们不会意外更改。

池是运行应用程序的节点集合。

Azure Batch 池构建在核心 Azure 计算平台的顶层。 它们提供大规模的分配、应用程序安装、数据分发和运行状况监视,以及在池内灵活调整(缩放)计算节点数目等功能。

添加到池中的每个节点都分配有唯一的名称和 IP 地址。 从池中删除某个节点时,会丢失对操作系统或文件所做的任何更改,并且节点的名称和 IP 地址将被释放供将来使用。 当某个节点退出池时,它的生存期即告结束。

池只能由创建它的 Batch 帐户使用。 Batch 帐户可以创建多个池,以满足将运行的应用程序的资源要求。

可以手动创建池;或者在你指定要完成的工作时,由 Batch 服务自动创建池。 在创建池时,可以指定以下属性:

重要

Batch 帐户具有默认配额,用于限制 Batch 帐户中的核心数。 核心数对应于计算节点数。 可以在 Azure Batch 服务的配额和限制中找到默认配额以及如何提高配额的说明。 如果池不能实现其目标节点数,则问题可能出在核心配额上。

操作系统和版本

在创建 Batch 池时,可指定 Azure 虚拟机配置和想要在池中每个计算节点上运行的操作系统类型。

配置

Batch 中提供了两种类型的池配置。

重要

虽然目前可以使用任一配置创建池,但应使用虚拟机配置而不是云服务配置来配置新池。 虚拟机配置池将支持所有当前和新的 Batch 功能。 云服务配置池不支持所有功能,也没有计划任何新功能。 在 2024 年 2 月 29 日之后,你将无法创建新的“CloudServiceConfiguration”池或将新节点添加到现有池。

虚拟机配置

虚拟机配置指定池由 Azure 虚拟机组成。 可以从 Linux 或 Windows 映像创建这些 VM。

Batch 节点代理是一个程序,它在池中的每个节点上运行,并在节点与 Batch 服务之间提供命令和控制接口。 节点代理对于不同操作系统有不同的实现(称为 SKU)。 基于虚拟机配置创建池时,不仅要指定节点大小和用于创建它们的映像源,还必须指定要安装在节点上的“虚拟机映像引用”和批处理“节点代理 SKU”。 有关指定这些池属性的详细信息,请参阅 Provision Linux compute nodes in Azure Batch pools(在 Azure Batch 池中预配 Linux 计算节点)。 可选选择性地将一个或多个空数据磁盘附加到从市场映像创建的池 VM,也可将数据磁盘包括在用于创建 VM 的自定义映像中。 如果包括数据磁盘,需要在 VM 中装载并格式化这些磁盘,然后才能使用。

云服务配置

警告

云服务配置池已被弃用。 请改用虚拟机配置池。 有关详细信息,请参阅将 Batch 池配置从云服务迁移到虚拟机

云服务配置指定池由 Azure 云服务节点组成。 云服务只提供 Windows 计算节点。

Azure 来宾 OS 版本和 SDK 兼容性对照表中列出了适用于云服务配置池的操作系统,云服务的大小中列出了可用的计算节点大小。 创建包含云服务节点的池时,需要指定节点大小及其 OS 系列(用于确定哪些版本的 .NET 随 OS 一起安装)。 将云服务部署到 Azure 的速度比部署运行 Windows 的虚拟机更快。 如果需要 Windows 计算节点池,可能会发现云服务具有部署时间上的性能优势。

与云服务中的辅助角色一样,你可指定 OS 版本。 对于 OS 版本,建议指定 Latest (*),使节点可自动升级,而无需采取措施来适应新的版本。 选择特定 OS 版本的主要用例是在允许更新版本之前执行向后兼容测试,以确保保持应用程序兼容性。 验证后,便可以更新池的 OS 版本并安装新的 OS 映像。 所有正在运行的任务将会中断并重新排队。

节点代理 SKU

创建池时,需要选择适当的 nodeAgentSkuId,具体取决于 VHD 基本映像的 OS。 可通过调用列出支持的节点代理 SKU 操作获得可用节点代理 SKU ID 到其 OS 映像引用的映射。

虚拟机池的自定义映像

若要了解如何使用自定义映像创建池,请参阅使用共享映像库创建自定义池

或者,可以使用托管映像资源创建自定义虚拟机池。 有关从 Azure VM 准备自定义 Linux 映像的信息,请参阅如何创建虚拟机或 VHD 的映像。 若要了解如何通过 Azure VM 准备自定义 Windows 映像,请参阅在 Azure 中创建通用 VM 的托管映像

虚拟机池中的容器支持

使用 Batch API 创建虚拟机配置池时,可以将池设置为在 Docker 容器中运行任务。 目前,必须使用支持 Docker 容器的映像创建池。 将 Windows Server 2016 Datacenter 与 Azure 市场中的容器映像配合使用,或者提供自定义 VM 映像(其中包含 Docker Community Edition 或 Enterprise Edition 以及任何必需的驱动程序)。 池设置必须包括容器配置,该配置在创建池时将容器映像复制到 VM。 然后,在池中运行的任务即可引用容器映像和容器运行选项。

有关详细信息,请参阅在 Azure Batch 上运行 Docker 容器应用程序

节点类型和目标

创建池时,可以指定所需的节点类型和每种类型的目标节点数。 有两种类型的节点:

  • 专用节点。 专用计算节点将为工作负荷保留。 保证它们永远不会被抢占。

专用类型的节点有其自己的目标设置,你可以为其指定所需的节点数。

计算节点数之所以称为 目标,是因为在某些情况下,池可能无法达到所需的节点数。 例如,如果池先达到了 Batch 帐户的核心配额,则该池可能达不到目标。 或者,如果已将限制最大节点数的自动缩放公式应用于池,则该池也可能达不到目标。

有关专用节点的定价信息,请参阅 Batch 定价

节点大小

创建 Azure Batch 池时,可以在 Azure 提供的几乎所有 VM 系列和大小中进行选择。 Azure 提供一系列适用于不同工作负荷的 VM 大小,包括专用启用了 GPU 的 VM 大小。 请注意,只能在创建池时选择节点大小。 换句话说,创建池后,便无法更改其节点大小。

有关详细信息,请参阅在 Azure Batch 池中选择适用于计算节点的 VM 大小

自动缩放策略

对于动态工作负荷,可以将自动缩放策略应用于池。 Batch 服务将定期评估公式,并根据计算方案的当前工作负载和资源使用情况动态调整池中的节点数目。 这样,便可做到只使用所需资源并可释放不需要的资源,因而能够降低运行应用程序的整体成本。

可通过编写 自动缩放公式 并将该公式与池相关联,来启用自动缩放。 Batch 服务使用该公式来确定池中下一个缩放间隔(可配置的间隔)的目标节点数目。 可以在创建池时指定池的自动缩放设置,或稍后在池上启用缩放。 还可以更新已启用缩放的池上的缩放设置。

例如,也许某个作业需要提交大量要执行的任务。 你可以将缩放公式分配到池,以根据当前的排队任务数和作业中任务的完成率来调整池中的节点数目。 Batch 服务将定期评估公式,并根据工作负荷和其他公式设置来调整池的大小。 该服务在有大量排队的任务时按需添加节点,在没有排队的任务或正在运行的任务时删除节点。

缩放公式可以基于以下度量值:

  • 时间度量值 基于指定的时数内每隔五分钟收集的统计信息。
  • 资源度量值 基于 CPU 使用率、带宽使用率、内存使用率和节点的数目。
  • 任务指标 基于任务状态,例如“活动”(已排队)、“正在运行”或“已完成”。

如果自动缩放会减少池中的计算节点数,则必须考虑如何处理在执行减少操作时运行的任务。 为了满足这一点,Batch 提供可包含在公式中的节点解除分配选项。 例如,可以指定运行中的任务立即停止,然后重新排入队列,以便在另一个节点上运行,或允许先完成再从池中删除节点。 请注意,在所有任务都已完成,或者所有任务保留期都已过期之前,将节点解除选项设置为 taskcompletionretaineddata 会阻止池调整大小操作。

有关自动缩放应用程序的详细信息,请参阅 自动缩放 Azure Batch 池中的计算节点

提示

若要获得最大的计算资源使用率,请将节点的目标数目设置成在作业结束时降为零,但允许正在运行的任务完成。

任务计划策略

每个节点的最大任务数 配置选项确定了可以在池中每个计算节点上并行运行的最大任务数。

默认配置指定每次在节点上运行一个任务,但在某些情况下,在一个节点上同时执行两个或多个任务可能更有利。 请参阅 concurrent node tasks(并发节点任务)一文中的示例方案,了解如何通过在每个节点上运行多个任务来受益。

还可以指定一个填充类型,用于确定 Batch 是要将任务平均分散到池中的所有节点,还是在将最大数目的任务分配给一个节点后,再将任务分配给另一个节点。

通信状态

在大多数情况下,任务将独立运行,并不需要彼此通信。 但是,某些应用程序中的任务必须能够通信,例如 MPI 方案

可将池配置为允许节点间通信,以便池中的节点可在运行时进行通信。 启用节点间通信时,云服务配置池中的节点可以在超过 1100 个端口上彼此通信,并且虚拟机配置池不会限制任何端口的流量。

启用节点间通信也会影响群集内的节点位置,并且由于部署限制,可能限制池中的最大节点数。 如果应用程序不需要节点之间的通信,Batch 服务可以将许多不同的群集和数据中心的大量节点分配给池,以发挥更强大的并行处理能力。

启动任务

如果需要,可以添加一个启动任务该任务将在每个节点加入池以及节点每次重新启动或重置映像时在该节点上运行。 启动任务特别适合用于准备计算节点,以便执行任务,例如,在计算节点上安装运行任务的应用程序。

应用程序包

可以指定要部署到池中计算节点的应用程序包。 应用程序包提供任务运行的应用程序的简化部署和版本控制。 为池指定的应用程序包安装在加入该池的每个节点上,每次节点重新启动或重置映像时,将安装这些包。

若要详细了解如何使用应用程序包将应用程序部署到 Batch 节点,请参阅使用 Batch 应用程序包将应用程序部署到计算节点

虚拟网络 (VNet) 和防火墙配置

在 Batch 中预配计算节点池时,可以将池与 Azure 虚拟网络 (VNet) 的子网相关联。 若要使用 Azure VNet,Batch 客户端 API 必须使用 Azure Active Directory (AD) 身份验证。 有关 Azure AD 的 Azure Batch 支持,请参阅使用 Active Directory 对 Batch 服务解决方案进行身份验证

VNet 要求

一般要求

  • VNet 必须与用于创建池的 Batch 帐户位于同一订阅和区域中。

  • 为池指定的子网必须提供足够的未分配 IP 地址来容纳面向该池的 VM 的数量;即,池的 targetDedicatedNodestargetLowPriorityNodes 属性的总和。 如果子网没有足够的未分配 IP 地址,池将分配部分计算节点,并发生调整大小错误。

  • 需要通过为 VNet 提供服务的自定义 DNS 服务器解析 Azure 存储终结点。 具体而言,<account>.table.core.chinacloudapi.cn<account>.queue.core.chinacloudapi.cn<account>.blob.core.chinacloudapi.cn 形式的 URL 应当是可以解析的。

  • 可在同一 VNet 或同一子网中创建多个池(前提是它有足够的地址空间)。 单个池不能跨多个 VNet 或子网存在。

其他 VNet 要求会有所不同,具体取决于 Batch 池是使用“虚拟机”配置还是使用“云服务”配置。 若要进行新的池部署(部署到 VNet 中),建议使用“虚拟机”配置。

“虚拟机”配置中的池

支持的 VNet - 仅限基于 Azure 资源管理器的 VNet

子网 ID - 通过 Batch API 指定子网时,请使用子网的资源标识符。 标识符的形式为:

/subscriptions/{subscription}/resourceGroups/{group}/providers/Microsoft.Network/virtualNetworks/{network}/subnets/{subnet}

权限 - 检查在 VNet 的订阅或资源组上实施的安全策略或锁定是否限制用户管理 VNet 所需的权限。

其他网络资源 - Batch 自动在包含 VNet 的资源组中创建其他网络资源。

重要

对于每 100 个专用或低优先级节点,Batch 会创建:1 个网络安全组 (NSG)、1 个公共 IP 地址、1 个负载均衡器。 这些资源受订阅的资源配额限制。 对于大型池,可能需要为一个或多个此类资源请求增加配额。

网络安全组:Batch 默认值

子网必须允许来自 Batch 服务的入站通信,才能在计算节点上计划任务,必须允许出站通信,才能根据工作负荷需求与 Azure 存储或其他资源通信。 对于“虚拟机”配置中的池,Batch 在附加到计算节点的网络接口 (NIC) 级别添加 NSG。 这些 NSG 配置了以下附加规则:

  • 端口 29876 和 29877 上来自 Batch 服务 IP 地址(对应于 BatchNodeManagement 服务标记)的入站 TCP 流量。
  • 端口 22(Linux 节点)或端口 3389(Windows 节点)上允许远程访问的入站 TCP 流量。 对于 Linux 上某些类型的多实例任务(如 MPI),还需要为包含 Batch 计算节点的子网中的 IP 允许 SSH 端口 22 流量。 这可能会根据子网级 NSG 规则进行阻止(请参阅下文)。
  • 任何端口上通往虚拟网络的出站流量。 这可能会根据子网级 NSG 规则进行修改(请参阅下文)。
  • 任何端口上通往 Internet 的出站流量。 这可能会根据子网级 NSG 规则进行修改(请参阅下文)。

重要

在 Batch 配置的 NSG 中修改或添加入站或出站规则时,请务必小心。 如果 NSG 拒绝与指定子网中的计算节点通信,则 Batch 服务会将计算节点的状态设置为“不可用”。 此外,不得将资源锁应用于 Batch 创建的任何资源,因为这可能会由于用户启动的操作(如删除池)而导致资源清理被阻止。

网络安全组:指定子网级规则

无需在子网级别指定 NSG,因为 Batch 会配置其自己的 NSG(请参阅上文)。 如果你的一个 NSG 与部署了 Batch 计算节点的子网关联,或者你要应用自定义 NSG 规则来替代应用的默认值,则必须为此 NSG 至少配置入站和出站安全规则,如下表所示。

在端口 3389 (Windows) 或 22 (Linux) 上配置入站流量的前提是,你需要允许对外部源中的计算节点进行远程访问。 如果需要支持使用某些 MPI 运行时的多实例任务,则可能需要在 Linux 上启用端口 22 规则。 使池计算节点可用不一定需要允许这些端口上的流量。

警告

Batch 服务 IP 地址随时可能会更改。 因此,我们强烈建议你对下表中所示的 NSG 规则使用 BatchNodeManagement 服务标记(或区域变体)。 避免用特定 Batch 服务 IP 地址填充 NSG 规则。

入站安全规则

源 IP 地址 源服务标记 源端口 目标 目标端口 协议 操作
空值 BatchNodeManagement 服务标记(如果使用区域变体,则在与 Batch 帐户相同的区域中) * Any 29876-29877 TCP 允许
用户源 IP,用于远程访问 Linux 多实例任务的计算节点和/或计算节点子网(如果需要)。 空值 * Any 3389 (Windows)、22 (Linux) TCP 允许

出站安全规则

源端口 目标 目标服务标记 目标端口 协议 操作
Any * 服务标记 Storage(如果使用区域变体,则在与 Batch 帐户相同的区域中) 443 TCP 允许
Any * 服务标记 BatchNodeManagement(如果使用区域变体,则在与 Batch 帐户相同的区域中) 443 TCP 允许

若要从计算节点联系 Batch 服务(例如,对于作业管理器任务),必须出站到 BatchNodeManagement

“云服务”配置中的池

警告

云服务配置池已弃用。 请改用虚拟机配置池。

支持的 VNet - 仅限经典 VNet

子网 ID - 通过 Batch API 指定子网时,请使用子网的资源标识符。 标识符的形式为:

/subscriptions/{subscription}/resourceGroups/{group}/providers/Microsoft.ClassicNetwork /virtualNetworks/{network}/subnets/{subnet}

权限 - Azure Batch 服务主体必须为指定的 VNet 提供 Classic Virtual Machine Contributor Azure 角色。

网络安全组

子网必须允许来自 Batch 服务的入站通信,才能在计算节点上计划任务,必须允许出站通信,才能与 Azure 存储或其他资源通信。

不需指定 NSG,因为 Batch 将入站通信配置为只能从 Batch IP 地址到池节点。 但是,如果指定的子网具有关联的 NSG 和/或防火墙,则配置入站和出站安全规则,如以下各表中所示。 如果 NSG 拒绝与指定子网中的计算节点通信,则 Batch 服务会将计算节点的状态设置为“不可用”。

如果需要允许对池节点进行 RDP 访问,请在端口 3389 上为 Windows 配置入站流量。 无需此项即可使用池节点。

入站安全规则

源 IP 地址 源端口 目标 目标端口 协议 操作
Any

虽然这需要有效地“全部允许”,但 Batch 服务会在每个节点级别应用 ACL 规则,以筛选掉所有非 Batch 服务 IP 地址。
* Any 10100、20100、30100 TCP 允许
可选,用于允许对计算节点进行 RDP 访问。 * Any 3389 TCP 允许

出站安全规则

源端口 目标 目标端口 协议 操作
任意 * 任意 443 任意 Allow

若要详细了解如何在 VNet 中设置 Batch 池,请参阅通过虚拟网络创建虚拟机池

提示

若要确保用于访问节点的公共 IP 地址不会更改,可以使用所控制的指定公共 IP 地址创建池

池和计算节点生存期

在设计 Azure Batch 解决方案时,必须指定如何及何时创建池,以及这些池中的计算节点可用性要保持多久。

在极端情况下,可以针对提交的每个作业创建一个池,并在其任务执行完成时立即删除该池。 这样,只有在需要时才分配节点,节点空闲时会立即关闭,因此可以最大程度地提高利用率。 这意味着作业必须等待分配节点,但务必注意,在任务已单独分配并且启动任务已完成时,会立即计划待执行的任务。 批处理 不会 在等到池中的所有节点都可用后才将任务分配到节点。 这可确保最大程度地利用所有可用节点。

在另一种极端情况下,如果最高优先级是让作业立即启动,则你可以预先创建池,并使其节点在提交作业之前可用。 在此情况下,任务可以立即启动,但节点可能会保持空闲状态以等待分配任务。

通常会使用一种组合方法来处理可变但持续存在的负载。 可以有一个池来容纳提交的多个作业,并且可以根据作业负载扩展或缩减节点数目。 可以根据当前负载被动执行此操作,或者在负载可预测时主动执行此操作。 有关详细信息,请参阅自动缩放策略

自动池

自动池是在提交作业时由 Batch 服务创建的池,而不是在创建将在池中运行的作业之前创建的。 Batch 服务将根据指定的特征管理自动池的生存期。 大多数情况下,这些池也设置为在其作业完成后自动删除。

证书的安全性

在加密或解密任务的敏感信息(例如 Azure 存储帐户的密钥)时,通常需要使用证书。 为此,可以在节点上安装证书。 加密的机密通过命令行参数或内嵌在某个任务资源中来传递给任务,已安装的证书可用于解密机密。

可以使用添加证书操作 (Batch REST) 或 CertificateOperations.CreateCertificate 方法 (Batch .NET) 将证书添加到 Batch 帐户。 然后,可以将该证书与新池或现有池相关联。

将证书与池关联后,Batch 服务将在池中的每个节点上安装该证书。 在启动节点之后、启动任何任务(包括启动任务作业管理器任务)之前,Batch 服务将安装相应的证书。

如果将证书添加到现有池,必须重新启动其计算节点,证书才会应用到节点。

后续步骤