Lah*_*ana 9 amazon-ec2 amazon-web-services docker amazon-ecs
在 ecs 集群中,我有一个运行着 2 个 ec2 实例的服务。我更新了任务定义以获取新的 docker 镜像。但即使有新的任务定义,旧的任务定义仍在运行。
我已使用以下命令更新任务定义和服务。
aws ecs register-task-definition --family service90-task --cli-input-json file://service90-task.json
aws ecs update-service --cluster service90-cluster --service service90-service --desired-count 0
TASK_REVISION=`aws ecs describe-task-definition --task-definition service90-task | egrep "revision" | tr "/" " " | awk '{print $2}' | sed 's/"$//'`
aws ecs update-service --cluster service90-cluster --service service90-service --task-definition service90-task:${TASK_REVISION} --desired-count 2
Run Code Online (Sandbox Code Playgroud)
我尝试了几次,但无法弄清楚我哪里出错了。我想让 ecs 服务运行新的任务定义而不是旧的。
后来我发现,不更新任务的原因是期望计数设置为 2,并且只有 2 个 EC2 实例可用。因此,即使任务已更新,ECS 代理也会尝试保留所需的计数。
解决方案 - 拥有一个额外的 EC2 实例(在本例中为 3 个 EC2 实例)。或者有一个比首选任务数多的实例。
通过这种方式,新的任务定义可以在额外的实例上运行。在额外的 EC2 实例上稳定后,ECS 代理将耗尽其他两个实例上旧任务定义的连接,同时负载均衡器将流量重定向到更新的实例。ECS 代理用新的任务定义替换旧的任务定义。然后它将所需的计数保持为 2。
归档时间: |
|
查看次数: |
11767 次 |
最近记录: |