2

我有一个集群,可以说我的集群。它有 2 个服务正在运行。让我们称它们为我的服务。每个服务有 1 个任务正在运行。我的任务 1 和我的任务 2。

EC2 实例由启动 2 个 EC2 实例的自动扩展组启动。我正在使用应用程序负载平衡器。

当我创建服务时,我选择了 AZ-balance-spread,它是这样描述的:“此模板将跨可用区域分发任务,并在可用区域内跨实例分发任务。了解更多。策略:spread(attribute:ecs.availability-zone) , 传播 (instanceId)"

我的 EC2 实例位于不同的可用区。但是,当我单击 my-cluster 并选择 ECS-instances 选项卡时,我看到 2 个任务都在 1 个容器实例上运行。另一个容器实例说 0 个任务正在运行。

我期待 2 个容器实例,每个实例运行 1 个任务。

我的问题是,如果我选择了 AZ-balance-spread,这些任务不应该分布在不同 AZ 上的 2 个 EC2 实例之间吗?

我想设置它,以便所有任务都分布在 AZ 之间,所以如果一个实例出现故障,另一个 AZ 中另一个实例上的另一个任务仍然运行。但我似乎无法弄清楚如何做到这一点。话虽如此,如果我创建 4 个任务,它确实会将它们分布在两个实例之间。一个任务2个,另一个任务2个。但是当我只有 2 个任务时,它会将它们全部放在一个 EC2 实例中。

非常感谢您在解决这个谜团方面的帮助!

谢谢!

4

1 回答 1

1

这是亚马逊没有做到完美的事情。我找到的最佳解决方法是将放置策略配置为在 ec2 之间随机分布。问题是每个服务都设置了所有放置策略,所以如果我们配置为使用 InstanceID 进行传播,该服务内的任务将使用此设置,但其他服务不使用此信息并使用相同的策略进行传播,启动相同的 InstanceID(可能是因为编号顺序)。

所以我已经将所有服务配置为随机的,如果这些服务是可扩展的,这不是一个好方法,但就我而言,我有 24 个服务,每个服务只有 1 个任务。使用随机策略,它们在所有集群实例之间传播。

"placementStrategy": [
    {
        "type": "random"
    }
]

任务在实例之间传播

于 2019-02-07T11:51:55.773 回答