Взаимосвязь между Vagrant, Docker, Chef и OpenStack (или аналогичными продуктами)?

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

В любом случае, у меня есть некоторые проблемы, чтобы внести некоторые вещи в отношения. Может быть, их и нет, поэтому я хотел попросить помощи, чтобы внести ясность.

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

  • Vagrant: Насколько я понимаю, это автоматизация создания и управления виртуальными машинами: их настройка, запуск и остановка. Это можно сделать с помощью локальной виртуальной машины или удаленной, например, на облачной платформе.
  • Docker: "Облегченная виртуальная машина", основанная на нескольких концепциях ядра Linux, которая может использоваться для изолированного запуска процессов, например, в общей среде веб-хостинга.
  • Шеф-повар: Инструмент для настройки и настройки операционной системы, например, внутри виртуальной машины.
  • OpenStack: Инструмент, который позволяет вам создавать собственное частное облако, следовательно, сравнимое с чем-то вроде AWS.

Вопрос № 1: Верны ли мои объяснения, или я ошибаюсь с некоторыми (или всеми) из этих видов потребления?

Вопрос № 2: Как я мог бы смешать все эти инструменты? Будет ли в этом какой-то смысл?

В моем воображении и с моей точки зрения, вы могли бы пойти и

  • используйте OpenStack для создания собственного облака,
  • используйте Vagrant для управления виртуальными машинами, работающими в облаке,
  • используйте Chef для настройки этих виртуальных машин
  • и, наконец, используйте Docker для запуска процессов внутри виртуальных машин.

Правильно ли это? И если да, можете ли вы дать мне совет, как начать использовать все это (это довольно много одновременно, и я пока не знаю, с чего начать)?

Давайте воспользуемся их соответствующими веб-страницами, чтобы узнать, о чем все эти проекты. Однако я изменю порядок, в котором вы перечислили:

  • Шеф-повар: Chef - это платформа автоматизации, которая преобразует инфраструктуру в код.

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

  • Бродяга: Создавайте и настраивайте легкие, воспроизводимые и переносимые среды разработки.

    Это обеспечивает воспроизводимый способ генерировать полностью виртуализированные машины используя технологию Oracle VirtualBox или VMware в качестве поставщики услуг. Vagrant может координировать свои действия с программным обеспечением для управления конфигурацией, чтобы продолжить процесс установки после завершения установки операционной системы. Это известно как обеспечение.

  • Докер: Проект с открытым исходным кодом для упаковки, отправки и запуска любого приложения в виде легкого контейнера

    Функциональность этого программного обеспечения несколько совпадает с функциональностью Vagrant, в которой оно предоставляет средства для определения установок операционных систем, но сильно отличается технологией, используемой для этой цели. Docker использует Контейнеры Linux, которые сами по себе не являются виртуальными машинами, а изолированными процессами, выполняемыми в изолированных файловых системах. Docker также может использовать система управления конфигурацией для обеспечения контейнеров.

  • OpenStack: Программное обеспечение с открытым исходным кодом для создания частных и общедоступных облаков.

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

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

    Ключевой функциональностью OpenStack является поддержка многих технологий виртуализации, от полностью виртуализированных (VirtualBox, VMware) до паравиртуализированных (KVM/Qemu), а также контейнеров (LXC) и даже Пользовательский режим Linux (UML).

Я попытался представить эти продукты как компоненты конкретной архитектуры. С моей точки зрения, имеет смысл сначала определить ваши потребности в отношении необходимой вам среды (Chef, Puppet, Ansible, ...), затем иметь возможность развернуть ее контролируемым образом (Vagrant, Docker, ...) и, наконец, масштабировать ее до глобального размера, если необходимо быть.

Какой объем всей этой функциональности вам нужен, должно быть определено в рамках вашего проекта.

Также обратите внимание, что я чрезмерно упростил в основном все технические объяснения. Пожалуйста, используйте ссылки, на которые даны ссылки, для получения подробной информации.

Я думаю, что опыт работы с разработчиками сделает становление "devops" на самом деле более сложным, вашему вопросу почти 3 года, поэтому было бы интересно услышать, как вы находите путь, я дам ответ с точки зрения системного администратора о приложениях, которые вы упомянули выше, и надеюсь, это прольет некоторый свет или даст нетехническую перспективу, которая каким-то образом объяснит, почему человек (администратор или разработчик) начнет рассматривать именно то, что вы спросили, например, с точки зрения devops, какова связь между x, y, z, являются ли эти инструменты больше, чем сумма их частей?

Я на самом деле думаю, что системные администраторы здесь одерживают верх, большинство приложений, которые вы упоминаете в своем вопросе, решают "проблемы" администратора и при этом обеспечивают более абстрактную среду центра обработки данных, а это, в свою очередь, более программируемо для разработчиков и новой стратегии "devops" (читайте strategy / team, devops не является человеком). Итак, какова связь с приложениями, которые вы упоминаете? как это обеспечивает целостный подход к ИТ-сервису?

OpenStack: инструмент, который позволяет вам создавать собственное частное облако, следовательно, сравнимое с чем-то вроде AWS

