Как предотвратить запуск задач на определенном экземпляре контейнера

У меня есть кластер ECS, состоящий из экземпляров контейнера типа A, скажем, его t2.small. Кластер состоит из нескольких машин, на которых работают несколько служб. Теперь я собираюсь получить новую услугу / задачу (назовем ее "GreatRequirements"), которая потребует намного больше ресурсов процессора / памяти, чем любая другая служба / задача. Я хотел бы иметь возможность загружать 1 большой компьютер (давайте назовем его "LargeMachine") для кластера, на который никогда не будут ставиться другие задачи, так что этот компьютер в кластере всегда доступен для моей службы "GreatRequirements".

Есть ли способ, которым я могу предотвратить планирование всех других сервисов / задач, кроме "GreatRequirements" на этом компьютере, кроме как делать ограничения на ВСЕ для других сервисов / задач, которые это делают? По сути, я хочу, чтобы форма ECS не помещала другие сервисы / задачи на "LargeMachine", чтобы я не оказался в ситуации, когда набор небольших сервисов / задач не позволяет моей службе "GreatRequirements" запустить задачу, потому что она не может найти машина с достаточным количеством процессора / памяти.

Спасибо

2 ответа

Вы можете использовать стратегию размещения / ограничения задач.

Например, есть встроенные атрибуты, такие как:

  1. ecs.availability-zone (например, eu-west-1a)
  2. Тип ecs.instance (например, t2.small)
  3. ecs.ami-id (ami-xxxxxx)
  4. ecs.os-type (например, linux)

В вашем определении задачи (раздел "Размещение задачи") вы можете указать следующее: attribute:ecs.instance-type == t2.medium и эта задача всегда будет выполняться на t2.medium

В вашем случае я бы предпочел использовать пользовательский тег на моих экземплярах контейнера ECS `(Кластер -> выбрать кластер -> экземпляры ECS -> выбрать EC2 -> Нажмите на действие -> нажмите на Просмотр / Редактирование атрибутов и Добавьте пользовательский атрибут, такой как Name=SomeName, Value=GreatRequirements`.

И в определении вашей задачи в качестве ограничения вы можете иметь:attribute:SomeName == GreatRequirements и что он всегда будет работать на этом ec2 с этим пользовательским атрибутом ``attribute:SomeName!= GreatRequirements`, и эта задача никогда не будет выполняться на этом экземпляре ec2 с этим пользовательским атрибутом

И для большей работы над этими атрибутами, пожалуйста, проверьте это Операция над атрибутами

Надеюсь, это поможет.

Я не думаю, что действительно есть хорошее решение для этого, кроме изменения типа экземпляра для всех экземпляров, на тип, который может обрабатывать сервис с помощью "GreatRequirements" - и каким-то образом определять, когда сервис не может запланировать задачу из-за недостаточного процессор / память, и масштабировать дополнительные экземпляры в кластере на основе этого.

Другие вопросы по тегам