使用自动化虚拟机管理优化费用

本文档介绍了在 Google Cloud 上自动管理虚拟机 (VM) 实例的方法,并针对不同使用场景推荐了最佳做法。本文档适用于负责现有云基础架构维护和费用控制的运营人员和管理人员,以及将现有工作流迁移到云端的开发者。

云的主要优势是您只需为所用的计算资源付费。例如,Compute Engine 虚拟机按秒计费。生产系统通常连续运行,但某些虚拟机(如开发或测试环境中的虚拟机)通常仅在工作时间使用。用于批处理的其他虚拟机在完成任务后不再需要。在没有虚拟机或要运行的任务时保持虚拟机运行没有任何用处,因此关闭虚拟机可以节省资金。从本地硬件迁移的系统通常不会在没有用户或任务运行时利用关闭功能。手动管理大量虚拟机很繁琐,容易出错,并且难以在大型组织中强制执行。

Google Cloud 提供了多种优化和自动管理虚拟机实例的方法,从简单的基于时间的实例计划Cloud Composer 等可以跨多种产品和云编排复杂工作流的工具。本文档介绍了一些选项,可帮助您确定哪种工作流最适合您的使用场景。

选择自动化工作流

下图提供了决策树,它可以帮助您确定最适合您的使用场景的自动化工作流。

可帮助您选择自动化工作流的决策树。

上图概述了以下步骤:

  1. 虚拟机是否供人们使用,例如用于远程工作站,还是用于批处理或事件作业?
    1. 对于人员,请参阅本文档后面的自动执行实例调度。自动实例调度使用 Cloud Scheduler 和 Cloud Functions。
    2. 对于批量或事件作业,请继续下一步。
  2. 您的作业是否涉及到跨多个产品或云编排工作?
    1. 如果是,请参阅本文档后面的编排复杂的工作流。复杂的工作流使用 Workflows 和 Cloud Composer。
    2. 如果不是,请继续下一步。
  3. 您的作业是否太大而无法容纳在一个虚拟机实例中?
    1. 如果是,请参阅本文档后面的处理大量数据。如需处理大量数据,请使用 Dataflow。
    2. 否则,请参阅本文档后面的按需运行作业。如需按需运行作业,请使用 Cloud Scheduler 和 Cloud Functions。

自动安排实例

对于仅在一天或一周的某些时间段内需要的虚拟机实例来说,时间安排非常有用。常见用例包括仅在工作时间使用的虚拟桌面和开发/测试基础架构。

在设置时间安排之前,请考虑以下事项,以确定安排是否是您的组织及其用户的最佳选项:

  • Compute Engine 提供承诺使用折扣,可节省大多数资源的费用。如果您的组织已经具有能够满足所有虚拟机使用量的承诺使用合约承诺,则调度不会进一步降低费用。
  • Compute Engine 为在结算月份的大部分时间内运行的任何实例提供自动持续使用折扣。如果实例运行时间占一个月的 75% 以上,则最高折扣百分比最高可达 30%。虽然调度仍然能够降低费用,但成本优势也会相应地降低。
  • 自动安排时间要求时间可预测。如果您的用户的工作时间无法预测,请考虑使用自动清理解决方案,它可在特定时间段后关闭实例。

停止、暂停和删除实例

在 Google Cloud 中,一个完全可操作的实例处于运行状态。您可以通过暂停、停止或删除它来有效地关闭正在运行的实例。下表显示了每个状态如何影响计费以及是否保留实例组件:

实例状态 vCPU 内存 磁盘 结算
正在运行 vCPU、内存和磁盘
已暂停 实例内存和磁盘
已停止 仅磁盘
已删除

暂停实例

当某个实例被暂停时,它不再可用,但会保留内存和磁盘状态。您不需要为 vCPU 付费,但需要为任何已暂停的实例内存和设备状态以及任何挂接的磁盘付费。

