在 AKS 集群上自动缩放 HDInsight

重要

AKS 上的 Azure HDInsight 已于 2025 年 1 月 31 日停用。 了解更多 的信息,详情见此公告

需要将工作负荷迁移到 Microsoft Fabric 或等效的 Azure 产品,以避免工作负荷突然终止。

重要

此功能目前以预览版提供。 Microsoft Azure 预览版的补充使用条款 包括适用于 beta 版、预览版或尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览的信息,请参阅 AKS 上的 Azure HDInsight 预览信息。 有关问题或功能建议,请在 AskHDInsight 上提交请求,提供详细信息,并关注我们以获取 Azure HDInsight 社区 的更多更新。

为了提前满足作业性能并管理成本,确定集群的适当规模总是很棘手且难以判断! 通过云构建 Data Lake House 的利润丰厚的好处之一是其弹性,这意味着使用自动缩放功能来最大限度地利用手头的资源。 使用 Kubernetes 自动缩放是建立成本优化生态系统的关键之一。 在任何企业中使用模式各不相同时,群集负载可能会随时间变化,从而导致群集预配不足(性能不佳)或过度预配(由于空闲资源导致的不必要的成本)。

AKS 上的 HDInsight 中提供的自动缩放功能可以自动增加或减少群集中的工作器节点数。 自动缩放使用客户的群集指标和缩放策略。

此功能非常适合任务关键型工作负载,这些工作负载可能具有

  • 可变或不可预知的流量模式,并且需要在高性能和规模方面的 SLA
  • 预先设定的计划,以确保在群集上成功执行作业所需的工作节点可用。

使用 AKS 群集上的 HDInsight 自动缩放使群集在 Azure 上具有成本效益和弹性。

借助自动缩放,客户可以缩减群集,而不会影响工作负荷。 它已启用高级功能,例如正常解除授权和冷却期。 这些功能使用户能够根据群集的当前负载对节点的添加和删除做出明智的选择。

工作原理

此功能的工作原理是根据群集指标或定义的纵向扩展和缩减作计划,在预设限制内缩放节点数。 触发自动缩放事件有两种条件类型:一种是基于阈值的触发器,用于各种群集性能指标(称为基于负载的缩放),另一种是基于时间的触发器(称为基于计划的缩放)。

基于负载的缩放更改群集中的节点数,在设置的范围内,以确保 CPU 使用率最佳,并最大程度地降低运行成本。

基于计划的缩放根据扩展和缩减节点数量的计划更改群集中的节点数。

注意

自动缩放不支持更改现有群集的 SKU 类型。

群集兼容性

下表描述了与自动缩放功能兼容的群集类型,以及可用或计划的功能。

工作量 基于负载 基于计划
Flink 计划 是的
Trino 是的** 是的**
火花 是的** 是的**

**正常解除授权是可配置的。

缩放方法

  • 基于计划的扩展

    • 当您的作业预计按照固定计划和可预测的时长运行时,或在一天中特定时间(例如,工作时间后的测试和开发环境或下班后的日终作业)预期使用率较低时。

      截图展示了如何选择基于计划的缩放。

  • 基于负载的比例

    • 例如,当负载模式在白天大幅波动且不可预测时,订单数据处理会因各种因素而出现负载模式的随机波动。

      显示如何选择基于负载的缩放的屏幕截图。

      使用新的“配置缩放规则”选项,现在可以自定义缩放规则。

      显示如何在基于负载的缩放中配置缩放规则的屏幕截图。

      屏幕截图,显示如何在配置缩放规则中为基于负载的缩放添加规则。

      提示

      • 当一个或多个规则被触发时,扩展规则优先。 即使只有一个纵向扩展规则表明群集预配不足,群集也会尝试纵向扩展。 若要缩小规模,不应触发扩大规模规则。

基于负载的缩放条件

当检测到以下条件时,自动缩放会发起缩放请求。

