Я в процессе миграции некоторых рабочих нагрузок в контейнерную службу Amazon ECS, и я обнаружил блокиратор, который мешает мне двигаться вперед.Ограничить службы/приложения для работы в конкретном экземпляре ECS Amazon
В идеале, контейнеризованные приложения, работающие на ECS, должны быть неактивными, чтобы они могли запускаться в любом экземпляре кластера и масштабироваться. Но реальность такова, что у меня есть некоторые приложения, зависящие от томов данных EBS. Насколько я знаю, эти тома должны быть привязаны вручную к конкретному экземпляру кластера, и приложения ECS должны быть помещены в этот экземпляр, чтобы иметь возможность доступа к его данным, поэтому мне нужно иметь некоторый способ контролировать, где они заканчиваются.
В качестве примера предположим, что у нас есть кластер из трех экземпляров EC2, которым управляет Amazon ECS.
- instance1
- instance2
- instance3
Тогда мы имеем 2 контейнерные приложения:
- app1, который является лицом без
- app2, которая зависит от объема EBS
app1 может работать в любом случае кластера, без проблем.
Для приложения2 предположим, что мы присоединяем и монтируем том EBS в экземпляре2.
Теперь вопрос в следующем: Могу ли я установить ограничение при определении или запуске приложения 2 только в экземпляре2, чтобы он мог иметь доступ к тому EBS?
Большое спасибо!
Редакция:
Я читал немного дальше, и я нашел способ сделать это в документации Amazon. Существует примечание в документе «Using Data Volumes in Tasks», который говорит:
Важно
Amazon ECS не синхронизировать объемов данных через контейнер экземпляров. Задачи, которые используют постоянные тома данных, могут быть размещены на любом экземпляре контейнера в вашем кластере, который имеет доступную емкость. Если ваши задачи требуют постоянных томов данных после остановки и перезапуска , вы всегда должны указывать один и тот же экземпляр контейнера при времени запуска задачи с помощью команды запуска-задачи AWS CLI.
Так, глядя на start-task команды на CLI я узнал, что это именно то, что я искал:
запуск задачи
начинает новую задачу из заданное определение задачи в указанном экземпляре контейнера . Чтобы использовать планировщик Amazon ECS по умолчанию для размещения своей задачи, вместо этого используйте run-task.
Он имеет два обязательных параметр, которые являются определением задачи вы хотите запустить и экземпляр контейнера идентификаторов (до 10), на котором задача должна работать.
Так вызова команды будет выглядеть примерно так:
aws ecs start-task --task-definition “hello-world:1” --container-instances “1c66549d-b41c-4439-dd43-c2e1c9a2cc2a”
Я попробовал это, и она работала отлично.
В настоящее время это выглядит как единственный способ сделать это, поскольку веб-интерфейс AWS не предоставляет поле для указания экземпляров контейнера при запуске задачи.
Надеюсь, это может быть полезно кому-то.
Из того, что я читал: вы не можете этого сделать. Кластер имеет набор привязанных к нему экземпляров, чтобы контейнеры были привязаны к ним на основе ресурсов через планировщик. Я думаю, что единственный способ сделать это - несколько кластеров. –
Привет @MarcYoung, я отредактировал вопрос с решением, которое я нашел. Пожалуйста, взгляните на это, поскольку на самом деле есть способ сделать это без необходимости создания нескольких кластеров. – adrianmo