如果用户可以快速从前一天结束的地方继续工作,请考虑暂停实例。暂停的常见使用场景包括虚拟桌面和开发者工作站。如需了解详情,请参阅暂停和恢复实例

停止实例

实例停止后,挂接的磁盘将会保留,但任何内存中的内容都将丢失。实例停止后,您只需为其磁盘付费。启动已停止的实例等效于从挂接的磁盘重新启动该实例,包括运行任何启动脚本

如果不需要保留内存状态和快速恢复,请考虑停止实例。停止的常见用例包括测试环境和 CI/CD 流水线。如需了解如何设置时间表,请参阅安排虚拟机实例启动和停止

删除实例

已删除的实例不再存在,且无法恢复。默认情况下,系统会自动删除挂接的启动磁盘,但您可以更改自动删除设置

为便于轻松重新创建实例,您可以将实例的完整配置(包括所有磁盘)保存为机器映像。您可以使用快照保存单个磁盘的内容。机器映像和快照会产生存储费用。

如果需要每次将内存和磁盘都恢复到已知状态,请考虑删除并重新创建实例。常见的使用场景包括从单个模板复制的大量实例,例如课堂实验室环境。

自动执行批量作业

批量作业是按需运行或按设定的计划运行的自动化任务。作业完成后,其资源不再需要,因此可以删除。

按需运行作业

某些批量作业是按需运行的。例如,用户可能请求在后台准备一份耗时的报告,并通过电子邮件发送给他们。

按需运行作业的轻量级解决方案是使用 Cloud Functions。Cloud Functions 让开发者能够创建单一用途的独立函数,无需管理实例即可对事件作出响应。Cloud Functions 的价格基于用量,因此经济实惠。下图展示了 Cloud Functions 如何与 Compute Engine 搭配使用:

Cloud Functions 会按需触发 Compute Engine 作业。

在上图中,应用通过调用 HTTP 触发器网址来调用 Cloud Functions 函数。应用可以根据用户输入来调用触发器网址。例如,如果用户在前端 Web 应用中请求报告,则该应用可以调用触发器网址以开始准备报告。

Cloud Functions 也可以由事件触发,例如将文件上传到 Cloud Storage 存储分区。如需查看示例工作流,请参阅对上传到 Cloud Storage 的数据进行自动分类

Cloud Functions 函数可以调用 Compute Engine API 来创建临时实例,然后该实例可以执行 Shell 脚本或运行程序。如需在实例完成运行后自行删除实例,您可以使用 gcloud 命令行工具。如需查看示例,请参阅在 Compute Engine 上创建自动删除的虚拟机

如需更详细的示例,请参阅 Cloud Functions 教程使用 Cloud Scheduler 和 Cloud Functions 部署定期 Compute Engine 虚拟机工作器

安排作业

在本地环境中,Cron 作业是运行计划任务的标准方式。但是,运行 Cron 调度器要求实例持续可用(可能并非如此)且持续运行,即使不执行工作也是如此。在云端按原样使用 Cron 并不可靠,而且效率低下。我们建议您创建分布式 Cron 系统,同时使用 Cloud Scheduler 和 Pub/Sub 将消息发送到 Compute Engine 实例。如需查看此模式的示例,请参阅使用 Cloud Scheduler 在 Compute Engine 上可靠地安排任务

处理大量数据

某些批量作业会在合理的时间内处理因单个虚拟机而过大的数据量。Dataflow 提供与 Apache Beam 兼容的框架,用于跨一组虚拟机运行批处理和流处理作业,自动创建和删除所需的资源。如需与常规价格相比获得额外折扣,您可以使用灵活资源调度来调度在 6 小时内运行的批量作业。

编排复杂的工作流

除了虚拟机实例,某些作业还需要其他资源,例如数据库、临时存储或提取、转换、加载 (ETL) 流水线