Так оно и есть, но что оно делает? - наиболее удачно названной операционной системой была D.O.S - она управляла вашим диском, абстрагируя BIOS, OpenStack управляет вашим центром обработки данных и абстрагирует вашу инфраструктуру (IaaS - это жаргонное название операционной системы центра обработки данных). Теперь у вашего центра обработки данных есть API, синтаксис команд и графический интерфейс, OpenStack может управлять гипервизорами, коммутаторами, маршрутизаторами, брандмауэрами, сетями хранения данных, балансировщиками нагрузки, хостами docker и т.д.. Openstack использует "плагин" вашего производителя оборудования или конкретная функция может существовать исключительно в программном обеспечении как определяемая программным обеспечением что-то или виртуализация сетевых функций. Кроме того, OpenStack и все другие облака могут организовывать свою собственную инфраструктуру, читая сценарии, которые вы запускаете в механизм оркестровки, или запускаемые на основе правил (масштабирование вверх, уменьшение масштаба и т.д.). Таким образом, openstack - это гигантский уровень абстракции, например, мне все равно, какой у меня коммутатор, дайте мне сеть с этот команда или создайте мне сложную балансировку нагрузки, HA, общедоступную, автоматическое масштабирование, зарегистрированное доменное имя, подключенное хранилище штуковина - с помощью этого скрипта я нашел в Интернете.

Docker: "Облегченная виртуальная машина", основанная на нескольких концепциях ядра Linux, которая может использоваться для изолированного запуска процессов, например, в общей среде веб-хостинга.

Docker - это еще один уровень абстракции, и, подобно тому, как облако является прорывной технологией, оно меняет отрасль, потому что решает многие операционные "проблемы", такие как зависимости программного обеспечения, обновления, изоляция данных и абсолютная переносимость. Java стала популярной из-за переносимости исходного кода, о которой разработчикам не нужно было думать, работающая JVM означала, что их код должен выполняться на кофемашине, пока она поддерживает java. Docker решает аналогичную проблему: для запуска моего приложения вам нужен хост docker, нет, вам нужна эта версия python, это ядро, этот дистрибутив Linux и так далее, конечно, у приложения все еще есть эти зависимости, но базовому хосту все равно, а администратору все равно, что вы делаете внутри изолированного контейнера (до определенного момента). Docker меняет парадигму как разработки, так и эксплуатации, рассматривая всю операционную систему и ее сервисы как двоичный файл. мы можем получить их из хранилища, версируйте их, модифицируйте, запускайте с параметрами и т.д.

Шеф-повар: Инструмент для настройки и настройки операционной системы, например, внутри виртуальной машины.

Да, и не такие разрушительные, как первые два, Chef, puppet, ansible, salt, system center operations manager и огромное множество других приложений в этом пространстве предоставляют разработчикам и администраторам возможность моделировать развертывания, обновления и другие действия (изменения конфигурации), похоже, нет никаких орган по стандартизации рассматривает эти усилия как есть для облака. Но мы не имеем дело с чем-то столь определенным, как инфраструктура, поэтому изучать их более болезненно, и не так много можно передать от одного к другому.

Vagrant: Насколько я понимаю, это автоматизация создания и управления виртуальными машинами: их настройка, запуск и остановка. Это можно сделать с помощью локальной виртуальной машины или удаленной, например, на облачной платформе.

Это лишнее в списке приложений, которые вы упомянули, Vagrant - это инструмент для разработчиков и игрушка для администраторов, вы можете быстро создать среду разработки с помощью vagrant, например, я хочу разработать приложение для Android, возьмите IDE от vagrant, я думаю, что его догонит Docker скоро.

можете ли вы дать мне совет, как начать использовать все это (это довольно много одновременно, и я пока не знаю, с чего начать)?

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

Со своей стороны, я использую только комбинацию Vagrant и Docker.

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

Сценарий подготовки, который я использую, указывает на безопасное местоположение, которое содержит сертификат CA и ключи, используемые для подписи CSR, а также docker swarm join жетоны. Кроме того, я устанавливаю docker-engine и настраиваю его для присоединения к рою (инициализирую, если такового нет).

Как только это будет улажено, я просто сделаю docker stack deploy с моего локального компьютера или из коробки сборки, чтобы развернуть стек со всем, что мне нужно.

В моем случае я просто бросил шеф-повар в пользу простого использования простых сценариев после установки, которые делают yum или apt-get включен в качестве моих сценариев подготовки.

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

Приятная часть централизации с помощью Vagrant заключается в том, что вы можете реплицировать среду на другой системе или на одном компьютере для разработки, просто нужно добавить или изменить provider раздел. Имейте в виду, что я не занимался настройкой OpenStack на одном компьютере для управления VirtualBox.

Я только что закончил проект развертывания OpenStack, в котором используется сервер Chef внутри экземпляра Vagrant: https://github.com/bluechiptek/bluechipstack/blob/master/README.md

Основная проблема, связанная с этим способом, заключается в том, что экземпляру Vagrant присваивается один и тот же IP-адрес каждый раз, когда вы хотите управлять узлами. Если вы выполняете статическую адресацию, это работает хорошо. Делать это через VPN далеко не идеально.

Недостаточно квалифицирован, чтобы ответить на этот вопрос полностью, но ваша оценка Vagrant и Chef, похоже, верна. В моем окне разработки я запускаю виртуальные машины с помощью Vagrant, а затем предоставляю им Chef, и это работает очень хорошо.