我对 docker 和 ECS 还不熟悉,所以我可能用词不当。如果我需要澄清,请告诉我。
我的情况:我有许多独立的容器。每个容器代表一个网站。每个容器应该一直运行,但可能会长时间处于不活动状态(例如零 CPU 使用率)。为了说明,假设我有 10 个容器,每个容器需要最多 200MB RAM 和最多 1vCPU。让我们进一步假设我只需要总共 2vCPU 来处理所有 10 个容器的总负载(因为它们不会同时承受高负载)。
Fargate 选项 1:我为每个容器创建一个不同的任务:(2GB,1vCPU)x 10(2GB 是 1vCPU 的最低 RAM)。
Fargate 选项 2:我创建了一个包含所有容器的单一任务:(2GB,2vCPU)。
EC2 选项:我为每个容器创建一个任务,所有任务都映射到单个 EC2 实例。
如果我理解正确的话,Fargate 选项 2 更便宜比 Fargate 选项 1 更合适,因为我知道我最多只需要 2vCPU。但选项 2 的灵活性要差得多,因为它是停止/启动/扩展的任务,我想将我的容器视为彼此独立的(例如独立停止/启动/扩展)。
此外,如果我理解正确的话,EC2 Option 是我既能灵活地按容器分配任务,又能为实际需要的资源付费的唯一方式。
因此:对于资源利用率较低的独立容器来说,Fargate 目前似乎并不太适合。
我的理解正确吗?
答案1
没错,对于相同的 vCPU/RAM 数量,Fargate 比 EC2 更贵。
例如:
这最小的 Fargate 容器0.25 vCPU 和 0.5 GB RAM 的成本为 0.019 美元/小时,即每个容器每月 14 美元。
如果你需要 1 个 vCPU,则最低 RAM 为 2GB(请参阅Fargate 支持的配置)突然间价格就每个容器每月 55 美元。在您的情况下,乘以 10 个任务就是每月 550 美元。
另一方面,如果你有信心可以将所有这些压缩到一个t3.小(2 vCPU,2 GB RAM)每小时费用为 0.0208 美元,大约每月 15 美元。即使你恰好需要 2 或 3t3.小实例来支持您的负载它仍然比Fargate便宜得多。
如果你将所有容器集中到一个 Fargate 任务中(如你的选项 2)它仍然比使用 EC2 ECS 更昂贵,而且在一个任务中拥有多个独立容器也更加复杂。这不值得这么麻烦。
总而言之 - 如果您想全天候运行容器并且它们并非一直都得到充分利用,那么最好在基于 EC2 的 ECS 集群上运行它们。
使用 Fargate 时,您需要为灵活性支付额外费用。
如果您的容器仅短暂运行以完成任务然后退出,或者它们根据需求进行扩大和缩小,那么在 Fargate 中运行它们会容易得多 - 您无需扩大和缩小底层 EC2 集群来支持负载。
在许多情况下,即使每个 vCPU/RAM 的成本更高,在 Fargate 上运行效果也更好。我们每天几次启动数百个容器的批次进行一些处理,每个容器仅运行约 10 分钟。如果我们必须在每次运行之前扩展 EC2/ECS 集群,等待它稳定下来,处理故障,然后运行批处理作业,然后再次缩小规模,则开销会非常高,我们的批处理将花费更长的时间。
在这里,Fargate 对我们来说非常有用。不过,我不会将它用作始终在线的服务。
希望有帮助:)
答案2
您还可以使用 EKS(Elastic Kubernetes Service)代替 ECS。
Kubernetes 对 Pod、服务、卷等提供了更多控制。不过我不确定它是否比 ECS 便宜,也许不便宜。