Как предотвратить запуск задач на определенном экземпляре контейнера
У меня есть кластер ECS, состоящий из экземпляров контейнера типа A, скажем, его t2.small. Кластер состоит из нескольких машин, на которых работают несколько служб. Теперь я собираюсь получить новую услугу / задачу (назовем ее "GreatRequirements"), которая потребует намного больше ресурсов процессора / памяти, чем любая другая служба / задача. Я хотел бы иметь возможность загружать 1 большой компьютер (давайте назовем его "LargeMachine") для кластера, на который никогда не будут ставиться другие задачи, так что этот компьютер в кластере всегда доступен для моей службы "GreatRequirements".
Есть ли способ, которым я могу предотвратить планирование всех других сервисов / задач, кроме "GreatRequirements" на этом компьютере, кроме как делать ограничения на ВСЕ для других сервисов / задач, которые это делают? По сути, я хочу, чтобы форма ECS не помещала другие сервисы / задачи на "LargeMachine", чтобы я не оказался в ситуации, когда набор небольших сервисов / задач не позволяет моей службе "GreatRequirements" запустить задачу, потому что она не может найти машина с достаточным количеством процессора / памяти.
Спасибо
2 ответа
Вы можете использовать стратегию размещения / ограничения задач.
Например, есть встроенные атрибуты, такие как:
- ecs.availability-zone (например, eu-west-1a)
- Тип ecs.instance (например, t2.small)
- ecs.ami-id (ami-xxxxxx)
- 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" - и каким-то образом определять, когда сервис не может запланировать задачу из-за недостаточного процессор / память, и масштабировать дополнительные экземпляры в кластере на основе этого.