使用AWS ECS部署新的docker镜像

问题描述 投票:0回答:1

我有一个ECS集群,其中包含一个运行我已定义的任务的服务。它只是一个简单的烧瓶服务器,因为我正在学习如何使用ECS。现在我正在尝试了解如何更新我的应用程序并让它无缝部署。

  1. 我从烧瓶服务器开始返回Hello, World! (rev=1)
  2. 我在当地修改我的app.pyHello, World! (rev=2)
  3. 我重建了泊坞窗图像,然后推送到ECR
  4. 由于我的图像仍然命名为image_name:latest,我可以简单地更新服务并强制执行新的部署:aws ecs update-service --force-new-deployment --cluster hello-cluster --service hello-service
  5. 我的最小百分比设置为100,我的最大值设置为200%(使用滚动更新),所以我假设应该在旧的EC2实例关闭时设置新的EC2实例。我观察到的(不断刷新ELB HTTP端点)是rev =?在消息中来回交替:(rev=1)然后(rev=2)没有失败(循环,而不是随机)。
  6. 稍后(可能是30秒?)翻转停止并显示新消息:Hello, World! (rev=2)
  7. 在整个过程中,我注意到没有更多的EC2实例已经启动。所以这一切必须发生在同一个实例上。

这里发生了什么?这是在ECS中更新应用程序的正确方法吗?

amazon-web-services docker amazon-ecs amazon-ecr
1个回答
1
投票

这是正常行为,它与您如何配置最小和最大健康百分比相关联。

100%的最低健康百分比意味着每个时刻必须至少运行一个任务(对于应该运行1个任务实例的服务)。最大健康百分比为200%意味着您不允许同时运行2个以上的任务(同样,对于应该运行1个任务实例的服务)。这意味着在服务更新期间,ECS将首先启动一项新任务(达到最大值200%并避免低于100%),并且当这项新任务被认为是健康时,它将删除旧任务(返回100%)。这解释了为什么两个任务在短时间内同时运行(并且是负载平衡的)。

这种配置可确保最大可用性。如果您想避免这种情况,并且可以允许较小的停机时间,您可以将最小值配置为0%,最大值为100%。

关于您的EC2实例:它们代表您的“群集”=您的服务用于启动任务的硬件。上述过程发生在这种“固定”硬件上。

© www.soinside.com 2019 - 2024. All rights reserved.