在GKE上运行每周运行一次的程序是否值得?

84次阅读
没有评论

问题描述

团队正在考虑将他们的所有云应用从AWS迁移到GCP,并且他们正在考虑是否在主要程序上使用GKE。然而,他们得知Google将为GKE中的每个集群收取每小时0.10美元的管理费用。用户希望知道对于他们的情况来说,是否值得使用GKE。

他们的工作负载包括两个计算密集型数据分析流程,每周运行一次,每次持续时间为15分钟到3小时不等(可能将在不久的将来增加到每周两次)。在AWS上,他们为每个分析生成多个EC2实例,为每个分析生成一个实例。因此,他们考虑使用GKE,因为他们可以在同一个集群上运行多个分析,并让GKE负责自动扩展。

此外,用户想知道这个费用是否是在为每个节点池中持续运行的每个pod的成本之上。对于每个节点池,他们是否需要支付一个24/7运行的pod的费用,因此这是另一个要考虑的“闲置成本”。

用户只需要每周在集群上运行工作负载约15分钟到6小时,因此支付节点持续运行24/7的费用似乎有点浪费。但也许用户没有看到全局的情况,因为分析可能在同一个集群上运行,从而节省费用。是否有有效的方法在不使用GKE时关闭它 – 无论是pod还是整个集群?这样至少可以节省每月至少690小时的空闲运行时间。用户想知道是否可以在最后一个分析完成后立即终止并删除所有集群,并在需要新分析时每周重新创建它。这样做是否可行?是否会涉及费用?是否可以“自动”完成这个过程?

解决方案

以下解决方案考虑了GKE的特点以及用户的工作负载需求,但请注意每种方法都有其自身的权衡和限制。根据实际情况选择最适合的方案。

方案1:使用Kubernetes集群自动伸缩

如果用户的工作负载在一周内只需要运行15分钟到6小时,而且仅在特定时间运行,那么使用Kubernetes集群的自动伸缩功能可能是一个不错的选择。

在这种情况下,用户可以按照以下步骤操作:
1. 创建一个GKE集群,配置合适的节点池大小。
2. 配置Pod和Deployment来托管用户的工作负载。
3. 设置水平Pod自动伸缩,使Pod根据负载自动增加或减少。
4. 配置定时任务(例如CronJob)来在特定时间启动工作负载。

这样,用户可以根据实际需要,让集群在需要的时候自动扩展并运行工作负载,然后在工作负载完成后自动缩减节点。

方案2:使用基于需求的集群创建和销毁

如果用户的工作负载在特定时间内只需要运行,并且每周运行一次,那么可以考虑使用基于需求的集群创建和销毁方法。

以下是实现这一方法的步骤:
1. 使用基于代码的基础设施管理工具(如Terraform)创建GKE集群的定义。
2. 使用脚本或自动化工具来在需要运行工作负载时创建集群。
3. 运行工作负载,完成后销毁整个集群。

这种方法可以节省闲置节点的费用,但需要考虑以下问题:
– 集群创建和销毁的时间:确保在工作负载需要运行之前及时创建集群。
– 数据管理:如果工作负载需要访问持久化数据,需要确保数据可以在集群销毁时得到保留。

使用基于代码的基础设施管理工具可以帮助用户实现集群的自动创建和销毁,并确保配置的一致性。

方案3:考虑AWS Fargate

用户提到了AWS Fargate,这是一种无需管理基础设施即可运行容器的服务。如果用户不想为集群管理付费,可以考虑AWS Fargate作为另一种选择。这可以让用户专注于工作负载而无需关注底层基础设施。

总之,根据用户的工作负载特点、资源预算和技术偏好,可以选择适合的解决方案。请记住,每种方法都有其自身的权衡和限制,用户需要根据实际情况进行选择。

附注

在进行任何更改之前,建议用户评估其工作负载的特点,根据实际情况考虑费用、管理成本和操作复杂性。涉及集群创建、销毁以及基础设施管理的操作可能会对流程产生影响,用户应该确保所选方案与他们的业务需求相符。

正文完