Amazon-Ec2

Ecs服務不更新任務定義

  • April 18, 2019

在 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

我嘗試了幾次,但無法弄清楚我哪裡出錯了。我想讓 ecs 服務執行新的任務定義而不是舊的。

正如我後來發現的,不更新任務的原因是所需的計數設置為 2,並且只有 2 個 EC2 實例可用。因此,即使任務已更新,ECS 代理也會嘗試保留所需的計數。

解決方案 - 擁有一個額外的 EC2 實例(在本例中為 3 個 EC2 實例)。或者比首選任務數量多一個實例。

這樣,新的任務定義可以在額外的實例上執行。在額外的 EC2 實例上穩定後,ECS 代理將為舊任務定義耗盡其他兩個實例上的連接,而負載均衡器將流量重定向到更新的實例。ECS 代理用新的任務定義替換舊的任務定義。然後它將所需的計數保持為 2。

引用自:https://serverfault.com/questions/821060