gpt4 book ai didi

amazon-web-services - 更新 AWS ECS 服务任务的最佳实践

转载 作者:IT老高 更新时间:2023-10-28 12:38:28 25 4
gpt4 key购买 nike

我目前正在尝试设置一个简单的 CI,它将重建我的项目,创建新的 docker 镜像,将新镜像推送到 amazon ecr 存储库,使用最新的 docker 镜像创建现有任务定义的新修订版,使用任务定义的新修订更新正在运行的服务,最后停止运行旧修订的现有任务并启动运行新修订的任务。

除了开始任务的新版本之外,一切都运行良好。

在 bash 脚本中,我调用的最终命令是:

aws ecs update-service --cluster "$CLUSTER" --service "$SERVICE" --task-definition "$TASK_DEFINITION":"$REVISION"

这会导致以下事件错误:

(service rj-api-service) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance bbbc23d5-1a09-45e7-b344-e68cc408e683) is already using a port required by your task.

这是有道理的,因为我要替换的容器与新容器完全相同,并且将在同一个端口上运行,它只包含我的应用程序的最新版本。

我的印象是 update-service 命令会停止现有任务并启动新任务,但看起来它首先启动新任务,如果成功则停止旧任务一个。

处理此问题的最佳做法是什么?我应该先停止旧任务吗?我是否应该先删除脚本中的服务并在每次更新时重新创建整个服务?

目前我只需要运行 1 个任务实例,但如果我需要它能够自动扩展到多个实例,我不想将自己装箱。有关解决此问题的最佳方法的任何建议?

最佳答案

您收到的消息是因为 ECS 正在尝试进行蓝绿部署。这意味着它试图在不停止当前任务的情况下分配您的新任务修订以避免您的服务停机。一旦最新的任务准备就绪(稳定状态),旧的任务将最终被删除。

这种部署的问题在于,您需要在集群中拥有足够的可用资源,以便在一段时间内维持和运行 2 个任务(旧的和新的)。例如,如果您正在部署一个具有 2GB 内存和 2 个 CPU 的任务,那么您的集群将需要拥有该数量的可用资源才能使用新的任务修订来更新服务。

你有两个选择:

  1. 通过添加新的 EC2 实例来扩展您的集群,这样您就可以拥有足够的可用资源并执行部署。
  2. 更改您的服务配置,以免执行蓝绿部署(在您的集群中同时只允许 1 个任务)。

为了执行选项 2,您只需要设置以下值:

  • 最低健康百分比:0
  • 最大百分比:100

例子

Example

这意味着您只想让 100% 的所需任务运行(仅此而已!),并且您愿意在部署新版本时停机(0% 的健康服务)。

在示例中,我假设您只需要 1 个所需任务,但 最小健康百分比最大百分比 值适用于任何数量的所需任务你想要的任务。

希望对您有所帮助!如果您还有其他疑问,请告诉我。

关于amazon-web-services - 更新 AWS ECS 服务任务的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com