распределять файлы между несколькими docker контейнерами - PullRequest
0 голосов
/ 02 апреля 2020

Мы развертываем несколько контейнеров (1000) с использованием ECS, каждый контейнер использует один и тот же код для запуска приложения, но использует другой файл конфигурации (у нас есть готовые файлы). Вы можете подумать о сценарии следующим образом: там 1000 файлов и 1000 контейнеров, каждый контейнер получит свой уникальный файл и выполнит некоторую работу.

Один простой подход - создать индивидуальное docker изображение для каждого экземпляра контейнера, с той лишь разницей, что Конфигурационный файл (Определенно не очень хороший подход.)

Как мы можем сделать это, используя одно изображение. Поддерживает ли ECS одно изображение, но вы можете передавать в другие файлы / параметры?

Другой подход будет иметь некоторые логики c, когда при запуске контейнера он получит файл из службы (например, S3). Но требование заключается в том, что каждый контейнер должен получить уникальный файл (1000 файлов отображаются на 1000 контейнеров). Какой лучший способ сделать это?

1 Ответ

1 голос
/ 02 апреля 2020

Конфигурирование 1000 контейнеров, в частности, с 1000 различных конфигураций, даже если это один и тот же образ контейнера, не является желательным сценарием.

Либо вам нужно будет, чтобы инструмент оркестровки знал о том, какие контейнеры живы какие конфиги, и будьте в курсе всех доступных конфигов. Это не практично, но выполнимо.

Или сами контейнеры должны будут знать обо всех конфигах и общаться между собой о том, у кого какой конфиг. Это практично, но трудно сделать правильно.

Третий вариант - создать специализированный контейнер, в котором размещаются конфиги, так же, как вы можете создать реестр для своих контейнеров. Если конфиги являются файлами, они могут просто находиться в подключенном томе, который отслеживается приложением «config registry». Для этого приложения было бы намного проще контролировать, какие конфиги были переданы в какие контейнеры.

Ваше приложение должно было бы зарегистрироваться в этом "реестре конфигурации" при запуске и получить свою конфигурацию. В случае интеграции с кластерным API docker он мог бы контролировать раскручивание новых контейнеров, когда в его списке есть конфиги, которые еще не были переданы контейнеру приложения. Таким образом, вы можете удалить новую конфигурацию в сопоставленном томе контейнера «config registry», и это приведет к тому, что новый контейнер будет запущен вместе с конфигурацией.

Вам также потребуется проверка работоспособности из реестр для каждого контейнера периодически. Если контейнер исчезает, аренда конфигурации «заканчивается» - и он должен попытаться создать новый контейнер для конфигурации.

Это потребует некоторой работы, я уверен - но результат будет более масштабируемым. Если вы используете Java, загляните в Spring Cloud Config - они, возможно, уже решили этот вариант использования, не уверен.

Ну, это всего лишь мысль. Звучит полезно?

...