你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

自动缩放 HDInsight on AKS 群集

重要

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

提前调整群集大小以满足作业性能需求和管理成本总是很棘手,很难确定! 在云端构建数据湖屋的一大好处是弹性,这意味着使用自动缩放功能可最大限度地利用手头的资源。 使用 Kubernetes 自动缩放是建立成本优化生态系统的关键之一。 企业中的使用模式各不相同,群集负载可能会随时间变化,从而导致群集预配不足(性能不佳)或过度预配(由于资源空闲导致不必要的成本)。

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

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

  • 可变或不可预知的流量模式,并且要求高性能和缩放方面的 SLA
  • 提供在群集上成功执行作业所需的工作器节点的预定计划。

自动缩放 HDInsight on AKS 群集可以让 Azure 上的群集具有成本效益和弹性。

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

工作原理

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

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

基于计划的缩放会根据纵向扩展和纵向缩减操作计划更改群集中的节点数。

注意

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

群集兼容性

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

工作负载 基于负载 基于计划
Flink 已计划
Trino 是** 是**
Spark 是** 是**

**正常停用是可配置的。

缩放方法

  • 基于计划的缩放

    • 当作业预计按固定计划运行且在可预测的持续时间内运行时,或者当预计在一天中的特定时间内使用率较低时,例如,在工作时间后、一天工作结束时的测试和开发环境。

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

  • 基于负载的缩放

    • 当负载模式在白天的波动过大和不可预知时,例如,由于各种因素,负载模式随机波动的订单数据处理。

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

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

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

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

      提示

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

基于负载的缩放条件

检测到以下情况时,自动缩放功能将发出缩放请求

纵向扩展 纵向缩减
在 5 分钟轮询间隔中分配的核心数大于 80%(1 分钟检查期) 在 5 分钟轮询间隔中分配的核心数小于或等于 20%(1 分钟检查期)
  • 对于纵向扩展,自动缩放会发出纵向扩展请求来添加所需数量的节点。 纵向扩展基于的条件是:需要多少新的工作器节点才能满足当前的 CPU 和内存要求。 此值上限为设置的最大工作器节点数。

  • 对于纵向缩减,自动缩放会发出请求来删除一些节点。 纵向缩减注意事项包括每个节点的 Pod 数、当前的 CPU 和内存要求,以及根据当前作业执行情况可能会被删除的候选工作器节点。 纵向缩减操作首先关闭节点,然后将其从群集中删除。

    重要

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

群集指标

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

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

指标 说明
可用核心百分比 群集中的可用核心总数与群集中的核心总数之比。
可用内存百分比 群集中的可用总内存(以 MB 为单位)与群集中的总内存量之比。
分配的核心百分比 群集中分配的核心总数与群集中的核心总数之比。
分配的内存百分比 群集中分配的内存量与群集中的内存总量之比。

默认情况下,每 300 秒检查一次上述指标,当使用自定义自动缩放选项自定义轮询间隔时,该间隔也是可配置的。 自动缩放将根据这些指标做出纵向扩展或纵向缩减决策。

注意

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

正常停用

企业需要通过自动缩放实现 PB 级缩放的方法,以及在不再需要资源时正常停用资源的方法。 在这种情况下,正常停用功能就非常方便。

即便在自动缩放已触发工作器节点停用后,正常停用也会允许完成作业。 此功能允许继续预配节点,直到作业完成。

  • Trino:默认情况下,工作器已启用正常停用。 协调器允许终止的工作器在配置的时间内完成任务,然后再将该工作器从集群中移除。 可以使用本机 Trino 参数 shutdown.grace-period 或在 Azure 门户服务配置页上配置超时。

  • Apache Spark:纵向缩减可能会影响/停止群集中任何正在运行的作业。 如果在 Azure 门户中启用正常停用设置,则会合并 YARN 节点的正常停用,并确保工作器节点上正在进行的任何工作都已完成,然后才从 HDInsight on AKS 群集移除节点。

冷却期

为了避免持续进行纵向扩展操作,自动缩放引擎会等待一个可配置的间隔,然后再启动另一组纵向扩展操作。 默认值设置为 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 资源管理器模板,将自动缩放添加到 clusterProfile -> autoscaleProfile 部分,可以创建采用基于计划的自动缩放的 HDInsight on AKS 群集。

自动缩放节点包含一个定期设置,其中有一个时区和计划,用于描述更改的发生时间。 有关完整的资源管理器模板,请参阅示例 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 资源管理器模板,将自动缩放添加到 clusterProfile -> autoscaleProfile 部分,可以创建采用基于负载的自动缩放的 HDInsight on AKS 群集。

自动缩放节点包含

  • 轮询间隔、冷却期
  • 正常停用
  • 最小节点数和最大节点数
  • 标准阈值规则
  • 缩放指标(描述更改何时发生)。

有关完整的资源管理器模板,请参阅如下所示的示例 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) 或使用标志 (enabled, false) 可禁用自动缩放。
  • 请参考上述步骤中提到的 JSON 示例。

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

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

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

一旦想要恢复自动缩放操作即可进行恢复。

屏幕截图显示如何继续自动缩放。

提示

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

复制自动缩放配置

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

屏幕截图显示如何导出或导入自动缩放配置。

监视自动缩放活动

群集状态

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

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

屏幕截图显示群集状态。

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

屏幕截图显示群集大小。

操作历史记录

可查看群集指标中包含的群集增加和减少历史记录。 还可以列出过去一天、过去一周或其他时段的所有缩放操作。

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

其他资源

手动缩放 - Azure HDInsight on AKS