В настоящее время мы занимаемся проектированием архитектуры нашей новой облачной установки Apache Mesos. Цель состоит в том, чтобы объединить наши системы, переместив различные стеки на одну архитектуру. Основные рабочие нагрузки — это аналитика больших данных с использованием Apache Spark и наша корпоративная инфраструктура, включая веб-серверы, почтовые серверы и т. д.
Идея заключается в запуске наших веб-сервисов в контейнерах Docker, работающих поверх одного из доступных планировщиков для Mesos (Marathon/Chronos, Aurora или Singularity). Таким образом, это будет первая группа фреймворков Mesos. Рядом с ней у нас будет фреймворк Apache Spark и несколько фреймворков баз данных для хранения данных. Это будет вторая группа фреймворков Mesos. Мы выберем конкретные варианты после того, как запустим их все параллельно для тестирования.
Однако у нас возникли трудности с выбором, на какой основе запускать сам Mesos. В идеале мы хотим запустить его как можно ближе к железу. Мы также хотим использовать решение оркестровки, чтобы убедиться, что демоны Mesos и фреймворка всегда работают/перезапускаются при сбое. Мы рассматриваем следующие варианты:
1) Запуск Mesos и фреймворков как docker-контейнеров в минимальной ОС. В этом отношении мы сейчас склоняемся к CoreOS и Fleet.
2) Запуск Mesos и фреймворков непосредственно на серверах Ubuntu/Debian. Для этого варианта мы склоняемся к Foreman и Puppet.
Что касается вопроса, мы стремимся найти решение, которое, в порядке важности:
- наименее сложен в настройке
- самый простой в обслуживании и обновлении
- имеет наименьшие накладные расходы
Мы раньше не работали с CoreOS, но это тот вариант, к которому мы, похоже, движемся. Одна большая (субъективная) проблема, с которой я сталкиваюсь, заключается в том, что мы запускаем Mesos на контейнерах Docker, а затем запускаем контейнеры Docker на Mesos. Мне это кажется «нечистым» и неправильным. Является ли это соображение бесполезным?
Похожая мысль касается избыточности между слоями. Чтобы объяснить, откуда я исходил, я бы предпочел, чтобы Mesos был настоящей ОС, которая просто работает прямо поверх железа. Кажется, что независимо от того, какую основу вы используете, вы в конечном итоге получаете одну и ту же предполагаемую функциональность на более чем одном слое архитектуры (т. е. CoreOS&Fleet&SystemD == Mesos&Marathon&Chronos). Это неизбежно?
Есть ли другие хорошие варианты запуска слоя под Mesos, которые мы не рассмотрели, учитывая наши критерии?
решение1
Настройка и запуск служб в Mesos может быть как сложной, так и простой операцией, и вам следует сначала определить схему служб, которые вы хотите запустить в Mesos, в зависимости от ваших потребностей и целей, чтобы получить желаемое решение.
Я управляю установкой из более чем 70 машин и различными службами под управлением HAProxy для динамической балансировки нагрузки с Mesos-DNS и Marathon, API gateway, Chronos, Jenkins, Docker, Collectd и Graphite,...
Теперь отвечу на ваши прямые вопросы:
- Mesos проще всего настроить с помощью вашего«любимый» дистрибутив Linuxкоторые вам наиболее знакомы.
- Проще всего поддерживать тот дистрибутив, с которым вы лучше всего знакомы.
- Что касается накладных расходов, Mesos — это программная система, которая использует базовые библиотеки ОС и другие программные функции помимо своих собственных, и рассматривать Mesos как ОС (работающую как с аппаратным, так и с программным обеспечением...) — это совершенно неверная картина.
Поэтому мой лучший ответ для вас — используйте ваш любимый дистрибутив Linux и установите Mesos, или, если вы хотите узнать что-то новое и, возможно, быстро и без усилий, используйте(с открытым исходным кодом) DCOSиCoreOS.