将机器类型建议应用于 MIG


Compute Engine 可为托管式实例组 (MIG) 提供机器类型建议,帮助您提高工作负载性能和成本效益。您可以根据这些建议来决定是否应调整实例的机器类型容量,以添加或移除 vCPU 和内存资源。

如需详细了解虚拟机实例的可用机器类型,请参阅机器类型文档。

机器类型建议也称为合理容量建议

准备工作

  • 阅读 Google Cloud 控制台文档。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

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

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

        安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

        gcloud init

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

限制

建议功能适用于单个可用区中未使用自动扩缩或负载均衡的托管实例组。

价格

机器类型容量建议是免费提供的。如果您应用建议以调整实例的机器类型容量,则需要为您选择的机器类型付费。

使用场景

如果存在以下工作负载情况,则可以利用机器类型建议:

  • 流量有周期性变动的工作负载,例如易受季节性流量影响的工作负载。
  • 由于受到读写吞吐量等其他限制,其 CPU 和 RAM 未得到充分利用的工作负载。
  • 运行需要单独软件许可的软件,因而无法添加更多实例的工作负载;在这种情况下,您可以依赖机器类型建议来扩缩机器类型,同时保持虚拟机实例的数量不变。
  • 无法动态适应实例数量不断变化的工作负载,例如不太适合自动扩缩的工作负载。

出于以下任何原因考虑,您可能不希望使用机器类型建议:

  • 您的工作负载具有极短的 CPU 利用率峰值。因为机器类型建议基于 CPU 平均利用率(以 60 秒为时间间隔),所以系统生成建议的速度可能不够快,无法捕获较短的峰值。为了适应短暂的 CPU 使用峰值,出现这些峰值的应用可能需要在比 Google 建议的类型更大的机器类型上运行,或者您可以启用自动扩缩
  • 负载峰值的发生频率为每 8 天不到一次(例如,每月出现一次峰值)。很少出现峰值的工作负载会被容量调整算法忽略,该算法仅查看过去 8 天的历史记录。
  • MIG 中的每个实例处理的工作负载差别很大。在这种情况下,建议会针对负载最高的虚拟机实例进行优化,这会使实例组中的大多数虚拟机实例容量过大。
  • 您的 MIG 未充分利用虚拟机,因为它不处理实时流量,而旨在提供可随时提供服务的故障切换容量。
  • 由于以下某种原因,您的 MIG 的虚拟机容量过大:
    • 您的软件许可要求机器容量不低于某个水平。
    • 您有至少要某个机器类型才能满足的存储或网络 IOPS 需求。

机器类型建议的工作原理

Compute Engine 会监控正在运行的虚拟机的 CPU 和内存利用率,并基于最近 8 天的数据提出建议。为了向代管式实例组中的所有实例建议最佳的单个机器类型,Compute Engine 会针对各个实例生成标准的机器类型建议,并在调整离群值后,选择一个不会造成任何虚拟机实例容量不足的机器类型。任何未运行的实例(例如已停止或正在重启的虚拟机实例)都不包含在计算中。

Compute Engine 可能会提出如下所示的建议:

  • 如果在大多数情况下实例组的 CPU 利用率较低,则 Compute Engine 会建议使用虚拟 CPU 较少的机器类型。
  • 如果在大多数情况下实例组的 CPU 利用率较高,则 Compute Engine 会建议使用虚拟 CPU 较多的机器类型。
  • 如果实例组尚未使用其大部分内存,则 Compute Engine 会建议使用内存较少的机器类型。
  • 如果在大多数情况下实例组都在频繁使用其大部分内存,则 Compute Engine 会建议使用内存较多的机器类型。

Compute Engine 可能会建议使用标准或自定义机器类型。请注意,可供机器使用的内存容量和 vCPU 数量受限制。具体而言,增加一个资源可能需要同时增加另一个资源,才能符合有效机器类型的规范。此外,Compute Engine 只会建议使用在运行实例的可用区支持的机器类型。

如需了解详情,请参阅自定义机器类型规范

