我在 Google Cloud Platform 的一个项目中有一个托管实例组。我的实例组正在使用 GCP 提供的最小预定机器 f1-micro(更多信息请见此处:https://cloud.google.com/compute/docs/machine-types#sharedcore)
我已在实例组上启用了自动扩缩功能,设置如下:
gcloud compute instance-groups managed set-autoscaling [my-ig] \
--region us-central1 \
--min-num-replicas=3 \
--max-num-replicas=15 \
--cool-down-period=250 \
--scale-based-on-cpu \
--target-cpu-utilization=0.9
我遇到了一些奇怪的行为,在 CPU 使用率出现一些小/短暂的峰值后,自动缩放器决定大规模自动缩放我的实例,然后几分钟后又回到原来的数字。
这是我的实例组的 CPU 图的样子,在此屏幕截图中,实例组没有自动缩放,并且有 3 个实例运行我的应用程序:
对我来说,这些实例看起来不需要自动扩展,它们似乎凭借其拥有的功能而稳定,并且实际上,网站的表现确实非常好。
以下是 Google 对此类虚拟机实例的评价:
f1-micro 机器类型提供突发功能,允许实例在短时间内使用额外的物理 CPU。当您的实例需要的物理 CPU 比最初分配的更多时,会自动发生突发。在这些峰值期间,您的实例将趁机利用可用的物理 CPU
我的问题是:
- 考虑到每个虚拟机实例有 0.2 个共享 CPU,该图中的峰值是否正常?或者即使机器如此小,这些峰值也不应该存在?
- 启用自动缩放后,自动缩放器会在 CPU 活动的每个上升沿开始疯狂地添加实例,而实际上,如果对 CPU 进行平均,则 CPU 使用率不会出现真正的峰值,只是会出现很快稳定的小幅突发。
我的选择(我认为)是:
- 使用较少的实例但更大的尺寸
使用一些 stackdriver 图表,以 10 分钟为单位计算平均 CPU 数量(太贵了)- 禁用自动缩放并手动执行
- 修复我的代码中的 CPU 峰值(如果可能的话,以防这不是微型虚拟机的正常行为)
答案1
您可能会遇到 f1-micro 实例类的突发能力(可使实例 CPU 利用率超过 100%)和Autoscaler 如何处理高 CPU 负载。
在 CPU 使用率较高的时期,如果利用率接近 100%,则自动扩缩器会估计该组可能已经严重过载。在这些情况下,自动扩缩器会将虚拟机数量增加至少 50% 或至少 4 个实例(以较高者为准)。通常,托管实例组中的 CPU 利用率不会超过 100%。
我认为您已经很好地概述了您的选择。我建议您检查一下是否可以在完全不使用自动缩放的情况下进行管理。
如果您的应用程序负载分布与昼夜节律相关(夜间无流量,白天负载高),您可以半自动地调整实例组大小(考虑从 cron 调用 GCE API/gcloud)。