Есть ли причина использовать Puppet вместе с Docker?

16

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

Я выступил с Docker, который мне очень понравился. Но некоторое время назад я пробовал Puppet, поэтому у меня возникает вопрос: «Есть ли причина использовать Puppet с Docker?». Кажется, Докер делает все то, что делал бы Пуппет, но более простым способом.

PS Некоторое время назад на Hacker News появился Consul, который является хорошей конфигурацией и обнаружением службы, так что даже конфигурация может быть решена (и я тоже думаю о реализации этого).

Hauleth
источник

Ответы:

18

Puppet и Docker могут делать много одного и того же, но подходят к ним по-разному.

Puppet управляет файлами + пакетами + сервисами. (Называется trifecta). Docker инкапсулирует двоичные файлы и файлы конфигурации внутри контейнера.

На момент написания этой статьи докер по-прежнему нестабилен и не должен использоваться в производстве. Многие из API, вероятно, будут изменены, пока не будет выпущена версия 1.0.

Даже когда docker действительно станет стабильным, преобразование каждого процесса и конфигурационного файла в контейнеры Docker будет большой задачей.

Puppet, с другой стороны, является стабильным продуктом и поставляется с целой экосистемой инструментов (heira, mcollective, facter, бритва). Эти инструменты могут быть реализованы быстро и не беспокоясь о поломке.

Я очень рекомендую следующие ресурсы.

Видео о том, как управлять стеками приложений с помощью кукол
https://www.youtube.com/watch?v=KSo_mcJxFIA

Подкаст о том, как докер и марионетка могут работать вместе
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Статья в марионеточном блоге о том, как интегрироваться с докером
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

Еще одна статья в блоге о сосуществовании кукол и докеров
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

Кукольный модуль для взаимодействия с докером
http://docs.docker.io/use/puppet/

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

Обновить

В настоящее время моя компания использует как марионетку, так и докер. Вот отличная презентация на puppet conf 2014, почему вы должны использовать puppet vs docker. Подарено Джеймсом Тернбуллом, бывшим работодателем марионеток и автором докерской книги.

https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter

Также хороший короткий видеоурок по докеру от sysadmincasts.com

https://sysadmincasts.com/episodes/31-introduction-to-docker

Docker Pros:

  • Может быстро раскрутить экземпляр
  • Легче учиться, чем кукольный
  • Легко сделать 0 простоя

Докер Минусы:

  • Контейнеры имеют ограничение 10 ГБ при использовании бэкэнда devicemapper
  • Небольшие изменения конфигурации занимают много времени, чтобы перестроить контейнер
  • Затраты денег на использование реестра Docker, такого как hub.docker.com, quay.io (Самостоятельный реестр Docker очень глючит и не имеет графического интерфейса пользователя)
  • Нет правильной системы инициализации. Некоторые приложения не играют хорошо.
  • Нет точного контроля над сетью
  • Приложения, которые требуют субоболочек (глядя на вас RVM + ruby), очень сложно правильно работать
  • Не может управлять хостами Windows, SLES или другими менее популярными операционными системами.
  • В настоящее время оркестровка докеров очень молода.
  • В настоящее время невозможно установить ваш /etc/resolv.conf во время сборки
  • Различные ошибки, которые мы должны смонтировать / etc / localtime и / dev / urandom, чтобы отобразить в каталоги localtime и urandom хостов.
  • Производительность не такая быстрая (несмотря на все утверждения, что докер должен быть на 99% быстрее голого металла, иногда он на 30% медленнее, чем другие машины).
  • Небольшие контейнеры по-прежнему имеют сотни мегабайт служебных данных. Наши контейнеры все несколько гигабайт.

Кукольные Плюсы:

  • Легко масштабируется
  • Работает с существующими серверами (windows, linux, sles)
  • Быстро вносить небольшие изменения
  • Сильное сообщество других кукольных пользователей и модулей
  • Стандартизированный API для установки пакетов на всех платформах

Кукольные Минусы:

  • Большие инфраструктуры становятся очень сложными
  • Условные зависимости модуля создают код spagetti
  • Более тяжелый вес

В настоящее время мы используем puppet для предоставления наших док-контейнеров. Док-контейнеры используются для сборок jenkins и уничтожаются после каждой сборки. Это работает хорошо, и дает нам согласованную среду. Это означает, что нам нужно написать код только один раз, а затем перестроить машины ubuntu, sles и centos. Восстановление контейнеров занимает от 15 до 30 минут и все еще выполняется вручную. Докер отлично подходит для быстрого тестирования виртуальных машин,

Короче говоря, Puppet отлично справляется с управлением существующей инфраструктурой. Докер хорош, если у вас есть зеленое поле, которое на 100% Linux, с технологическим стеком, который может быть заключен в небольшие эфемерные экземпляры. Хотя некоторые функции перекрываются, они не являются взаимоисключающими.

spuder
источник
5
Я нашел этот ответ субъективным и умозрительным. Я не верю, что это действительно отвечает, почему кто-то может продолжать использовать Puppet вместе с / в сочетании с Docker, когда Docker, на высоком уровне, кажется более простым инструментом для той же цели.
8bitjunkie
1
@ 7SpecialGems Обновлено с большим количеством фактов.
spuder
1
было бы замечательно увидеть обзор этого ответа в мире 2015 года и узнать, как все изменилось
Оливер Байес-Шелтон
Вопрос / ответ все еще относительно в 2019 году? Что могло измениться?
Абу Тахер,
2

Docker помогает вам подготовить и изначально настроить контейнеры, но он запускает одноразовые команды при инициализации контейнера.

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

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

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

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

xtrade
источник