Подтвердить что ты не робот

Связанные докерные контейнеры с мезосом/марафоном

До сих пор у меня есть большой успех, используя Mesos, Marathon и Docker для управления флотом серверов и контейнеров, которые я размещаю на них. Тем не менее, я хотел бы пойти немного дальше и начать делать такие вещи, как автоматическая привязка контейнера haproxy к каждой главной службе докеров, которая запускается, или предоставлять другие связанные с демонами и контейнеризованные службы, которые связаны и доступны только для одного родительского контейнера.

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

У меня возникла идея сначала запустить службу-помощник, на любом хосте, который она могла найти, а затем добавить ограничение к реальной службе, что имя хоста hostname = helper servicename, но похоже, что это вызовет проблемы с предложениями ресурсов и условия гонки для этих ресурсов.

Я также думал предоставить функциональность "встраивания" или "глубокой ссылки" для докеров или сценарии исполнителей, запускающие контейнеры докеров.

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

Спасибо!

4b9b3361

Ответ 1

ты блуждаешь по неизведанной территории! ☺

Здесь есть несколько подходов; и ни одна из них не идеальна, но ситуация улучшится в будущих версиях Docker благодаря крючкам оркестровки.

Один из способов - использовать хорошее старое обнаружение и регистрацию службы. I.E., когда начинается сервис, он будет определять свой общедоступный адрес и зарегистрировать себя, например. Zookeeper, Etcd или даже Redis. Поскольку для службы не является обычным для определения своего общедоступного адреса (если вы не примете некоторые соглашения, например, всегда сопоставляя порт X: X, а не позволяя Docker осваивать случайные порты), вы можете захотеть сделать регистрацию извне. Это означает, что ваш уровень оркестровки (в этом случае Mesos) запустит контейнер, затем определит хост и порт и поместит его в вашу систему обнаружения сервисов. Я не очень знаком с марафоном, но вы должны иметь возможность зарегистрировать для этого крючок. Затем другие контейнеры будут просто искать адрес конечной точки в реестре обнаружения служб, простой и простой.

Вы также можете посмотреть Skydock, который автоматически регистрирует имена DNS для ваших контейнеров с помощью Skydns. Тем не менее, он в настоящее время является одним хостом, поэтому, если вам нравится эта идея, вам придется каким-то образом расширить его, чтобы поддерживать несколько хостов и, возможно, записи SRV.

Другой подход - использовать "хорошо известные точки входа". Это на самом деле упрощенный пример обнаружения службы. Это означает, что вы убедитесь, что ваши службы будут всегда выполняться на предварительно установленных хостах и ​​портах, чтобы вы могли использовать эти адреса статически. Конечно, это плохо (потому что это сделает вашу жизнь тяжелее, когда вы захотите воспроизвести среду для целей тестирования/постановки), но если у вас нет никакой подсказки об обнаружении службы, ну, это может быть начало.

Вы также можете использовать Pipework для создания одной (или нескольких) виртуальной сети, охватывающей несколько хостов, и связывания ваших контейнеров вместе. Pipework позволит вам назначать IP-адреса вручную или автоматически через DHCP. Однако этот подход не рекомендуется, но он подходит, если вы также хотите подключить свои контейнеры к существующей сетевой архитектуре (например, VLAN...).

Независимо от того, какое решение вы решите использовать, я настоятельно рекомендую "притворяться", что вы используете ссылки. То есть вместо жесткого кодирования вашей конфигурации приложения для подключения к (случайному примеру) my-postgresql-db:5432 используйте переменные среды DB_PORT_5432_TCP_ADDR и DB_PORT_5432_TCP_PORT (как если бы это была ссылка) и установите эти переменные при запуске контейнера. Таким образом, если вы "сворачиваете" свои контейнеры в более простую среду без обнаружения сервисов и т.д., Вы можете легко отступать на ссылки без усилий.