自动扩缩节点组


如果您对工作负载使用单租户节点,则可以使用节点组自动扩缩程序自动管理节点组的大小。您可以在创建节点组时或在创建节点组后配置自动扩缩功能。

自动扩缩程序可以通过以下方式帮助您自动管理单租户节点组的大小:

  • 当节点组没有足够的容量来接纳其他虚拟机实例时,增大该节点组的大小。当自动扩缩器增大该节点组的大小后,系统会以透明的方式调度虚拟机。

  • 当存在空节点时,减小节点组的大小,以免您为未使用的单租户节点付费。

在伸缩节点组时,自动伸缩器会考虑要调度的虚拟机所需的容量、目标节点上的可用容量,以及节点组的自动伸缩政策。所需容量仅取决于虚拟机的大小。可用容量是根据节点的大小、已在其上调度的虚拟机数量以及可选的 CPU 过度使用率估算得出的。

下图展示了以下内容:

  1. 通过向节点组添加新节点来响应虚拟机部署到没有任何空节点的节点组这一操作,节点组自动扩缩器横向扩容。

  2. 通过从单租户节点组中移除空节点,节点组自动伸缩器缩容节点组。

管理节点组大小的节点组自动扩缩器。

自动扩缩器模式

默认情况下,节点组上未启用自动扩缩器。如果未启用自动扩缩器,则您必须手动管理节点组的大小。如果您在节点组上启用自动扩缩器,则可以指定自动扩缩器既能增大节点组的大小也能减小节点组的大小(横向扩容和缩减),也可以指定自动扩缩器仅增大节点组的大小(仅横向扩容)。

横向扩容和缩减

在此模式下,节点组自动扩缩器既可以增大(横向扩容)节点组的大小,也可以减小(缩减)节点组的大小。对于此模式,您必须为节点组指定最大大小和最小大小。自动扩缩器不会将节点组的大小扩大到超过指定的最大值或缩小到低于指定的最小值。

当虚拟机因容量不足而调度失败时,系统会触发横向扩容。如需解决此问题,系统会向群组中添加新的节点,然后再次尝试执行操作。

当节点在一段时间内保持空闲状态时,系统会触发缩减。空节点是由于虚拟机被删除或迁移出节点组而导致的。如果节点组的自动扩缩政策允许,系统会在稳定期过后安排移除空节点。稳定期可确保节点在您需要时仍可用。

仅扩容

在此模式下,自动扩缩器会根据调度虚拟机的请求增大节点组的大小,但不会从节点组中移除空节点。Google 建议将此模式用于数量单调递增的工作负载或需要物理服务器亲和性的工作负载,例如要求在同一物理服务器上驻留许可的自备许可 (BYOL) 工作负载

如果您的节点组已配置为使用在节点组内迁移维护政策,则必须使用此模式。

节点组的大小范围

启用自动扩缩器时,您可以通过指定节点组大小的最小值和最大值来设置节点组的大小范围。

如果您没有为最小大小指定值,则自动扩缩器会将最小大小设置为零 (0)。如果您为最小大小指定了值,则该值必须是大于或等于 0 的整数,并且必须小于或等于最大大小。

您必须为节点组的最大大小指定值。该值必须是大于或等于 0、小于或等于 100(单租户节点组允许的最大大小)的整数,并且必须大于或等于指定的最小值。

如需容纳可能超过单个节点组最大大小 (100) 的工作负载,请创建具有匹配亲和性标签的多个节点组,例如 workload:in:my-autoscaled-node-groups。然后,使用该亲和性标签调度虚拟机,并在每个节点组上启用自动扩缩以创建一组动态扩缩的节点组。

可用性

您只能在支持单租户节点的区域中使用单租户节点自动扩缩器。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

启用节点组自动扩缩器

为新节点组配置自动扩缩功能。

gcloud

以下示例展示了如何在创建节点组时使用 node-groups create 命令启用自动扩缩器。如需向现有节点组添加自动扩缩器,请使用 node-groups update 命令。

