从 EC2 集群实例迁移到 AWS Fargate 后,我意识到部署需要更长的时间。以前他们需要 1-2 分钟,现在一些部署需要 5 分钟。这篇文章声称他们在 Fargate 上的部署甚至需要长达 10 分钟。
有人知道加快速度的方法吗?我找不到有关此主题的任何文档。
从 EC2 集群实例迁移到 AWS Fargate 后,我意识到部署需要更长的时间。以前他们需要 1-2 分钟,现在一些部署需要 5 分钟。这篇文章声称他们在 Fargate 上的部署甚至需要长达 10 分钟。
有人知道加快速度的方法吗?我找不到有关此主题的任何文档。
通过进一步的谷歌搜索,我发现了这个 Reddit 线程。一位 AWS 员工写道:
关于配置和启动容器的时间,使用 Fargate 肯定会更长。未来我们可能会缩短配置状态的长度,但 Fargate 在幕后所做的工作比在您自己管理的主机上的 ECS 要多得多。当您自行管理主机时,它们已经启动并运行,甚至可能已经将您的 docker 映像下载并缓存到本地,因此 ECS 能够非常快速地启动容器。Fargate 的情况并非如此。
所以缩小图像应该会有所帮助。但总的来说,我想我将不得不忍受它并希望在 AWS 方面进行优化。
以下是我在研究使用 ECS Fargate 缩短部署时间的选项时发现的任务细分和可能的改进:
以下是归因于部署持续时间的幕后情况的细分:
如果您的任务与负载均衡器相关联,则部署还需要通过运行状况检查,并且您需要考虑:
在我的测试过程中,我能够在 4 分钟内部署我的应用程序,该应用程序通常需要大约 8 分钟 w/1024 CPU (1vCPU) 在 4 分钟内 w/4096 CPU (4vCPU)
很可能您的任务通常需要相当少的 CPU,并且您不希望总是为过度分配 CPU 付出代价。因此,使用过度分配的资源运行您的部署,然后在使用原始 CPU 分配后立即运行另一个部署。
可能不是您希望用于每个部署的解决方案,但可能是修补程序部署的解决方案。
根据我的经验,它们速度较慢的两个原因:
awsvpc 网络模式将 ENI 附加到任务。当它必须对 Lambda 执行此操作时,如果 Lambda 在 VPC 中运行,已知会显着增加初始启动时间。
Docker 镜像大小也会影响启动时间,因为通常需要将镜像下载到任何隐藏的主机才能启动任务。我用一个 200MB 的小容器和一个 2.5GB 的容器做了一些基准测试。前者确实启动得更快。
您不能对 awsvpc 做太多事情,因为 Fargate 需要它。缩小该图像将是您的下一个最大影响。