2017-02-22 46 views
0

我有一个由实例类型A的容器实例组成的ECS集群,可以说它的t2.small。该集群由多台运行多个服务的机器组成。现在,我即将有一个新的服务/任务(让我们称之为“GreatRequirements”),这将需要比任何其他服务/任务更多的CPU /内存。我希望能够引导1台大型机器(让我们称之为“LargeMachine”),其他任务永远不会放在集群上,以便集群中的这台机器始终可用于“GreatRequirements”服务。如何防止任务在某个容器实例上启动

有没有什么办法可以阻止所有其他服务/任务,而不是在该机器上安排的“GreatRequirements”,除此之外,对所有其他服务/任务都做出约束限制?实质上,我想阻止ECS表单将其他服务/任务放置在“LargeMachine”上,这样我就不会因为一堆小服务/任务阻止我的“GreatRequirements”服务启动任务而无法找到具有足够cpu /内存。

谢谢

回答

0

您可以使用任务的放置策略/约束。

例如有内置像属性:

  1. ecs.availability区(例如EU-西-1a)的
  2. ecs.instance型(例如t2.small)
  3. ecs.ami-ID(AMI-XXXXXX)
  4. ecs.os型(如Linux)的

在您的任务定义(任务布置部件),你可以有这样的约束:attribute:ecs.instance-type == t2.medium这个任务将总是运行在一个t2.medium上

在你的情况下,我宁愿在我的ECS包含器实例上使用自定义标签`(集群 - >选择集群 - > ECS实例 - >选择EC2 - >点击操作 - >上查看/编辑单击属性和添加自定义属性,如姓名= SomeName,值= GreatRequirements.``

而在你的任务定义为约束,你可以有: attribute:SomeName == GreatRequirements和,这将始终与自定义属性 ``的属性,EC2上运行:SomeName = GreatRequirements`和任务将永远不会对EC2实例与运行自定义属性

欲了解更多关于这些属性的操作,请查看Operation on attributes

希望得到这个帮助。

+0

但是,这不会阻止其它任务被定于“LargeMachine”运行,而我仍然可以结束了在这样一个场景,该机器将不会有足够的CPU /内存? –

+0

从防止其他任务的解决方案: 你可以有一个约束e.g'属性的所有其他人的任务:ecs.instance型== T2。这会阻止它们在大型机器上运行,或者您可以将您的群集分为2个群集(一个用于普通任务,另一个用于GreatRequirements)。在新的集群中,您将拥有大型机器并安排您的任务(GreatRequirements)在该机器上运行 – Gigapalmer

+0

在这种情况下,我将不得不为所有其他服务/任务设置约束,这是我想省略的。除了将所有实例的实例类型更改为可以使用“GreatRequirements”处理该服务的类型外,我不认为实际上有一个好的解决方案,并以某种方式检测服务由于不足而无法调度任务CPU /内存,并基于此将其他实例扩展到群集中。感谢Gigapalmer提供的帮助:-) –

0

我认为除了将所有实例的实例类型更改为可以使用“GreatRequirements”处理服务的类型外,我不认为真的有一个很好的解决方案 - 并以某种方式检测服务何时无法计划任务,因为CPU /内存不足,并基于此将其他实例扩展到群集中。

相关问题