gcloud compute sole-tenancy node-groups create group-name \
    --node-template template-name \
    --target-size size \
    --maintenance-policy maintenance-policy \
    --zone zone \
    --autoscaler-mode mode \
    --max-nodes max-nodes \
    --min-nodes min-nodes

替换以下内容:

  • group-name:要创建的节点组的名称。
  • template-name:用以创建节点组的节点模板的名称。
  • size:节点组中的目标初始节点数。
  • maintenance-policy:指定虚拟机是否迁移,以及是否在主机维护事件期间重启。将其设置为以下值之一:
    • default:虚拟机实时迁移到新节点。
    • migrate-within-node-group:虚拟机实时迁移到节点组中的其他节点。
    • restart-in-place:虚拟机由于维护事件终止后在同一节点上重启。
  • zone:要在其中创建节点组的地区。
  • mode:此节点组上自动扩缩器的模式。设置为以下值之一:
    • off:停用自动扩缩器。
    • on:启用横向缩减和横向扩容。
    • only-scale-out:仅启用横向扩容。如果您的节点组已配置为在最少的服务器上重启其托管的虚拟机,则您必须使用此模式。
  • max-nodes:节点组的大小上限。设置为小于或等于 100 且大于或等于 min-nodes 的值。
  • min-nodes:节点组的大小下限,必须是小于或等于 max-nodes 的整数值。默认值为 0。

REST

以下示例展示了如何在创建节点组时使用 nodeGroups.insert 命令启用自动扩缩器。如需向现有节点组添加自动扩缩器,请使用 nodeGroups.patch 命令。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/nodeGroups?initialNodeCount=initial-node-count

  {
    "name": "group-name",
    "nodeTemplate": "template-name",
    "autoscalingPolicy": {
      "mode": "mode",
      "min_nodes": min-nodes,
      "max_nodes": max-nodes
    }
    "maintenancePolicy": maintenance-policy
  }

替换以下内容:

  • project-id:要为其添加节点组以及自动扩缩器的项目的 ID。
  • zone:要在其中创建新节点组的地区。
  • initial-node-count:创建节点组时需要。这用于指定节点组中的初始节点数。如果 min-nodes 的值大于初始节点数,则节点组的大小会横向扩容为 min-nodes 的值。
  • group-name:新节点组的名称。
  • template-name:用以创建节点组的节点模板的名称。
  • mode:此节点组上自动扩缩器的模式。设置为以下其中一项:
    • OFF:停用自动扩缩器。
    • ON:启用横向缩减和横向扩容。
    • ONLY_SCALE_OUT:仅启用横向扩容。如果您的节点组已配置为在最少的服务器上重启其托管的虚拟机,则您必须使用此模式。
  • max-nodes:节点组的大小上限。设置为小于或等于 100 且大于或等于 min-nodes 的值。
  • min-nodes:节点组的大小下限,必须是小于或等于 max-nodes 的整数值。 默认值为 0。
  • maintenance-policy:指定虚拟机是否迁移,以及是否在主机维护事件期间重启。请将此项设置为以下值之一:
    • DEFAULT:虚拟机实时迁移到新节点。
    • MIGRATE_WITHIN_NODE_GROUP:虚拟机实时迁移到节点组中的其他节点。
    • RESTART_IN_PLACE:虚拟机由于维护事件终止后在同一节点上重启。

更新自动扩缩器设置

通过更新自动扩缩器模式或更新节点组的大小下限和上限,更改节点组上的自动扩缩器设置。

gcloud

以下示例展示了如何使用 node-groups update 命令更改节点组上自动扩缩器的模式。

gcloud compute sole-tenancy node-groups update name \
    --autoscaler-mode mode \
    --max-nodes max-nodes \
    --min-nodes min-nodes

替换以下内容:

  • name:要更改其自动扩缩器模式的节点组的名称。
  • mode:此节点组上自动扩缩器的模式。设置为以下其中一项:
    • off:停用自动扩缩器。
    • on:启用横向缩减和横向扩容。
    • only-scale-out:仅启用横向扩容。如果您的节点组已配置为在最少的服务器上重启其托管的虚拟机,则您必须使用此模式。
  • max-nodes:节点组的大小上限。设置为小于或等于 100 且大于或等于 min-nodes 的值。
  • min-nodes:节点组的大小下限,必须是小于或等于 max-nodes 的整数值。 默认值为 0。

