【问题标题】:Replace ECS tasks in cluster using AWS cli使用 AWS cli 替换集群中的 ECS 任务
【发布时间】:2020-06-26 13:06:51
【问题描述】:

我正在尝试替换 ECS 集群中的当前任务。

上下文: 我有 2 个任务(最多 4 个) 每次我对 docker 映像进行更改时,都会构建、标记映像并将其推送到 ECR(通过 Jenkins)。我想添加一个计时器,并在 x 分钟后用新任务替换当前任务(也在 CI/CD 中)

我试过了

aws ecs update-service --cluster myCluster --service myService --task-definition myTaskDef

但是没有用。

另外,我在 StackOverflow 和论坛中找到了一些建议,但在最好的情况下,我以 4 个任务结束,而我只想用新任务替换当前任务。

这可以使用 CLI 吗?

【问题讨论】:

    标签: amazon-web-services aws-cli amazon-ecs


    【解决方案1】:

    通常你会使用update-service--force-new-deployment参数:

    是否强制重新部署服务。 默认情况下不强制部署。您可以使用此选项触发新部署,而无需更改服务定义。例如,您可以更新服务的任务以使用较新的 Docker 映像和相同的映像/标签组合 (my_image:latest ),或将 Fargate 任务滚动到较新的平台版本。

    【讨论】:

    • 谢谢,@Marcin 我也尝试过,但我总是以 4 个任务结束而不是替换。
    • @Peter 如果您将服务的期望容量设置为 4,您将始终有 4 个任务。
    • 一如既往地感谢@Marcin 它仍然不起作用。我的服务有 2 个所需的计数,最小运行状况为 50,最大运行状况为 100。部署控制器是 ECS。因此,我在集群中运行了 2 个任务。我将带有最新标签的新图像推送到 ECR。然后,我运行: aws ecs update-service --cluster myCluster --service myService --task-definition myTaskDefinition --force-new-deployment 并且……没有任何反应!我预计任务会下降并上升。但不是。我可能会丢失或看到什么?
    • @Peter 没问题。您能否检查 ECS 服务控制台中的事件选项卡。这通常有更多关于正在发生的事情的信息。
    • 谢谢,@Marcin。奇怪的问题。它工作了,但在 2 小时后(这就是为什么我没有看到更改,也没有看到事件选项卡中的消息)。但是,今天正在工作,需要 10/15 分钟。而且...没有任何改变!
    【解决方案2】:

    @Marcin 提到的第一件事,在未指定 --force-new-deployment 且任务定义修订没有更改的此类部署中,部署将被 ECS 代理忽略。

    部署后您看到的第二个副本是minimumHealthyPercent and maximumPercent,因为服务调度程序使用这些参数来确定部署策略。

    最低健康百分比

    如果minimumHealthyPercent 低于 100%,调度程序可以忽略 部署期间临时的desiredCount。 例如,如果 desiredCount 是四个任务,最少 50% 允许调度程序 在开始两个新任务之前停止两个现有任务。 不使用负载均衡器的服务被认为是健康的,如果 它们处于 RUNNING 状态。使用负载的服务的任务 平衡器如果处于 RUNNING 状态,则被认为是健康的,并且 它们所在的容器实例被报告为健康的 负载均衡器。

    最大百分比

    maximumPercent 参数表示部署期间运行任务数的上限,可让您定义部署批量大小。 例如,如果desiredCount 是四个任务,则最多 200% 会在停止四个旧任务之前启动四个新任务(前提是执行此操作所需的集群资源可用)

    Modifies the parameters of a service

    因此将minimumHealthyPercent 设置为50%,计划将在开始一项新任务之前停止一项退出任务。将其设置为0 然后您可能会看到来自 LB 的错误网关,因为它会在启动两个任务之前停止两个退出任务。

    如果您仍然无法控制流量,请传递--desired-count

    aws ecs update-service --cluster test --service test --task-definition test --force-new-deployment --desired-count 2
    

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 1970-01-01
      • 2019-06-08
      • 2020-09-30
      • 2017-09-13
      • 1970-01-01
      • 2021-05-12
      • 2021-02-13
      • 2018-12-23
      相关资源
      最近更新 更多