在之前的文章中,我们通过一个简单的案例介绍过如何创建 VM 实例,点此复习。但是在实际使用过程中,单个实例往往是无法满足需求,需要使用实例组。

Compute Engine 提供了两种虚拟机实例组,即托管实例组和非托管实例组:

  • 托管实例组 (MIG) ,可以让用户在多个相同的虚拟机上运行应用。用户可以利用自动化 MIG 服务使得工作负载具有高可用性和可扩缩性,这些服务包括自动扩缩、自动修复、区域(多地区)部署和自动更新等。
  • 非托管实例组,则可以让用户跨一组自行管理的虚拟机实现负载均衡。

使用场景与优势

场景:
  • 无状态服务工作负载,例如网站前端
  • 无状态批处理、高性能或高吞吐量计算工作负载,例如队列中的图片处理
  • 有状态应用,例如数据库、旧版应用以及设有检查点且长时间运行的批量计算
优势:

高可用性。

  • 让虚拟机实例持续运行。如果实例组中的某个虚拟机停止运行、发生崩溃,或者被实例组管理命令以外的操作(例如故意缩减规模)删除,则 MIG 会自动根据原始实例的规范(即使用相同虚拟机名称和相同模板)重新创建该虚拟机,让该虚拟机可以继续运行。
  • 基于应用的自动修复。您还可以设置基于应用的运行状况检查,该检查会定期验证应用是否在每个 MIG 实例上按照预期进行响应。如果应用在某个虚拟机上没有响应,自动修复程序会自动为您重新创建该虚拟机。相较于仅验证虚拟机是否已启动并正在运行,检查应用是否响应可以获得更加精准的结果。
  • 地区(多区域)覆盖。地区级 MIG 可让您将应用负载分布到多个区域。这种复制机制可避免区域性故障。如果发生这种情况,您的应用可以继续通过在同一区域的其他可用地区中运行的实例处理流量。
  • 负载均衡。MIG 可搭配负载均衡服务一起使用,将数据流量分配到该实例组中的所有实例。

可扩缩性。当应用所需的计算资源发生变化时,自动扩缩的 MIG 会根据实际需求自动增加或删减该实例组中的实例数量。

自动更新。MIG 自动更新程序可让用户更安全地将新版软件部署到 MIG 中的实例上,同时还支持滚动更新和 Canary 更新等一系列灵活的发布方案。用户还可以控制部署的速度和范围,以及服务中断级别。

支持有状态工作负载。用户可以使用 MIG 来构建高可用性部署,并自动执行使用有状态数据或配置的应用,例如数据库、DNS 服务器、旧版单体式应用或设有检查点且长时间运行的批量计算。有状态 MIG 会在机器重启、重新创建、自动修复和更新事件后保留每个实例的独有状态(实例名称、挂接的永久性磁盘和元数据)。

MIG 功能和常规工作负载概览


创建代管实例组

MIG 会根据您指定的实例模板和可选的有状态配置来创建每个代管式实例。每个代管式实例都是 MIG 中的数据实体,其中包含实际虚拟机实例的当前状态和预期状态。MIG 会主动确保实际虚拟机可用(即处于 RUNNING 状态),以保持应用的高可用性。


使用 instance-groups managed create 命令

gcloud compute instance-groups managed create example-group \
--base-instance-name test \
--size 3 \
--template an-instance-template

INSTANCE_GROUP_NAME:所创建的实例组名称。

SIZE:实例组的大小。

INSTANCE_TEMPLATE:该组将使用的实例模板的名称。

ZONE:提供 Compute Engine 服务的一个可用区。

更改托管实例组的实例模板

点击页面顶部的滚动更新。

在更新模式下,选择寻机更新或主动更新。

调整 MIG 的大小

MIG 的大小调整手动和自动两种方式,其中自动扩缩的工作原理是,当有更多负载时,该功能会向您的 MIG 中添加更多虚拟机(扩充),而在虚拟机需求量减少时,该功能会删除虚拟机(缩减)。我们只需定义自动扩缩政策,自动扩缩程序即可根据测量到的负载执行自动扩缩。当然,自动扩缩仅适用于区域和地区的托管实例组,针对非托管实例组是不适用的。

自动扩缩更多信息可以通过官方文档了解:
https://cloud.google.com/compute/docs/autoscaler#policies

如果代管实例组尚未设置为自动扩缩,则可以手动调整组的大小以更改实例数。如果增加大小,则代管实例组会使用当前实例模板添加新实例。

如果要减小代管实例组的大小,则该实例组将删除自身所含的某些虚拟机。实例组首先会删除 currentAction 为 DELETING、CREATING 和 RECREATING 的实例,然后才会删除正在运行并且无任何计划内操作的实例。

使用 resize 命令

gcloud compute instance-groups managed resize  \
--size  \
--zone

如需从实例组中移除实例而不删除实例,请使用 abandon-instances 命令。

gcloud compute instance-groups managed abandon-instances  \
--instances example-i3n2,example-z2x9 \
--zone

如需删除某托管实例组,但必须保留此代管实例组内的某些虚拟机,请先放弃这些实例,以将虚拟机从该实例组移除,然后再删除代管实例组。

使用 delete 命令

gcloud compute instance-groups managed delete  \
--zone

返回全部