如何加快 AWS Fargate 上的部署?
Posted
技术标签:
【中文标题】如何加快 AWS Fargate 上的部署?【英文标题】:How to speed up deployments on AWS Fargate? 【发布时间】:2019-01-08 03:18:13 【问题描述】:从 EC2 集群实例迁移到 AWS Fargate 后,我意识到部署需要更长的时间。以前他们需要 1-2 分钟,现在一些部署需要 5 分钟。 This post 声称他们在 Fargate 上的部署甚至需要长达 10 分钟。
有人知道加快速度的方法吗?我找不到有关此主题的任何文档。
【问题讨论】:
您如何实际衡量时间?过去我通过查看控制台中的服务事件进行了观察,但我想有更好的方法吗? 我们在每次部署后都会运行一个脚本来检查 ECS 部署是否真正通过。它会测量时间,因此如果部署时间过长,它可能会使管道失败。 【参考方案1】:通过进一步的谷歌搜索,我找到了this Reddit thread。一位 AWS 员工写道:
关于配置和启动容器的时间是 使用 Fargate 时肯定更长。我们可以减少长度 未来的配置状态,但 Fargate 在 引擎盖比您自己管理的主机上的 ECS。当你自我管理 它们已经启动并运行,甚至可能已经拥有您的 docker 镜像下载并缓存在本地,因此 ECS 能够启动 容器很快。 Fargate 并非如此。
所以缩小图像应该会有所帮助。但总的来说,我想我将不得不忍受它并希望在 AWS 方面进行优化。
【讨论】:
【参考方案2】:以下是我在研究使用 ECS Fargate 缩短部署时间的选项时发现的任务细分和可能的改进:
Fargate 部署概述
以下是归因于部署持续时间的幕后情况的细分:
预配 Fargate 工作器实例 提供/附加 ENI 下载 Docker 镜像 在这里您有改进的机会: 减小 Docker 映像的大小 网络吞吐量基于对 Fargate 任务的 CPU 分配 - 如果分配更多 CPU,则获得更多网络,并且图像下载速度更快 应用程序启动时间 如果您的应用程序需要运行状况检查宽限期(同样受 CPU 分配影响),则成为一个因素如果您的任务与负载均衡器相关联,则部署还需要通过运行状况检查,并且您需要考虑:
负载平衡器注销延迟 通过健康检查:(健康检查间隔 * 阈值)如何更快地部署 Fargate 任务更新
过度分配 CPU 减少注销延迟 将健康检查阈值设置为 2,间隔设置为 5 秒 如果您的应用需要,请不要忘记考虑健康检查宽限期我的结果
在我的测试过程中,我能够在 4 分钟内部署我的应用程序,该应用程序通常需要大约 8 分钟(使用 1024 CPU (1vCPU))并在 4 分钟内完成(使用 4096 CPU (4vCPU))
免责声明
您的任务通常需要相当少的 CPU,并且您不希望总是为过度分配 CPU 付出代价。因此,使用过度分配的资源运行您的部署,然后在使用原始 CPU 分配后立即运行另一个部署。
可能不是您希望每次部署都使用的解决方案,但可能是修补程序部署的解决方案。
【讨论】:
【参考方案3】:根据我的经验,它们速度较慢的两个原因:
awsvpc 网络模式将 ENI 附加到任务。当它必须对 Lambda 执行此操作时,如果 Lambda 在 VPC 中运行,已知会显着增加初始启动时间。
Docker 镜像大小也会影响启动时间,因为通常需要将镜像下载到任何隐藏的主机才能启动任务。我用一个 200MB 的小容器和一个 2.5GB 的容器做了一些基准测试。前者确实启动得更快。
您不能对 awsvpc 做太多事情,因为 Fargate 需要它。缩小该图像将是您的下一个最大影响。
【讨论】:
以上是关于如何加快 AWS Fargate 上的部署?的主要内容,如果未能解决你的问题,请参考以下文章
将 Django 部署到 AWS Fargate 时,如何将本地 ip 添加到 ALLOWED_HOSTS