【问题标题】:How to prevent tasks from starting on a certain container instance如何防止任务在某个容器实例上启动
【发布时间】:2017-02-22 21:27:38
【问题描述】:

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

有什么方法可以阻止除“GreatRequirements”之外的所有其他服务/任务在该机器上安排,除了对所有其他服务/任务进行限制之外?本质上,我想防止 ECS 表单将其他服务/任务放在“LargeMachine”上,这样我就不会遇到一堆小服务/任务阻止我的“GreatRequirements”服务启动任务的情况,因为它找不到cpu/内存充足的机器。

谢谢

【问题讨论】:

    标签: amazon-web-services amazon-ecs


    【解决方案1】:

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

    例如有内置属性,如:

    1. ecs.availability-zone(例如 eu-west-1a)
    2. ecs.instance-type(例如 t2.small)
    3. ecs.ami-id (ami-xxxxxx)
    4. ecs.os 类型(例如 linux)

    在您的任务定义(任务放置部分)中,您可以有如下约束:attribute:ecs.instance-type == t2.medium,并且此任务将始终在 t2.medium 上运行

    在您的情况下,我宁愿在我的 ECS 容器实例上使用自定义标签`(集群 --> 选择集群 --> ECS 实例 --> 选择 EC2 --> 单击操作 --> 单击查看/编辑属性并添加自定义属性,例如 Name=SomeName 、 Value=GreatRequirements。``

    并且在您的任务定义中作为约束,您可以拥有: attribute:SomeName == GreatRequirements 并且它将始终在具有该自定义属性的 ec2 上运行 ``attribute:SomeName != GreatRequirements` 并且该任务将永远不会在具有该自定义属性的 ec2 实例上运行

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

    希望对您有所帮助。

    【讨论】:

    • 但这不会阻止其他任务被安排在“LargeMachine”上运行,而且我仍然会遇到该机器没有足够的 CPU/内存可用的情况?
    • 阻止其他任务的解决方案:您可以让所有其他任务受到约束,例如 attribute:ecs.instance-type == t2.small 这将阻止它们在大型机器上运行,或者您可以将集群拆分为 2 个集群(一个用于普通任务,另一个用于 GreatRequirements)。在新集群中,您将拥有大型机器并安排您的任务(GreatRequirements)在该机器上运行
    • 在这种情况下,我将不得不为所有其他服务/任务设置约束,这是我想省略的。我认为除了这个之外没有什么好的解决方案将所有实例的实例类型更改为可以使用“GreatRequirements”处理服务的类型 - 并以某种方式检测服务何时因 CPU/内存不足而无法调度任务,并基于此将其他实例扩展到集群中。无论如何,感谢您的帮助 Gigapalmer :-)
    • 顺便说一下,当内存预留>= 80 % 时,我们有一个自动缩放功能,它会由 cloudwatch 警报触发。当内存> = 80 % 时,将自动添加一个新的 ECS 容器实例自动缩放组 并且同样的事情可以用 CPU 预留来完成
    • 谢谢,我知道这样做是有可能的,但我想对由于 cpu 或内存不足而无法启动任务的确切事件做出反应
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      相关资源
      最近更新 更多