规模扩展 缩小
分配的核心数大于 80%,在 5 分钟轮询间隔(1 分钟检查期)内。 分配的核心数量小于或等于 20%,每5分钟轮询一次(1分钟检查周期)
  • 对于横向扩展,自动扩展会发出扩展请求,以添加所需的节点数。 纵向扩展基于满足当前 CPU 和内存要求所需的新工作器节点数。 此值上限为设置的最大工作器节点数。

  • 对于缩减,自动缩放会请求删除某些节点。 缩减注意事项包括每个节点的 Pod 数、当前的 CPU 和内存要求,以及根据当前作业执行进行删除的候选工作节点。 缩减操作首先停止节点,然后将它们从群集中移除。

    重要

    自动缩放规则引擎每 30 分钟主动刷新旧事件, 优化系统内存。 因此,缩放规则间隔存在 30 分钟的上限限制。 为了确保缩放操作的一致且可靠的触发,必须将缩放规则时间间隔设置为小于限制的数值。 通过遵循此准则,可以保证一个流畅高效的缩放过程,同时有效管理系统资源。

群集指标

自动缩放持续监视群集,并收集以下基于负载的自动缩放指标:

可用于缩放目的的群集指标

度量 描述
可用核心百分比 群集中可用核心的总数与群集中的核心总数相比。
可用内存百分比 群集中可用的总内存(以 MB 为单位),与群集中的总内存量相比。
已分配的核心百分比 群集中分配的核心总数与群集的核心总数之比。
分配的内存百分比 群集中分配的内存量与群集中的内存总量相比。

默认情况下,每 300 秒检查上述指标。当您使用自定义自动缩放选项时,还可以配置轮询间隔。 自动缩放根据这些指标做出扩展或缩减决策。

注意

默认情况下,自动缩放使用适用于 Apache Spark 的 YARN 的默认资源计算器。 基于负载的缩放适用于 Apache Spark 群集。

优雅退役

企业需要通过自动缩放实现PB级规模,并在不再需要时优雅地退役资源。 在这种情况下,正常停用功能非常方便。

优雅停用允许作业即使在自动缩放启动工作节点的停用后仍能完成。 此功能允许节点继续预配,直到作业完成。

  • Trino:工作节点默认启用了优雅停用功能。 协调器允许终止的工人在从集群中被移除之前,有一段配置的时间来完成任务。 可以使用本机 Trino 参数 shutdown.grace-period或在 Azure 门户服务配置页上配置超时。

  • Apache Spark:缩容可能会影响/停止群集中任何正在运行的作业。 如果在 Azure 门户中启用优雅下线设置,则该设置将实施 YARN 节点的优雅下线,并确保在从 AKS 集群上的 HDInsight 中删除节点之前,工作节点上的任何正在进行的工作都已完成。

冷却期

为了避免持续进行纵向扩展操作,自动缩放引擎会在启动另一组纵向扩展操作之前,等待一个可配置的时间间隔。 默认值设置为 180 秒

注意

  • 在自定义缩放规则中,任何规则触发器都不能有大于 30 分钟的触发器间隔。 发生自动缩放事件后,强制实施另一个缩放策略之前等待的时间。
  • 冷却期应大于策略间隔,因此群集指标可以重置。

入门

  1. 若要实现自动缩放功能,您需要在左侧窗格中使用 IAM,向群集级别的 MSI(在群集创建期间使用)分配 所有者参与者 权限。

  2. 请参阅下图及步骤,了解如何添加角色分配。

    显示如何添加角色分配的屏幕截图。

  3. 选择 添加角色分配

    1. 分配类型:特权管理员角色
    2. 角色:所有者参与者
    3. 成员:选择托管标识,然后选择在群集创建阶段提供的 用户分配的托管标识
    4. 分配角色。

