Gibt es einen Grund, Puppet zusammen mit Docker zu verwenden?

18493
Hauleth

Ich habe Ops Teil von DevOps vor einiger Zeit ausprobiert und es war ziemlich lustig, aber ich habe keine Zeit und keinen Grund, es in irgendeinem Projekt auszuprobieren. Aber letzte Woche habe ich einen neuen Job angefangen, bei dem mich der Chef fragte, ob ich den Server so konfigurieren kann, dass er so etwas wie eine Inszenierungsumgebung für Unternehmensprojekte erstellt. Daneben habe ich überlegt, über die Migration eines Projekts mehr DevOps als nur Dev zu denken.

Ich bin mit Docker rausgekommen, was super und super einfach für mich ist. Aber vor einiger Zeit habe ich Puppet ausprobiert, daher kam mir die Frage: "Gibt es einen Grund, Puppet mit Docker zu verwenden?". Docker scheint alles zu tun, was Puppet tun würde, aber auf einfachere Weise.

PS Vor einiger Zeit gab es in den Hacker News Consul, was eine nette Konfiguration und Serviceerkennung darstellt, sodass sogar die Konfiguration aufgelöst werden kann (und ich denke auch daran, dies zu implementieren).

15

2 Antworten auf die Frage

18
spuder

Marionette und Docker können viele der gleichen Dinge tun, sie nähern sich jedoch anders an.

Puppet verwaltet Dateien + Pakete + Dienste. (Nannte das Trifecta). Docker kapselt Binärdateien und Konfigurationsdateien in einem Container.

Zur Zeit dieses Schreibens ist Docker noch instabil und sollte in der Produktion nicht verwendet werden. Viele der APIs werden wahrscheinlich geändert, bis Version 1.0 veröffentlicht wird.

Selbst wenn Docker stabil wird, ist es ein großes Unterfangen, jeden Prozess und jede Konfigurationsdatei in Docker-Container umzuwandeln.

Puppet dagegen ist ein stabiles Produkt und verfügt über ein komplettes Ökosystem an Werkzeugen (Heira, Mcollective, Facter, Razor). Diese Tools können schnell implementiert werden, ohne dass Probleme auftreten.

Ich würde dringend die folgenden Ressourcen vorschlagen.

Ein Video zum Verwalten von Anwendungsstapeln mit der Marionette
https://www.youtube.com/watch?v=KSo_mcJxFIA

Ein Podcast über die Zusammenarbeit von Docker und Marionette
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Ein Marionetten-Blogartikel zur Integration mit Docker
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

Ein weiterer Blogartikel über Marionetten- und Hafenarbeiter, der gleichzeitig
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

Ein Marionettenmodul für die Interaktion mit Docker
http://docs.docker.io/use/puppet/

Eine geringfügige Korrektur der Terminologie von Devops. Devops ist mehr eine Softwareentwicklungsmethodik, bei der Entwickler und Betrieb zusammenarbeiten, als jedes andere Werkzeug.

Aktualisieren

Derzeit verwendet meine Firma sowohl Marionette als auch Docker. Auf der Puppet Conf 2014 finden Sie eine großartige Präsentation darüber, warum Sie Puppet vs Docker verwenden sollten. Gegeben von James Turnbull, einem ehemaligen Arbeitgeber von Puppetlabs und dem Autor des Docker-Buches.

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

Auch ein gutes Kurzvideo-Tutorial auf Docker von sysadmincasts.com

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

Docker Pros:

  • Kann Instanz schnell hochfahren
  • Leichter zu lernen als Marionette
  • 0 Ausfallzeiten einfach zu erledigen

