19

AWS ECS Fargate 启动和运行 docker 映像的最短/平均时间是多少?
为了争论,45MB 的anapsix/alpine-java图像。

我想研究使用 ECS Fargate 来加快在速度较慢的笔记本电脑/PC 上本地构建软件的过程,方法是将软件构建在更快的远程服务器上。
因此,映像的启动时间对于使努力值得一试至关重要。

4

4 回答 4

22

鉴于我在 Fargate 的经验,我不同意接受的答案。

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

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

Fargate 中的容器启动时间完全取决于容器的大小。Fargate 不缓存容器,因此每个运行任务都会导致 docker pull 发生。如果你的镜像是基于 Ubuntu 的,你会遇到很糟糕的事情。

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

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

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

任何比这更长的时间,并且您的容器对于 Fargate 来说可能太大而没有任何意义,直到它们提供预缓存的 ecr 或类似的东西。

对于您的具体示例,我们有类似大小的容器,如果您的入口点运行良好(即不是 60 秒的 java 启动时间),您的 45mb 容器应该启动并准备好在 30-60 秒内运行。

于 2018-09-13T15:48:48.847 回答
10

我仍在等待 ECS+EC2 中已经提供的 Fargate 中的缓存。可以在此处跟踪此功能请求。容器在 AWS Fargate 上启动需要这么长时间,真是让人头疼。Google Cloud Platform 已经提供了托管 Cloud Run (K8s) 环境中普遍可用的此功能,其中容器在收到请求时会即时启动(约 2 秒)。它们在(可配置的)5 分钟后空闲,这导致您只需为这 5 分钟付费。

AWS Fargate 还没有提供如此好的“温暖容器”功能,尽管我强烈推荐他们这样做。要做到这一点,将计算和存储紧密结合在一起可能在技术上很困难,它需要大量的内部带宽才能像谷歌一样快速加载这些容器。

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

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

在此处输入图像描述

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

于 2019-02-13T11:10:19.160 回答
9

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

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

希望 AWS 会随着时间的推移加快这一进程。启动 Fargate 容器所需的时间应该不会比将我的 docker 映像上传到 ECR 所需的时间更长。

于 2018-03-05T05:32:00.210 回答
-2

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

于 2019-08-28T15:44:11.457 回答