您可以使用工作流创建轻量级工作流来处理事件或编排微服务。Workflows 与 Cloud Functions、Cloud Run 或任何其他能通过网络访问且支持 HTTP 的 API(无论是在 Google Cloud 内部还是外部)搭配使用。工作流是无服务器的,可以缩减至零,因此适用于无法应对突发需求增长但延迟极短的不可预测的工作负载。如需查看示例,请参阅使用工作流将数据从 Cloud Storage 加载到 BigQuery使用工作流和无服务器服务创建自定义机器学习流水线

对于数据工程或 ETL 等批量编排工作流,Google Cloud 提供了一个名为 Cloud Composer 的 Apache Airflow 托管版本。Cloud Composer 工作流建模为在可扩缩、始终开启的集群上运行的有向无环图,并且可以在其他产品或云中使用各种 Airflow 运算符。如需查看获取备份实例快照进行备份的示例解决方案,请参阅使用 Cloud Composer 实现基础架构自动化

减少未使用的容量

若要构建基础架构供将来使用,您需要估算需求。估算需求后,有时虚拟机对其作业来说太大,或者完全未使用。在对架构进行最低限度的更改的情况下迁移本地基础架构时(这有时称为直接原样迁移),这些问题很普遍。虽然无法轻松回滚物理硬件投资,但在云中,您可以通过调整实例大小或删除实例来轻松降低费用。

作为 Active Assist 的一部分,Google 提供了一个 Recommendations Hub 来显示项目的安全和效率建议。有两种主要的建议类型可以降低虚拟机费用和识别未使用的资源。

降低虚拟机费用

Compute Engine 实例按 vCPU 和内存大小收费,因此运行比实际工作负载所需的更大的实例效率低下。

根据过去 5 天内的虚拟机利用率,Google Cloud 会在 Recommendations Hub 和 Cloud Console Compute Engine 页面中提供机器容量建议。您还可以通过 gcloud recommender recommendations 命令和 Recommender API 获得这些建议。

用于降低费用的其他选项包括:

  • E2 机器类型,提供与 N1 类似的性能,费用节省了 31%。
  • 抢占式虚拟机,适用于可在短时间内被抢占(停止)的工作负载。
  • 选择其他地区,这可能会降低价格。

您可以更改实例的机器类型,将其调整为较小或更便宜的实例。如需更改实例机器类型,您必须先停止该实例。

识别空闲实例

有时,会为没有明确定义的端点的任务创建实例。例如,用户可能会创建测试实例来测试特定功能或版本,然后在完成后忘记关闭实例。下图展示了如何将 Cloud Scheduler 与 Cloud Functions 和 Recommender API 结合使用来识别和删除空闲虚拟机:

Recommender 建议有助于识别和删除空闲实例。

为了自动识别空闲实例,Recommender 会评估 Compute Engine 实例在一段时间内的 CPU 和网络使用情况。此数据用于创建可通过 Recommender API 获得的空闲虚拟机建议。在上图中,Cloud Scheduler 触发了一个函数,该函数获取空闲虚拟机建议,然后删除空闲实例。为了帮助降低费用,您可以自动管理空闲 Compute Engine 实例,来标记空闲实例以供审核,还可选择性地停止或删除这些实例。

如需了解如何检查 IP 地址和永久性磁盘等关联资源,请参阅使用 Cloud Functions、Cloud Scheduler 和 Cloud Monitoring 自动进行费用优化

清理已过期的实例

您可以使用 Cloud Scheduler 和 Cloud Functions 设置垃圾回收函数,如下图所示。该函数会自动删除运行时间超过您配置的时间段的选定虚拟机。

Cloud Scheduler 可帮助您清理已过期的实例。

在上图中,Cloud Scheduler 向 Pub/Sub 发送消息,后者会触发 Cloud Functions 删除已过期的虚拟机。如需查看此模式的示例,请参阅大规模清理 Compute Engine 实例

后续步骤