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


16

Ich habe vor einiger Zeit den Ops-Teil von DevOps ausprobiert und es hat sehr viel Spaß gemacht, aber ich habe keine Zeit und keinen Grund, es in irgendeinem Projekt auszuprobieren. Aber letzte Woche habe ich einen neuen Job angefangen, bei dem der Chef mich gefragt hat, ob ich den Server so konfigurieren kann, dass er so etwas wie eine Staging-Umgebung für Unternehmensprojekte erstellt. Gleichzeitig habe ich darüber nachgedacht, das Projekt mehr als DevOps und nicht nur als Entwickler zu migrieren.

Ich bin mit Docker herausgekommen, was für mich großartig und super einfach ist. Aber vor einiger Zeit habe ich Puppet ausprobiert, daher stellte sich 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 bei Hacker News Consul , eine nette Konfiguration und Diensterkennung, sodass sogar die Konfiguration behoben werden kann (und ich denke darüber nach, dies auch zu implementieren).

Antworten:


18

Marionette und Hafenarbeiter können viele der gleichen Dinge tun, aber sie nähern sich ihnen auf unterschiedliche Weise.

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

Zum Zeitpunkt dieses Schreibens ist Docker noch instabil und sollte nicht in der Produktion verwendet werden. Viele der APIs werden wahrscheinlich bis zur Veröffentlichung von Version 1.0 geändert.

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

Puppet hingegen ist ein stabiles Produkt und verfügt über ein ganzes Ökosystem an Werkzeugen (Erbe, Kollektiv, Charakter, Rasiermesser). Diese Tools können schnell und ohne Probleme implementiert werden.

Ich kann die folgenden Ressourcen nur empfehlen.

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

Ein Podcast darüber, wie Hafenarbeiter und Marionette zusammenarbeiten können
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Ein Puppet-Blog-Artikel zur Integration in Docker
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

Ein weiterer Blog-Artikel zu Puppet und Docker existiert nebeneinander
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 kleine Korrektur der Devop-Terminologie. Devops ist eher eine Softwareentwicklungsmethode bei der Entwickler und Betriebe zusammenarbeiten, als ein bestimmtes Tool.

Aktualisieren

Derzeit verwendet meine Firma sowohl Puppen- als auch Hafenarbeiter. Hier ist eine großartige Präsentation auf der Puppet Conf 2014 darüber, warum Sie Puppet vs Docker verwenden würden. Gegeben von James Turnbull, einem ehemaligen Arbeitgeber von Puppetlabs und Autor des Hafenbuchs.

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

Auch ein gutes kurzes Video-Tutorial zu Docker von sysadmincasts.com

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

Docker-Profis:

  • Kann Instanz schnell drehen
  • Einfacher zu lernen als Puppe
  • Einfache Ausführung von 0 Ausfallzeiten

Docker Nachteile:

  • Container haben ein Limit von 10 GB, wenn Sie das Backend von devicemapper verwenden
  • Kleine Konfigurationsänderungen benötigen viel Zeit, um den Container wiederherzustellen
  • Die Verwendung einer Docker-Registrierung wie hub.docker.com, quay.io kostet Geld. (Die selbst gehostete Docker-Registrierung ist äußerst fehlerhaft und hat keine GUI.)
  • Kein richtiges Init-System. Einige Anwendungen spielen nicht gut.
  • Keine feinkörnige Kontrolle über das Netzwerk
  • Anwendungen, für die Subshells erforderlich sind (RVM + Ruby), sind sehr schwierig, um ordnungsgemäß zu funktionieren
  • Windows-Hosts, SLES oder andere weniger beliebte Betriebssysteme können nicht verwaltet werden
  • Derzeit ist Docker Orchestration sehr jung.
  • Zur Zeit kann die Datei /etc/resolv.conf nicht zur Erstellungszeit gesetzt werden
  • Verschiedene Fehler, die wir in / etc / localtime und / dev / urandom mounten müssen, um sie den Verzeichnissen localtime und urandom des Hosts zuzuordnen.
  • Die Leistung ist nicht so schnell (trotz aller Behauptungen, dass Docker 99% der Geschwindigkeit von Bare-Metal-Geräten erreichen sollte, ist sie manchmal 30% langsamer als andere Geräte).
  • Kleine Container haben immer noch einen Overhead von Hunderten von Megabyte. Unsere Container haben alle mehrere Gigabyte.

Marionetten-Profis:

  • Einfach zu skalieren
  • Funktioniert mit vorhandenen Servern (Windows, Linux, Sles)
  • Schnell kleine Änderungen vornehmen
  • Starke Community von anderen Puppenspielern und Modulen
  • Standardisierte API zur 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 Puppet, um unsere Docker-Container bereitzustellen. Die Docker-Container werden für Jenkins-Builds verwendet und 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 Ubuntu-, Sles- und Centos-Maschinen neu erstellen müssen. Der Wiederaufbau der Container dauert ca. 15 bis 30 Minuten und ist immer noch ein manueller Vorgang. Docker ist ideal für schnelle Test-VMs,

Kurz gesagt, Puppet eignet sich hervorragend für die Verwaltung Ihrer vorhandenen Infrastruktur. Docker ist gut, wenn Sie eine 100% ige Linux-Greenfield-Umgebung mit einem Technologie-Stack haben, der in kleinen kurzlebigen Instanzen eingeschlossen werden kann. Während sich einige der Funktionen überschneiden, schließen sie sich nicht gegenseitig aus.


5
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 weiter verwenden könnte, wenn Docker auf hoher Ebene als einfacheres Werkzeug für den gleichen Zweck erscheint.
8bitjunkie

1
@ 7SpecialGems Aktualisiert mit mehr Fakten.
Spuder

1
Es wäre großartig zu sehen, wie sich diese Antwort in der Welt 2015 veränderte und wie sich die Dinge verändert haben
Oliver Bayes-Shelton,

Ist die Frage / Antwort im Jahr 2019 noch relativ? Was hätte sich ändern können?
Md. Abu Taher

2

Docker unterstützt Sie bei der Bereitstellung und Erstkonfiguration von Containern, führt jedoch bei der Initialisierung des Containers einmalige Befehle aus.

Puppet ist am stärksten, wenn Sie es als Daemon ausführen. Es stellt sicher, dass Ihre Konfiguration so bleibt, wie Sie es angegeben haben. Wenn Ihr Dienst beispielsweise nicht mehr ausgeführt wird, wird er erneut gestartet.

Eines der besten Dinge an (korrekt entworfenen) Manifesten der Puppenkonfiguration ist, dass sie idempotent sind ; Es soll den Zustand beschreiben, in dem Sie sein möchten, und nicht unbedingt die Schritte, um dorthin zu gelangen.

Außerdem können Sie Konfigurationen abstrahieren und parametrisieren und auf einem Server oder Container erstellte Parameter exportieren und in einem anderen verwenden (z. B. eine Liste von Knotenhostnamen für eine Überwachungsanwendung erfassen).

Ich würde sagen, dass sie definitiv verschiedenen, aber verwandten Zwecken dienen. Ich versuche derzeit, vorhandene Puppet-Manifeste zu verwenden, um Container so zu konfigurieren, dass Entwicklungsumgebungen eher wie Produktionsumgebungen aussehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.