REST

以下示例展示了如何使用 nodeGroups.patch 命令更改节点组上自动扩缩器的模式。

PATCH https://compute.googleapis.com/compute/beta/projects/project-id/zones/group-zone/nodeGroups/group-name

{
  "nodeTemplate": "template-name",
  "autoscalingPolicy": {
    "mode": "mode",
    "minSize": min-nodes,
    "maxSize": max-nodes
  }
}

替换以下内容:

  • project-id:要更改其自动扩缩器模式的节点组所属项目的 ID。
  • group-zone:要更改其自动扩缩器模式的节点组所在的可用区。
  • group-name:要更改其自动扩缩器模式的节点组的名称。
  • template-name:用以创建节点组的节点模板的名称。
  • mode:此节点组上自动扩缩器的模式。设置为以下其中一项:

    • OFF:停用自动扩缩器。
    • ON:启用横向缩减和横向扩容。

    • ONLY_SCALE_OUT:仅启用横向扩容。如果您的节点组已配置为使用在节点组内迁移维护政策,则必须使用此模式。

  • max-nodes:节点组的大小上限。设置为小于或等于 100 且大于或等于 min-nodes 的值。

  • min-nodes:节点组的大小下限,必须是小于或等于 max-nodes 的整数值。 默认值为 0。

手动更新自动扩缩的节点组的大小

启用自动扩缩器后,系统会自动管理节点组大小,但您可以调度或移除该节点组上的虚拟机,以有效地手动更新节点组大小。

如需手动减小自动扩缩的节点组的大小,请从节点中删除虚拟机,直到该节点为空。当节点为空时,自动扩缩器会移除空节点,从而减小节点组的大小。

如需手动增加自动扩缩的节点组的大小,请将该节点组的大小下限设置为大于当前大小的值。当节点组的大小下限设置为大于当前大小的值时,自动扩缩器会将节点组大小横向扩容为新指定的大小下限。

将节点组设置为仅限横向扩容时,自动扩缩器会自动对节点组大小的增加进行管理并停用节点组大小的手动增加功能。借助此设置,您可以从节点中移除虚拟机,直到该节点为空,然后移除空节点,从而减小节点组的大小。

停用自动扩缩器

如果您不再需要使用自动扩缩器自动管理节点组的大小,或者需要手动管理节点组的大小,请停用自动扩缩器。

gcloud

gcloud compute sole-tenancy node-groups update name \
    --autoscaler-mode OFF

name 替换为要从中移除自动扩缩政策的节点组的名称。

REST

以下示例展示了如何使用 nodeGroups.patch 命令关闭节点组上的自动扩缩器。

PATCH https://compute.googleapis.com/compute/beta/projects/project-id/zones/group-zone/nodeGroups/group-name

{
  "nodeTemplate": "template-name",
  "autoscalingPolicy": {
    "mode": "mode"
  }
}

替换以下内容:

  • project-id:要更改其自动扩缩器模式的节点组所属项目的 ID。
  • group-zone:要更改其自动扩缩器模式的节点组所在的可用区。
  • group-name:要更改其自动扩缩器模式的节点组的名称。
  • template-name:用以创建节点组的节点模板的名称。
  • mode:此节点组上自动扩缩器的模式。设置为 OFF 可停用此节点组上的自动扩缩器。

查看自动扩缩器的活动

在 Google Cloud 控制台中,查看调整节点组大小的自动扩缩器。Google Cloud 控制台会显示节点组的当前大小,如果自动扩缩器正在调整节点组的大小,则您还可以查看节点组的目标大小。

控制台

  1. 在 Google Cloud 控制台中,转到单租户节点页面。

    转到“单租户节点”

  2. 点击节点组

  3. 查看每个节点组中的节点数,如果 Compute Engine 正在扩缩节点组,则您还可以查看目标节点数。

后续步骤