创建具有基于计划的自动缩放的群集

  1. 创建群集池后,使用所需的工作负荷(在群集类型上)创建 新群集,并在正常群集创建过程中完成其他步骤。

  2. 在“配置”选项卡上,启用 自动缩放 开关。

  3. 选择基于 自动缩放的 计划

  4. 选择时区,然后单击 + 添加规则

  5. 选择新条件应应用于的一周中的天数。

  6. 编辑条件生效的时间以及群集应缩放到的节点数。

    显示如何开始使用基于计划的自动缩放的屏幕截图。

    备注

    • 用户需要在群集 MSI 上具备“所有者”或“参与者”角色,才能使自动缩放功能正常工作。
    • 默认值定义群集在创建时的初始大小。
    • 两个计划之间的差异默认设置为 30 分钟。
    • 时间值采用 24 小时格式
    • 如果连续时段跨天超过 24 小时,则需要跨天设置自动缩放计划,而自动缩放假定 23:59 为 00:00(具有相同节点计数)跨越两天(从 22:00 到 23:59、00:00 到 02:00,即 22:00 到 02:00)。
    • 默认情况下,计划以协调世界时(UTC)进行设置。 您始终可以在可用的下拉列表中更新到与本地时区相对应的时区。 当您位于实施夏令时的时区时,日程安排不会自动调整,因此您需要相应地管理日程更新。

创建具有基于负载的自动缩放的群集

  1. 创建群集池后,使用所需的工作负荷(在群集类型上)创建 新群集,并在正常群集创建过程中完成其他步骤。

  2. 在“配置”选项卡上,启用自动缩放 开关。

  3. 选择 基于负载的 自动缩放

  4. 根据负载类型,可以选择添加 优雅关闭超时冷却期

  5. 选择 最小最大 节点,如有必要,配置缩放规则 以根据需要自定义自动缩放。

    显示如何开始使用基于负载的自动缩放的屏幕截图。

    提示

    • 订阅为每个区域提供容量配额。 头节点的核心总数和最大工作器节点数不能超过容量配额。 但是,此配额是软限制;您始终可以创建支持票证来轻松增加它。
    • 如果您超出核心配额总量限制,则会收到一条错误消息,指出 The maximum node count you can select is {maxCount} due to the remaining quota in the selected subscription ({remaining} cores)
    • 触发一个或多个规则时,扩容规则具有优先权。 即使只有一个纵向扩展规则表明群集预配不足,群集也会尝试纵向扩展。 若要进行纵向缩减,不应触发纵向扩展规则。
    • 在公共预览版中,AKS 上的 HDInsight 支持群集中最多 500 个节点。

使用资源管理器模板创建群集

基于计划的自动扩展

可以使用 Azure 资源管理器模板在 AKS 群集上创建启用基于计划自动缩放的 HDInsight,这可以通过在 clusterProfile -> autoscaleProfile 部分添加自动缩放来实现。

自动缩放节点包含一个包含时区和计划的周期,用于描述更改发生的时间。 有关完整的资源管理器模板,请参阅示例 JSON

{
  "autoscaleProfile": {
    "enabled": true,
    "autoscaleType": "ScheduleBased",
    "gracefulDecommissionTimeout": 60,
    "scheduleBasedConfig": {
      "schedules": [
        {
          "days": [
            "Monday",
            "Tuesday",
            "Wednesday"
          ],
          "startTime": "09:00",
          "endTime": "10:00",
          "count": 2
        },
        {
          "days": [
            "Sunday",
            "Saturday"
          ],
          "startTime": "12:00",
          "endTime": "22:00",
          "count": 5
        },
        {
          "days": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday"
          ],
          "startTime": "22:00",
          "endTime": "23:59",
          "count": 6
        },
        {
          "days": [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday"
          ],
          "startTime": "00:00",
          "endTime": "05:00",
          "count": 6
        }
      ],
      "timeZone": "UTC",
      "defaultCount": 110
    }
  }
}

