本教程介绍了如何使用自动扩缩功能来自动调整正在托管应用的虚拟机实例的数量,从而使您的应用能够适应不同的流量。
如需使用自动扩缩功能,请在托管实例组上托管应用。代管实例组是可以作为单个实体管理并且全都运行同一应用的实例的集合。当托管式实例组启用自动扩缩功能后,实例组中的虚拟机数量会根据您为自动扩缩政策指定的目标值自动增加(扩容)或减少(缩容)。
本教程包含一系列详细步骤,说明了如何在托管式实例组上启动 Web 应用、设置自动扩缩、配置网络访问权限,以及如何通过模拟负载峰值和低谷来观察自动扩缩情况。完成本教程需要大约 20 分钟,具体取决于您对这些功能的熟悉程度。
目标
- 在托管式实例组上启动演示 Web 应用。
- 通过模拟流量峰值和低谷来观察自动扩缩的影响。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Compute Engine
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
应用架构
该应用包括以下 Compute Engine 组件:
- 防火墙规则:借助 Google Cloud 防火墙,您可以允许或拒绝流向您的实例的流量。
- 实例模板:用于在托管式实例组中创建各个虚拟机实例的模板。
- 区域托管实例组:可跨多个地区运行同一应用的一组虚拟机实例。
启动 Web 应用
本教程以存储在 GitHub 上的 Web 应用为例。如果您想详细了解该应用的实现方式,请参阅 GitHub 上的 GoogleCloudPlatform/python-docs-samples 仓库。
通过在实例模板中添加启动脚本的方式在托管实例组中的每个虚拟机上启动 Web 应用。如需允许 HTTP 流量进入 Web 应用,请创建一条防火墙规则。
创建防火墙规则
创建一条防火墙规则以允许 HTTP 流量进入 Web 应用:
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙规则。
在名称下,输入
default-allow-http
。将网络设置为
default
。设置目标以选择
Specified target tags
。在目标标记下,输入
http-server
。将来源过滤条件设置为
IPv4 ranges
。在来源 IPv4 范围下,输入
0.0.0.0/0
以允许所有 IP 地址访问。
在协议和端口下,选择指定的协议和端口。 然后,选中 TCP 并输入
80
以允许访问 HTTP 流量。点击创建。
创建实例模板
创建用于在启动时启动演示 Web 应用的实例模板:
在 Google Cloud 控制台中,转到实例模板页面。
点击创建实例模板。
在名称下,输入
autoscaling-web-app-template
。在机器配置下,将机器类型设置为
e2-standard-2
。在防火墙下,选中允许 HTTP 流量复选框。这会将
http-server
网络标记应用于根据此模板创建的每个实例。展开高级选项部分以查看高级设置。
展开管理部分。
在自动化部分中,输入以下启动脚本:
sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
此脚本可使每个实例在启动期间运行 Web 应用。
点击创建。
创建代管式实例组
创建区域实例组以开始运行 Web 应用:
在 Google Cloud 控制台中,转到实例组页面。
点击创建实例组以创建一个新的实例组。
选择新的托管式实例组(无状态)。
对于名称,输入
autoscaling-web-app-group
。对于实例模板,请选择
autoscaling-web-app-template
。对于位置,选择多个可用区。
对于区域,选择 us-central1。
对于可用区,请从下拉列表中选择以下可用区:
- us-central1-b
- us-central1-c
- us-central1-f
为实例组配置自动扩缩功能:
- 对于自动扩缩模式,选择开启:在实例组中添加和移除实例。
将实例数下限设置为
3
。将实例数上限设置为
6
。将初始化期设置为
120
秒。在自动扩缩指标下,选择 CPU 利用率作为指标类型。如需详细了解自动扩缩指标,请参阅自动扩缩政策。
将目标 CPU 利用率设置为
60
。点击完成。
在自动修复下方,从健康检查下拉列表中选择不检查健康状况。
点击创建。这会将您重定向到实例组页面。
验证您的实例正在运行,步骤如下:
- 在 Google Cloud 控制台中的实例组页面上,点击
autoscaling-web-app-group
以查看相应实例组中的实例。 在外部 IP 下,点击一个 IP 地址以连接相应实例。一个新标签页即会打开,其中会显示该演示 Web 应用:
完成后,关闭演示 Web 应用所在的浏览器标签页。
- 在 Google Cloud 控制台中的实例组页面上,点击
观察自动扩缩
如需详细了解自动扩缩行为,请参阅了解自动扩缩决策。
监控自动扩缩
您创建的实例组使用基于 CPU 使用率的自动扩缩政策。这意味着自动扩缩程序会根据需要扩缩实例组,以保持 60
% 的目标 CPU 利用率。
如需监控实例组的大小和 CPU 利用率,请使用 Google Cloud 控制台中的自动扩缩图表:
- 在
autoscaling-web-app-group
实例组的实例组页面上,点击监控标签。 - 您可以通过组大小图表监控自动扩缩情况。该图表显示实例,表示一段时间内组中的虚拟机实例数量。
可选:要监控自动扩缩容量与利用率,请参阅自动扩缩器利用率 (CPU) 图表。该图表会显示利用率(实例组中虚拟机实例的总 CPU 利用率)和容量(实例组的累计目标 CPU 利用率,即目标 CPU 利用率乘以虚拟机实例数)。
自动扩缩功能会尽可能尝试通过更改实例数量来让容量与利用率相匹配。
保持此窗口处于打开状态。
模拟横向扩容
当实例组的平均 CPU 利用率显著高于目标值时,会发生横向扩容。在横向扩容期间,自动扩缩器会逐渐增大实例组的规模,直到 CPU 利用率降为目标 CPU 利用率值,或者直到实例组规模等于实例数上限(设置为 6
)。
如需触发横向扩容,请增加实例的 CPU 利用率:
在 Google Cloud 控制台中,打开 Cloud Shell。
Cloud Shell 会在 Google Cloud 控制台的底部打开。该会话可能需要几秒钟来完成初始化。
为项目 ID 创建本地 bash 变量:
export PROJECT_ID=[PROJECT_ID]
其中,
PROJECT_ID
是当前项目的 ID,它显示在 Cloud Shell 中的每个新行上:user@cloudshell:~ ([PROJECT_ID])$
运行以下 bash 脚本。此脚本会导致演示 Web 应用实例的负载增加,从而增加 CPU 利用率。 几分钟后,CPU 利用率将超过目标值,从而提示自动扩缩功能扩大实例组规模。
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating high load for instance $NAME" curl -q -s "http://$IP/startLoad" >/dev/null --retry 2 done
打开 Google Cloud 控制台中的 Monitoring 标签页。
几分钟后,监控标签页显示 CPU 利用率增加了,这可通过增加实例数来触发自动扩缩以增加容量。
您可能还注意到,现在概览标签页下列出了 6 个实例。
保持两个窗口都处于打开状态。
模拟缩减
当实例组的平均 CPU 利用率显著低于目标值时,会发生缩减。在缩减期间,自动扩缩器会逐渐减小实例组的规模,直到 CPU 利用率增至目标 CPU 利用率,或者直到实例组规模等于实例数下限(设置为 3
)。
如需触发缩减,请降低实例的 CPU 利用率:
运行以下 bash 脚本。此脚本会导致演示 Web 应用实例的负载减少,从而降低 CPU 利用率。 几分钟后,CPU 利用率将降至目标值以下,从而提示自动扩缩程序缩小实例组规模。
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating low load for instance $NAME" curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2 done
打开 Google Cloud 控制台中的 Monitoring 标签页。
几分钟后,监控标签将显示 CPU 利用率下降。在稳定期(证实负载一致在下降)后,自动扩缩功能会通过减少实例数来降低容量。
您可能还注意到,概览标签页下仅列出了 3 个实例。
完成后关闭这两个窗口。
清理
完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍如何删除或关闭这些资源。
如果您为本教程创建了单独的项目,请删除整个项目。 否则,如果项目中包含您要保留的资源,则只删除在本教程中创建的资源。
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除特定资源
删除实例组
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
autoscaling-web-app-group
instance group. - To delete the instance group, click Delete.
删除实例模板
在 Google Cloud 控制台中,转到实例模板页面。
选中
autoscaling-web-app-template
旁边的复选框。点击页面顶部的
删除。在新窗口中,点击删除以确认删除。
删除防火墙规则
在 Google Cloud 控制台中,转到防火墙规则页面。
选中名为
default-allow-http
的防火墙规则旁边的复选框。点击
删除。 在新窗口中,点击删除以确认删除。
后续步骤
- 试用其他教程:
- 详细了解托管实例组。
- 详细了解自动扩缩功能。
- 详细了解如何设计可靠系统。
- 详细了解如何在 Google Cloud 上构建可扩缩的弹性 Web 应用。