Docker Nachteile:

  • Container haben ein Limit von 10 GB, wenn das Backend von devicemapper verwendet wird
  • Bei kleinen Konfigurationsänderungen dauert es lange, den Container neu zu erstellen
  • Kosten für die Verwendung einer Docker-Registry wie hub.docker.com, quay.io (Die selbst gehostete Docker-Registry ist extrem fehlerhaft und enthält keine GUI)
  • Kein richtiges Init-System. Einige Anwendungen spielen sich nicht gut.
  • Keine genaue Kontrolle über das Netzwerk
  • Anwendungen, die Subshells erfordern (Blick auf Ihre RVM + Ruby) sind sehr schwierig, um richtig zu funktionieren
  • Kann keine Windows-Hosts, keine SLES oder andere weniger verbreitete Betriebssysteme verwalten
  • Derzeit ist die Docker-Orchestrierung noch sehr jung.
  • Momentan kann Ihre /etc/resolv.conf nicht zur Buildzeit gesetzt werden
  • Verschiedene Fehler, die wir mit / etc / localtime und / dev / urandom mounten müssen, um sie den localtime- und urandom-Verzeichnissen der Hosts zuzuordnen.
  • Die Leistung ist nicht so schnell (trotz der Behauptung, dass Docker 99% der Geschwindigkeit von Bare Metal entsprechen sollte, ist es manchmal 30% langsamer als andere Maschinen).
  • Kleine Container haben immer noch Hunderte von Megabytes an Overhead. Unsere Container sind alle mehrere Gigabyte.

Puppet Pros:

  • Einfach zu skalieren
  • Funktioniert mit vorhandenen Servern (Windows, Linux, Sles)
  • Schnell, um kleine Änderungen vorzunehmen
  • Starke Gemeinschaft von anderen Marionettenbenutzern und Modulen
  • Standardisierte API für die Installation von Paketen auf allen Plattformen

Marionette Nachteile:

  • Große Infrastrukturen werden sehr komplex
  • Bedingte Modulabhängigkeiten erzeugen Spagetti-Code
  • Mehr schweres Gewicht

Derzeit verwenden wir Marionetten, um unsere Docker-Container bereitzustellen. Die Docker-Container werden für Jenkins-Builds verwendet und werden nach jedem Build zerstört. Es funktioniert gut und gibt uns eine konsistente Umgebung. Das bedeutet, dass wir den Code nur einmal schreiben und dann sowohl Ubuntu-, Sles- und Centos-Maschinen neu erstellen müssen. Der Umbau der Container dauert etwa 15 bis 30 Minuten und ist immer noch ein manueller Vorgang. Docker ist ideal für das Aufdrehen schneller Test-VMs,

Kurz gesagt, Marionette eignet sich hervorragend für die Verwaltung Ihrer vorhandenen Infrastruktur. Docker ist gut, wenn Sie eine Greenfield-Plattform haben, die zu 100% aus Linux besteht und einen Technologie-Stack enthält, der in kleinen flüchtigen Instanzen eingeschlossen werden kann. Während sich einige Funktionen überschneiden, schließen sie sich nicht gegenseitig aus.

Ich fand diese Antwort subjektiv und spekulativ. Ich glaube nicht, dass es wirklich eine Antwort darauf gibt, warum man Puppet neben / in Verbindung mit Docker weiterhin verwenden kann, wenn Docker auf einem höheren Niveau als ein einfacheres Werkzeug für denselben Zweck erscheint. 8bitjunkie vor 9 Jahren 5
@ 7SpecialGems Mit weiteren Fakten aktualisiert. spuder vor 9 Jahren 1
Es wäre schön, wenn wir eine Antwort auf diese Antwort in der Welt 2015 sehen würden und wie sich die Dinge verändert haben Oliver Bayes-Shelton vor 9 Jahren 1
2
xtrade

Docker helps you to provision and initially configure containers, but it runs one-time commands at the initialisation of the container.

Puppet is strongest when you run it as a daemon, it ensures that your configuration stays as you specify it, so for example if you service stops running, it will start it again.

One of the best things about (correctly designed) puppet configuration manifests is that they are idempotent; it's supposed to describe the state you want to be at and not so much necessarily the steps to get there.

It also allows you to abstract and parametrise configurations and you can export parameters created on one server or container and use them in another (e.g. collecting a list of nodes hostnames for a monitoring application).

I would say they definitely serve different but related purposes. I'm currently looking at using existing puppet manifests to start configuring containers so that development environments are more like production environments.