【问题标题】:How fast can ECS fargate boot a container?ECS fargate 启动容器的速度有多快?
【发布时间】:2018-06-08 22:47:38
【问题描述】:

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

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

【问题讨论】:

    标签: aws-fargate aws-ecs


    【解决方案1】:

    鉴于我使用 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 秒内运行。

    【讨论】:

    • 鉴于 fargate 的性能特征可能会继续变化,我已将接受的答案更改为您的答案,我很高兴接受更新的更新答案。
    • 嗯。我们的容器仍然需要大约 4 分钟,但它们包括 Chrome、Java、Node JS 等以及我们的代码、构建、npm repo 等。老实说,我认为 45 MB 的容器对于我的目的来说并不现实。仅我们的代码库和所有库就大约 850 MB。 ECS 报告的我们的总容器约为 1.7 GB。
    • 这是一个有趣的 docker 容器大小对比:brianchristner.io/docker-image-base-os-size-comparison
    • @RyanShillington 与 Fargate PM 交谈,他们应该在不久的将来某个时候发布某种形式的缓存,这样您就可以预先缓存您的特定图像以支付一定的费用,这将大大增加发布像你这样的情况。
    • 你是否可以在单个帐户的区域上启动 1000 个 fargate 任务?限制似乎是100? docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/…你怎么能这样做?
    【解决方案2】:

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

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

    尽管如此,以下是我在 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。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 完全同意。我搜索了答案以了解,为什么重新部署需要这么长时间,这似乎是“正常”行为:(
      【解决方案4】:

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

      【讨论】:

      猜你喜欢
      • 2019-05-14
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2020-08-05
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多