如何防止任务在某个容器实例上启动

时间:2017-02-22 08:16:46

标签: amazon-web-services amazon-ecs

我有一个由实例类型A的容器实例组成的ECS集群,比如说它的t2.small。该集群由几台运行多个服务的计算机组成。现在,我即将有一个新的服务/任务(让我们称之为#34; GreatRequirements"),这将需要比任何其他服务/任务更多的CPU /内存。我希望能够为群集启动一台大型机器(让我们称之为#34; LargeMachine),其他任务永远不会被放置,这样群集中的这台机器始终可用于我的&# 34; GreatRequirements"服务。

有什么方法可以阻止所有其他服务/任务而不是" GreatRequirements"从那台机器上安排,其他那些对所有其他服务/任务进行限制?基本上,我想阻止ECS表格在" LargeMachine"上放置其他服务/任务,这样我就不会在一堆小服务/任务阻止我的" GreatRequirements&#34的情况下结束;启动任务的服务,因为它找不到具有足够CPU /内存的机器。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用任务的展示位置策略/约束。

例如,有一些内置属性,如:

  1. ecs.availability-zone(例如eu-west-1a)
  2. ecs.instance-type(例如t2.small)
  3. ecs.ami-id(ami-xxxxxx)
  4. ecs.os-type(例如linux)
  5. 在您的任务定义(任务放置部分)中,您可以使用约束:attribute:ecs.instance-type == t2.medium,此任务将始终在t2.medium上运行

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

    在作为约束的任务定义中,您可以: attribute:SomeName == GreatRequirements以及将始终使用该自定义属性在该ec2上运行的using System.Management; public partial class Win_Win32_VideoController : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController"); foreach (ManagementObject obj in objvide.Get()) { Response.Write("Name - " + obj["Name"] + "</br>"); Response.Write("DeviceID - " + obj["DeviceID"] + "</br>"); Response.Write("AdapterRAM - " + obj["AdapterRAM"] + "</br>"); Response.Write("AdapterDACType - " + obj["AdapterDACType"] + "</br>"); Response.Write("Monochrome - " + obj["Monochrome"] + "</br>"); Response.Write("InstalledDisplayDrivers - " + obj["InstalledDisplayDrivers"] + "</br>"); Response.Write("DriverVersion - " + obj["DriverVersion"] + "</br>"); Response.Write("VideoProcessor - " + obj["VideoProcessor"] + "</br>"); Response.Write("VideoArchitecture - " + obj["VideoArchitecture"] + "</br>"); Response.Write("VideoMemoryType - " + obj["VideoMemoryType"] + "</br>"); } } } ``attribute:SomeName!= GreatRequirements`,该任务将永远不会在具有该自定义属性的ec2实例上运行

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

    希望得到这个帮助。

答案 1 :(得分:0)

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