ECS fargate 启动容器的速度有多快?

How fast can ECS fargate boot a container?

AWS ECS Fargate 的 minimum/average 启动时间和 运行 docker 映像是多少?
为了论证,45MB anapsix/alpine-java 图片。

我想研究使用 ECS Fargate 来加快在较慢 laptop/pc 上本地构建软件的过程,方法是在更快的远程服务器上构建软件。
因此,映像的启动时间对于使努力物有所值至关重要。

我现在已经在 Fargate 和 public VPC 上启动了 100 多个容器,它们平均需要大约 4 分钟,但我在糟糕的一天看到它长达 7-8 分钟.

如果您在私有 VPC 上启动它,那么时机可能会很快。我发现如果 NAT 实例过载,启动 Fargate 容器需要 2 个小时。

希望 AWS 会随着时间的推移加快速度。启动 Fargate 容器所花的时间不应该比将 docker 图像上传到 ECR 所花的时间更长。

根据我使用 Fargate 的经验,我不同意接受的答案。

我已经在 Fargate 上启动了 1000 个容器,甚至在 AWS 架构博客中介绍了我们对 Fargate 的使用。 https://aws.amazon.com/blogs/architecture/building-real-time-ai-with-aws-fargate/

NAT 网关后面的私有子网对我们来说与 IGW 后面的容器启动时间没有什么不同。如果您确定使用单个 NAT 实例,您的里程可能会有所不同。

Fargate 中的容器启动时间完全取决于容器的大小。 Fargate 不缓存容器,因此每个 运行 任务都会导致 docker 拉取。如果您的图像基于 Ubuntu,您将有一段糟糕的时光。

我们混合使用了 GO from scratch 容器和 Alpine 节点容器。

平均而言,根据我们从 1000 次启动中汇总的指标,容器从头开始并在 10-15 秒内在目标组中正常运行。

Alpine 容器平均需要 30-40 秒才能启动并变得健康。

任何比这更长的时间,您的容器可能太大,以至于 Fargate 在提供预缓存的 ecr 或类似的东西之前没有任何意义。

对于你的具体例子,我们有类似大小的容器,如果你的入口点很快就健康了(即不是 60 秒 java 开始时间),你的 45mb 容器应该启动并准备好在 30 -60 秒。

我仍在等待 ECS+EC2 中已经可用的 Fargate 缓存。可以跟踪此功能请求 here。容器在 AWS Fargate 上启动需要很长时间,这真是令人头疼。 Google Cloud Platform 已经在托管云 运行 (K8s) 环境中提供了此功能,其中容器在收到请求时会快速启动(约 2 秒)。他们在(可配置的)5 分钟后进入空闲状态,这导致您只需为这 5 分钟付费。

AWS Fargate 还没有提供 "warm containers" 这么好的功能,尽管我强烈建议他们这样做。将计算和存储紧密结合起来以实现这一点在技术上可能很困难,它需要大量的内部带宽才能像 Google 一样快地加载这些容器。

尽管如此,以下是我在 AWS Fargate 上使用 Docker 容器的经验。从以下我启动的容器示例(2019 年 2 月)可以看出,启动时间与容器映像大小高度相关:

4000 MB ~ 5 分钟
2400 MB ~ 4 分钟
1000 MB ~ 2 分钟
350 MB ~ 50 秒

我建议在轻量级基础映像(例如 Minideb 或 Alpine)上构建容器映像。这将使您的容器镜像非常小,从 10MB 到 100MB 不等。但是话又说回来,当您需要 JVM 或 Python 以及一些额外的包和 c-lib 时,您将轻松达到 1000 MB。

可以在 EC2 启动类型上使用 ECS_IMAGE_PULL_BEHAVIOR = prefer-cached 以在很大程度上减少代理启动时间。