根据群集工作负荷自动增大和收缩 Azure 中的 HPC Pack 群集资源

如果在 HPC Pack 群集中部署 Azure“突发”节点(Windows 和 Linux),或者在 Azure VM 中创建 HPC Pack 群集,则可能需要根据群集上的工作负荷自动增长或收缩群集资源(例如节点或核心)。 通过这种方式缩放群集资源可以更有效地使用 Azure 资源并控制其成本。

使用 HPC Pack 2016 或更高版本,可以自动增长和收缩运行 Azure 云的 HPC Pack 计算节点,包括 Windows PaaS 节点、Azure IaaS VM 节点、Azure 批处理池节点和 Azure VM 规模集节点。 但对于不同类型的节点,自动增长收缩逻辑是不同的。 下面是摘要:

节点类型 如何启用 先决条件 如何监视
Azure PaaS 节点 PowerShell cmdlet
Set-HpcClusterProperty -EnableGrowShrink 1
1. Azure PaaS 节点的节点模板
2.群集中添加的节点
ClusterManager 下的“自动增长收缩报告”--> 资源管理 --> 操作 --> AzureOperations
Azure IaaS 节点 PowerShell cmdlet
Set-HpcClusterProperty -EnableGrowShrink 1
1. 已配置 Azure 服务主体
2.群集中添加的节点
ClusterManager 下的“自动增长收缩报告”--> 资源管理 --> 操作 --> AzureOperations
Azure VM 规模集节点 PowerShell cmdlet
Set-HpcClusterProperty -EnableGrowShrink 1
1. 已配置 Azure 服务主体
2.群集中添加的节点
ClusterManager 下的“自动增长收缩报告”--> 资源管理 --> 操作 --> AzureOperations
Azure Batch 池 Azure Batch 池节点模板 需要启动 Azure Batch 池 azure 门户或 azure 批处理资源管理器

注意

此功能只需通过启动或停止 Azure 中的现有 HPC 计算节点来自动增长或收缩 Azure 资源,它不会自动创建新的 HPC 计算节点或删除现有节点。

HPC Pack 2016 Update 2 及更高版本支持 Azure VM 规模集节点的自动缩放。

自动缩放 Azure IaaS VM 节点或 Azure VM 规模集节点

若要在 HPC Pack 群集中自动增长或收缩 Azure IaaS VM 节点或 Azure VM 规模集节点,应使用证书配置 Azure 服务主体来管理 Azure 订阅。 可以使用 PowerShell 命令或群集管理器 GUI 对其进行配置。

配置 Azure 服务主体后,可以使用 HPC Pack AutoGrowShrink cmdlet启用自动增长收缩。

注意

默认情况下,HPC Pack 创建的 Azure 服务主体在订阅级别被授予 参与者 角色,可以参考 HPC Pack 群集中 Azure 资源的 访问控制 根据用户方案手动重新配置 Azure 服务主体的访问权限。

使用 powershell 配置 Azure 服务主体

  1. 群集部署后,通过远程桌面连接到一个头节点。

  2. 将证书(带私钥的 PFX 格式)上传到每个头节点,并安装到 Cert:\LocalMachine\My。 此证书用于创建 Azure 服务主体。 如果没有证书,可以先创建自签名证书。

  3. 以管理员身份启动 Azure PowerShell,并在一个头节点上运行以下命令:

    cd $env:CCP_HOME\bin
    
    Connect-AzureRmAccount
    

    如果帐户位于多个 Azure Active Directory 租户或 Azure 订阅中,可以运行以下命令以选择正确的租户和订阅:

    Connect-AzureRmAccount -TenantId <TenantId> -SubscriptionId <subscriptionId>
    

    运行以下命令以查看当前选定的租户和订阅:

    Get-AzureRMContext
    
  4. 运行以下脚本

    .\ConfigARMAutoGrowShrinkCert.ps1 -DisplayName "YourHpcPackAppName" -HomePage "https://YourHpcPackAppHomePage" -IdentifierUri "https://YourHpcPackAppUri" -CertificateThumbprint "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -TenantId xxxxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxxxx
    

    where

    DisplayName - Azure 活动应用程序显示名称。 如果应用程序不存在,则会在 Azure Active Directory 中创建该应用程序。

    HomePage - 应用程序的主页。 可以配置虚拟 URL,如前面的示例所示。

    IdentifierUri - 应用程序的标识符。 可以配置虚拟 URL,如前面的示例所示。

    CertificateThumbprint - 在步骤 2 中头节点上安装的证书的指纹。

    TenantId - Azure Active Directory 的租户 ID。 可以从 Azure Active Directory 门户 属性 页获取租户 ID。

    有关 ConfigARMAutoGrowShrinkCert.ps1的更多详细信息,请运行 Get-Help .\ConfigARMAutoGrowShrinkCert.ps1 -Detailed

  5. 配置后,可以通过 HPC Powershell 命令检查注册表项设置(包括 ApplicationId、TenantId、Thumbprint)

    Get-HpcClusterRegistry
    