提示

  • 需要使用 ARM 部署设置不冲突的计划,以避免缩放操作失败。

基于负载的自动缩放

可以使用 Azure 资源管理器模板在 AKS 集群上创建带有基于负载自动缩放功能的 HDInsight,方法是将自动缩放添加到 clusterProfile 的> autoscaleProfile 部分。

自动缩放节点包含

  • 轮询间隔,冷却期,
  • 优雅退役
  • 最小节点和最大节点
  • 标准阈值规则,
  • 扩展指标,用于说明更改何时发生。

有关完整的资源管理器模板,请参阅示例 JSON,如下所示

  {
  "autoscaleProfile": {
    "enabled": true,
    "autoscaleType": "LoadBased",
    "gracefulDecommissionTimeout": 60,
    "loadBasedConfig": {
      "minNodes": 2,
      "maxNodes": 157,
      "pollInterval": 300,
      "cooldownPeriod": 180,
      "scalingRules": [
        {
          "actionType": "scaleup",
          "comparisonRule": {
            "threshold": 80,
            "operator": " greaterThanOrEqual"
          },
          "evaluationCount": 1,
          "scalingMetric": "allocatedCoresPercentage"
        },
        {
          "actionType": "scaledown",
          "comparisonRule": {
            "threshold": 20,
            "operator": " lessThanOrEqual"
          },
          "evaluationCount": 1,
          "scalingMetric": "allocatedCoresPercentage"
        }
      ]
    }
  }
}

使用 REST API

若要使用 REST API 在正在运行的群集上启用或禁用自动缩放,请向自动缩放终结点发出 PATCH 请求:https://management.azure.com/subscriptions/{{USER_SUB}}/resourceGroups/{{USER_RG}}/providers/Microsoft.HDInsight/clusterpools/{{CLUSTER_POOL_NAME}}/clusters/{{CLUSTER_NAME}}?api-version={{HILO_API_VERSION}}

  • 在请求有效负载中使用适当的参数。 JSON 数据包可用于启用自动缩放功能。
  • 使用有效负载(autoscaleProfile: null)或使用标志(启用,false)禁用自动缩放。
  • 有关参考,请参阅上述步骤中提到的 JSON 示例。

暂停正在运行的群集的自动缩放

我们在自动缩放中引入了暂停功能。 现在,使用 Azure 门户,可以在正在运行的群集上暂停自动缩放。 下图演示了如何选择暂停和恢复自动缩放

显示如何暂停自动缩放的屏幕截图。

只要你想恢复自动缩放操作,就可以恢复。

显示如何恢复自动缩放的屏幕截图。

提示

配置多个计划并暂停自动缩放时,不会触发下一个计划。 即使节点处于已解除授权状态,节点计数也保持不变。

复制自动缩放配置

使用 Azure 门户,现在可以在群集池中为同一群集形状复制相同的自动缩放配置,可以使用此功能导出或导入相同的配置。

关于如何从自动缩放中导出或导入配置的屏幕截图。

监视自动缩放活动

群集状态

Azure 门户中列出的群集状态可帮助监视自动缩放活动。 列表中介绍了你可能看到的所有群集状态消息。

群集状态 描述
成功 群集正常运行。 所有以前的自动缩放活动都已成功完成。
接受 接受群集操作(例如:扩容),等待操作完成。
失败 这意味着当前作由于某种原因而失败,群集可能无法正常运行。
取消 当前操作已被取消。

显示群集状态的 屏幕截图。

若要查看群集中的当前节点数,请转到群集 概述 页上的 群集大小 图表。

显示群集大小的 屏幕截图。

操作历史

可以在群集指标中查看群集纵向扩展和缩减历史记录。 您还可以列出过去一天、一周或其他时间段内所有的缩放操作。

显示群集操作历史记录的屏幕截图,位于活动日志上。

其他资源

手动缩放 - AKS 上的 Azure HDInsight