如果托管实例组的工作负载在各实例间的分布十分不均,按照建议,为了使资源利用率极高的实例获得足够的资源,可能会导致对某些实例分配过多容量。例如,Compute Engine 可能提出以下建议来支持实例 4 的工作负载,即使这可能导致实例 1、2、3、5 容量过大,未得到充分利用:

针对托管实例组的建议
由于各个托管实例之间存在不同工作负载而导致容量过大的示例

因此,当实例具有合理分布的工作负载时,针对托管实例组的建议最有效。

在预估费用差异方面,实例组的费用基于前一周的使用量(不考虑持续使用折扣),并换算为 30 天的费用。然后,将其与建议的机器类型的每月费用(未享有持续使用折扣)进行比较。如需了解准确的价格和详细信息,请阅读价格文档

查看机器类型建议

Compute Engine 通过 Google Cloud 控制台提供建议。您可以使用 gcloud CLI 或 REST 通过 Recommender 查看机器类型建议。

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”页面

  2. 选择您的项目并点击继续
  3. 查看建议列,了解针对各托管实例组的建议。您还可以按预估节省金额对列排序。如果实例组旁边没有任何建议,则表示 Compute Engine 未提出任何建议。

    “建议”列。

  4. 如果您的实例组有两个实例模板,Compute Engine 会针对每个实例模板提供建议。点击某条建议可查看针对相应实例模板的建议。

    针对多个模板的建议

gcloud

使用 gcloud recommender recommendations list 命令并指定虚拟机托管实例组合理容量 Recommender

gcloud recommender recommendations list \
      --recommender=google.compute.instanceGroupManager.MachineTypeRecommender \
      --project [PROJECT_ID] \
      --location [ZONE] \
      --format=yaml

例如:

gcloud recommender recommendations list \
    --recommender=google.compute.instanceGroupManager.MachineTypeRecommender \
    --project my-project \
    --location us-central1-a \
    --format=yaml

对于各项建议,响应都包括以下字段:


---
content:
  ...
  operationGroups:
  - operations:
    - action: test
      path: /properties/machineType
      resource: //compute.googleapis.com/projects/my-project/global/instanceTemplates/my-old-template
      resourceType: compute.googleapis.com/InstanceTemplate
      value: n1-standard-4
    - action: copy
      path: /
      resource: //compute.googleapis.com/projects/my-project/global/instanceTemplates/$new-it-name
      resourceType: compute.googleapis.com/InstanceTemplate
      sourcePath: /
      sourceResource: //compute.googleapis.com/projects/my-project/global/instanceTemplates/my-old-template
    - action: replace
      path: /name
      resource: //compute.googleapis.com/projects/my-project/global/instanceTemplates/$new-it-name
      resourceType: compute.googleapis.com/InstanceTemplate
      value: $new-it-name
    - action: replace
      path: /properties/machineType
      resource: //compute.googleapis.com/projects/my-project/global/instanceTemplates/$new-it-name
      resourceType: compute.googleapis.com/InstanceTemplate
      value: custom-2-5632
  - operations:
    - action: replace
      path: /versions/*/name
      pathValueMatchers:
        versions/*/instanceTemplate:
          matchesPattern: .*global/instanceTemplates/my-old-template
      resource: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instanceGroupManagers/example-group
      resourceType: compute.googleapis.com/InstanceGroupManager
      value: global/instanceTemplates/$new-it-name
...
description: Save cost by changing machine type from n1-standard-4 to custom-2-5120.
...
name: projects/823742397239/locations/us-central1-a/recommenders/google.compute.instanceGroupManager.MachineTypeRecommender/recommendations/c50a1c41-7e65-417d-a32e-45248a2cb318
...

如需了解详情,请参阅 Recommender 文档。

REST

Recommender API 与托管实例组机器类型 Recommender ID 搭配使用。

PROJECT_ID=my-project
LOCATION=us-central1-c
RECOMMENDER_ID=google.compute.instanceGroupManager.MachineTypeRecommender

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://recommender.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION/recommenders/$RECOMMENDER_ID/recommendations

对于各项建议,响应都包括以下字段:

  • name:建议的名称
  • description:用户易于阅读的建议说明。
  • operationGroups:可按顺序执行以应用建议的若干组操作。

如需了解详情,请参阅 Recommender 文档。