使用群集管理器 GUI 配置 Azure 服务主体

  1. 在一个头节点上打开 HPC Pack 群集管理器。

  2. Goto 配置 -->部署 To-do List 页。

  3. 单击 设置 Azure 部署配置

  4. 通过此向导,它将帮助你配置 Azure 服务主体Azure 资源组VNet,在其中预配 Azure VM 以及用于群集通信的证书。 向导将如下所示运行:

    Azure 部署设置向导

验证配置

成功配置 Azure 服务主体后,应能够通过 HPC Pack 启动和停止 Azure IaaS VM 节点。

如果运行的是 HPC Pack 2016 Update 2 或更高版本、Azure IaaS VM 节点或 Azure VM 规模集节点应已 位于 azureIaaSNodes 节点组中,则可以从 HPC 群集管理器 GUI对它们执行 启动停止 操作。 执行该操作时,你将看到 调度停止 Azure VM 操作启动 Azure 虚拟机 操作(操作 -->AzureOperations 视图下)。

如果 VM 在 Azure 上手动安装了 HPC Pack Update 1 或更低版本,则默认情况下,它们不在 AzureIaaSNodes 节点组中,因为它们被视为本地节点。 在这种情况下,需要对其执行 停止 操作,以使服务能够将其放入 AzureIaaSNodes 节点组 ,然后服务能够增长和收缩它们。

如果还没有 Azure IaaS VM 节点,可以按照 添加 IaaS 节点 创建 Azure IaaS 节点模板并将 IaaS VM 节点添加到群集中。

Azure PaaS 节点的自动缩放

在 HPC Pack 群集启用自动增长收缩 Azure Windows PaaS 节点之前,应检查 Azure 节点模板,确保 Azure PaaS 节点配置为手动启动和停止,而不是基于时间计划。

HPC Pack 自动增长收缩服务永远不会向群集添加新资源。 因此,在创建 Azure PaaS 节点模板后,首先需要将节点添加到群集中:

  1. 启动 HPC 群集管理器,转到 资源管理 窗格
  2. 在操作窗格中单击“添加节点...” 操作,从向导中选择“添加 Windows Azure 节点”
  3. 遍历向导,单击 完成,多个节点将添加到群集中,未部署 状态
  4. 使用 hpc Pack AutoGrowShrink cmdlet 启用自动增长收缩

注意

当 HPC Pack 增长排队作业的资源时,它最多会增加在步骤 3 中添加的节点数。 它永远不会向群集添加更多资源。 因此,可以检查订阅容量,并将适当的节点数添加到群集中。

自动缩放 Azure Batch 池

默认情况下,在 HPC Pack 中创建 Azure 批处理池模板时,我们会为池定义默认的自动缩放公式。 但也可以参考此文档 来定义自己的缩放公式和批处理节点模板中的更新。

用于设置群集自动增长和收缩属性的 HPC PowerShell 命令

下面是示例 HPC PowerShell 命令,用于设置 AutoGrowShrink,并使用其他参数优化其行为。 有关设置的完整列表,请参阅本文后面的 AutoGrowShrink 参数

若要运行这些命令,请以管理员身份在群集头节点上启动 HPC PowerShell。

