最简单的自动扩缩形式是根据代管实例组 (MIG) 实例的 CPU 利用率进行扩缩。
您还可以根据负载均衡服务容量、Monitoring 指标或时间表来自动扩缩 MIG。
准备工作
- 查看自动扩缩器限制。
- 了解自动扩缩器基础知识。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
在控制台中,打开实例组页面。
如果您有实例组,请选择该实例组,然后点击修改。如果您没有实例组,请点击创建实例组。
如果不存在自动扩缩配置,请在自动扩缩下点击配置自动扩缩。
在自动扩缩模式下,选择开启:在实例组中添加和移除实例以启用自动扩缩功能。
指定您希望自动扩缩器在此组中创建的实例数量下限和上限。
在自动扩缩指标部分中,如果现有的 CPU 利用率指标尚不存在,请添加一项指标:
- 点击添加指标。
- 在指标类型下,选择 CPU 利用率。
- 输入所需的目标 CPU 利用率。此值被视为百分比。例如,如果 CPU 利用率为 75%,请输入
75
。 - 在预测性自动扩缩下,选择关闭。如需详细了解预测性自动扩缩以及它是否适合您的工作负载,请参阅根据预测进行扩缩。
- 点击完成。
您可以使用初始化期来告知自动扩缩器应用初始化所需的时间。指定准确的初始化期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认初始化期为 60 秒。
点击保存。
- 了解如何启用预测性自动扩缩。
- 了解如何管理自动扩缩器。
- 了解自动扩缩器如何做出决策。
- 了解如何使用多个自动扩缩信号来扩缩实例组。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
根据 CPU 利用率进行扩缩
您可以根据托管实例组 (MIG) 的平均 CPU 利用率进行自动扩缩。如果您使用此政策,则是在指示自动扩缩程序收集组中实例的 CPU 利用率并确定是否需要对实例组进行扩缩。您可以设置自动扩缩程序应该维持的目标 CPU 利用率,而自动扩缩程序将尽力维持在这一水平。
自动扩缩程序将目标 CPU 利用率水平视为实例组中所有 vCPU 在一段时间内的平均使用率的一小部分。如果您的所有 vCPU 的平均利用率超过目标利用率,则自动扩缩程序将添加更多虚拟机实例。如果您的所有 vCPU 的平均利用率超过目标利用率,则自动扩缩程序将移除部分实例。例如,如果将目标利用率设置为 0.75,则是在指示自动扩缩程序将实例组中的所有 vCPU 的平均利用率维持在 75%。
您还可以根据预测的 CPU 利用率进行扩缩。如需了解详情并查看这是否适合于您的工作负载,请参阅根据预测进行扩缩。
根据 CPU 利用率启用自动扩缩
控制台
gcloud
使用
set-autoscaling
子命令为代管式实例组启用自动扩缩。例如,以下命令会创建目标 CPU 利用率为 60% 的自动扩缩器。创建自动扩缩器时,不仅需要--target-cpu-utilization
参数,还需要--max-num-replicas
参数:gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \ --max-num-replicas 20 \ --target-cpu-utilization 0.60 \ --cool-down-period 90
您可以使用
--cool-down-period
标志来设置初始化期,用于告知自动扩缩器应用初始化所需的时间。指定准确的初始化期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认初始化期为 60 秒。(可选)您可以启用预测性自动扩缩功能,以在预测的负载之前提前横向扩容。如需了解预测性自动扩缩是否适合您的工作负载,请参阅根据预测进行扩缩。
您可以使用
instance-groups managed describe
子命令验证是否已成功启用自动扩缩,此子命令用于描述相应的代管式实例组并提供有关该实例组的任何自动扩缩功能的信息:gcloud compute instance-groups managed describe example-managed-instance-group
如需查看可用的
gcloud
命令和标志,请参阅gcloud
参考。REST
如需创建自动扩缩器,请使用
autoscalers.insert
方法(针对可用区级 MIG)或regionAutoscalers.insert
方法(针对区域级 MIG)。以下示例将为可用区级 MIG 创建自动扩缩器:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers/
请求正文必须包含
name
、target
、autoscalingPolicy
字段。autoscalingPolicy
必须定义cpuUtilization
和maxNumReplicas
。您可以使用
coolDownPeriodSec
字段来设置初始化期,以告知自动扩缩器应用初始化所需的时间。指定准确的初始化期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认初始化期为 60 秒。(可选)您可以启用预测性自动扩缩功能,以在预测的负载之前提前横向扩容。如需了解预测性自动扩缩是否适合您的工作负载,请参阅根据预测进行扩缩。
{ "name": "example-autoscaler", "target": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instanceGroupManagers/example-managed-instance-group", "autoscalingPolicy": { "maxNumReplicas": 10, "cpuUtilization": { "utilizationTarget": 0.6 }, "coolDownPeriodSec": 90 } }
如需详细了解如何根据 CPU 利用率启用自动扩缩,请完成为高度可扩缩的应用使用自动扩缩教程。
自动扩缩器如何处理 CPU 利用率非常高的情况
在 CPU 利用率很高的时间段内,如果利用率接近 100%,则自动扩缩器会预估该组可能已经严重过载。在这种情况下,自动扩缩器最多将虚拟机的数量增加 50%。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-15。
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻译问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }] -