Jon*_*sie 2 amazon-web-services terraform aws-ecs
在推送我的容器的新图像后,我使用Terraform apply来更新任务定义.这似乎工作正常,但在ECS服务任务列表中,我可以看到任务处于非活动状态,我有一个事件:
service blahblah was unable to place a task because no container instance met all of its requirements. The closest matching container-instance [guid here] is already using a port required by your task.
问题是,该网站仍然活跃和工作.
yda*_*coR 10
这更像是ECS问题而不是Terraform问题,因为Terraform正在更新您的任务定义并更新服务以使用新任务定义,但ECS无法将新任务安排到容器实例上,因为您(可能)定义了容器必须运行的特定端口,并直接将其映射到主机或使用主机网络而不是桥接(或新的aws-vpc
CNI插件).
ECS有几个参数来控制服务更新的行为:最低健康百分比和最大健康百分比.默认情况下,它们分别设置为100%和200%,这意味着ECS将尝试部署与新任务定义匹配的新任务,并在终止旧任务之前等待它被认为是健康的(例如传递ELB运行状况检查).
在您的情况下,您拥有与群集中的容器实例一样多的任务,因此当它尝试将新任务安排到群集时,它无法放置它,因为该端口已被旧任务绑定.如果您的任务/服务存在放置限制,您也可能会发现自己处于此位置.
由于最低健康百分比设置为100%,因此无法安排删除任何旧任务,然后释放新任务的放置选项.
您可以在群集中拥有比运行任务实例更多的容器实例,这将允许ECS在从其他实例中删除旧任务之前部署新任务,或者您可以更改最小健康百分比([ deployment_minimum_healthy_percent
](https:// www .terraform.io/docs/providers/aws/r/ecs_service.html#deployment_minimum_healthy_percent在Terraform的ECS服务资源中)到一个小于100的数字,允许部署发生.
例如,如果您通常在服务中部署3个任务实例,则将最小健康百分比设置为50%将允许ECS在安排与新任务定义匹配的新任务之前从服务中删除一个任务.然后,它将继续滚动升级,确保在更换旧任务之前新任务是健康的.
将最低健康百分比设置为0%意味着ECS可以在启动新任务之前停止所有正在运行的任务,但这显然会导致潜在(但不能保证)的服务中断.
或者,如果您的服务可行,则可以通过切换主机网络来删除放置约束.
归档时间: |
|
查看次数: |
1285 次 |
最近记录: |