查看 AutoGrowShrink 当前设置

Get-HpcClusterProperty –AutoGrowShrink

启用 AutoGrowShrink 属性

Set-HpcClusterProperty –EnableGrowShrink 1

禁用 AutoGrowShrink 属性

Set-HpcClusterProperty –EnableGrowShrink 0

更改分钟 的增长间隔

Set-HpcClusterProperty –GrowInterval <interval>

更改收缩间隔(以分钟为单位)

Set-HpcClusterProperty –ShrinkInterval <interval>

查看 AutoGrowShrink 的当前配置

Get-HpcClusterProperty –AutoGrowShrink

从 AutoGrowShrink 中排除节点组

Set-HpcClusterProperty –ExcludeNodeGroups <group1,group2,group3>

注意

从 HPC Pack 2016 开始支持此参数

AutoGrowShrink 参数

以下是可以使用 Set-HpcClusterProperty 命令修改的 AutoGrowShrink 参数。

  • EnableGrowShrink - 切换到启用或禁用 AutoGrowShrink 属性。

  • TasksPerResourceUnit - 要增长一个资源单元的任务数(基于作业的资源单元类型)。 默认值是每个任务增加一个资源单位。

  • GrowThreshold - 已排队任务以触发自动增长的作业的阈值。 默认值为 1,这意味着如果有 1 个或更多作业具有排队任务,则会自动增长节点。

  • GrowInterval - 触发自动增长的间隔(以分钟为单位)。 默认间隔为 5 分钟。

  • ShrinkInterval - 触发自动收缩的间隔(以分钟为单位)。 默认间隔为 5 分钟。|

  • ShrinkIdleTimes - 要收缩的连续检查数,以指示节点处于空闲状态。 默认值为 3 次。 例如,如果 ShrinkInterval 为 5 分钟,HPC Pack 将检查节点是否每隔 5 分钟空闲一次。 如果节点处于所有 3 个连续检查(15 分钟)的空闲状态,则 HPC Pack 决定收缩该节点。

  • ExtraNodesGrowRatio - 消息传递接口(MPI)作业要增长的节点的更多百分比。 默认值为 1,这意味着 HPC Pack 会增大 MPI 作业的节点 1%。

  • GrowByMin - 切换以指示自动增长策略是否基于作业所需的最低资源。 默认值为 false,这意味着 HPC Pack 根据作业所需的最大资源增加作业的节点。

  • SoaJobGrowThreshold - 传入 SOA 请求的阈值,以触发自动增长过程。 默认值为 50000。

    注意

    从 HPC Pack 2012 R2 Update 3 开始支持此参数。

  • SoaRequestsPerCore -Number 传入 SOA 请求来增长一个核心。 默认值为 20000。

    注意

    从 HPC Pack 2012 R2 Update 3 开始支持此参数。

  • ExcludeNodeGroups – 指定节点组中的节点不会自动增长和收缩。

    注意

    从 HPC Pack 2016 开始支持此参数。

MPI 示例

默认情况下,HPC Pack 为 MPI 作业增长 1 个% 个额外节点(ExtraNodesGrowRatio 设置为 1)。 原因是 MPI 可能需要多个节点,并且作业只能在所有节点准备就绪时运行。 当 Azure 启动节点时,有时一个节点可能需要比其他节点更多的时间来启动,导致其他节点在等待该节点准备就绪时处于空闲状态。 通过增加额外的节点,HPC Pack 可减少此资源等待时间,并可能节省成本。 若要增加 MPI 作业的额外节点百分比(例如,10%),请运行类似于

Set-HpcClusterProperty -ExtraNodesGrowRatio 10

SOA 示例

默认情况下,SoaJobGrowThreshold 设置为 50000,SoaRequestsPerCore 设置为 20000。 如果提交一个包含 70000 个请求的 SOA 作业,则有一个排队的任务和传入请求为 70000。 在这种情况下,HPC Pack 为排队任务增长 1 个核心,对于传入请求,将增长 (70000 - 50000)/20000 = 1 个核心,因此,此 SOA 作业的内核总数将增长 2 个核心。