创建新的托管实例组后 24 小时,系统会显示针对新组的建议。

之后,建议会在一天中定期刷新。

向实例组应用建议

如果想要应用 Compute Engine 提出的建议,您可以直接通过控制台调整托管实例的容量。或者,您可以自行手动逐步执行容量调整操作。Recommender API 会返回一系列容量调整操作;如需了解详情,请参阅操作组

将建议应用于托管实例组时,您可以执行以下操作:

  1. 克隆托管实例组使用的实例模板。
  2. 根据建议以及您要进行的任何更改来修改克隆的实例模板。
  3. 使用托管实例组更新程序应用新模板。如果实例组具有两个实例模板,则遵循以下要求:

    1. 一次只能应用对一个实例模板的建议。
    2. 一个托管式实例组同时最多可维持两个实例模板,因此您无法在维持另外两个实例模板的同时应用建议。但是,如果实例组只有一个实例模板,则您可以应用建议。

如需直接通过控制台调整托管实例的容量,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”页面

  2. 点击要更新的实例组的建议文本。

    选择一个建议列。

  3. 弹出窗口会显示更多详细信息以及可用于取消忽略建议或继续的选项。如需查看和应用建议,请点击继续

  4. 查看建议页面中详细介绍了建议。如果您要应用建议,则 Compute Engine 会将实例组中使用旧模板的所有实例更新为新模板。

  5. (高级)如需自定义向实例部署新模板的方式,请点击自定义部署。 此时会显示部署配置屏幕。

    1. 如果您想要主动删除实例并使用新实例模板创建实例,请选择自动。如果您只想在通过其他方式创建实例(例如调整大小或将新实例添加到组)时应用更新,请选择选择性
    2. 如果选择自动更新,请选择是否在替换实例时保留实例名称
      • 如果您选择保留实例名称,请在临时附加的实例下,选择要在代管式实例组的目标大小的基础上创建的临时额外实例数。您允许的实例越多,更新速度就越快,只是必须额外创建实例。系统默认会额外创建 1 个实例。
    3. 不可用实例数上限下,选择此更新期间同时允许多少个实例离线。此数量也包含由于其他原因而不可用的任何实例。例如,如果正在增加实例组的容量,则正在创建中的实例可能不可用,这些实例将计入此数量中。默认值为一次只能有 1 个实例不可用。
    4. 可选:展开显示高级选项。在最短等待时间下,选择在将新实例标记为“已更新”之前需等待的时间(以秒为单位)。自健康检查成功完成后开始计时。此功能可用于控制实例模板的应用速率。
  6. 如需应用更改,请点击保存

  7. 当您准备好部署更改时,请点击部署

忽略建议

如果您已使用完建议,则可以通过控制台忽略建议。在控制台中,如果忽略建议,则系统会从预估节省总额中移除建议,并且还会将建议变成灰色,让建议最小化显示。

通过控制台忽略建议不会影响 Recommender API 返回的建议列表。如需管理 Recommender API 返回的建议状态,请参阅使用 API

如需通过控制台忽略某项建议,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”页面

  2. 点击要忽略的建议文本。弹出窗口会显示更多详细信息以及一个忽略按钮。

  3. 点击关闭

如需在控制台中恢复建议,请执行以下操作:

  1. 实例组页面上,点击您要恢复的灰色建议文本。

    已忽略的建议。

  2. 弹出窗口会显示更多详细信息以及一个恢复按钮。

  3. 点击恢复

使用监控代理获取更精确的建议

Cloud Monitoring 提供一个监控代理,可用于从虚拟机实例收集额外的磁盘、CPU、网络和进程指标。您可以在虚拟机实例上安装 Monitoring 代理,这样此代理就可以访问系统资源和应用服务,以收集此数据。

如果虚拟机实例上已安装且正在运行 Monitoring 代理,则此代理收集的 CPU 和内存指标会自动用于计算机器类型建议。与默认的 Compute Engine 指标相比,Monitoring 代理提供的代理指标可让您更好地了解实例的资源利用率。这样,建议引擎就能更好地预估资源需求并提出更精确的建议。

如需安装此代理,请参阅安装 Cloud Monitoring 代理

后续步骤