Warum verwenden Menschen Puppet / Chef mit Amazon Cloud Formation, anstatt nur CloudInit zu verwenden?

84

Wir planen, AMI EC2-Instanzen zu verwenden, die nicht "vorgebacken" sind. Das heißt, wenn sie hochgefahren werden, handelt es sich um reine Installationen von AWS Linux. Unser Bootstrap-Prozess zieht die verschiedenen Installationen ein, die wir benötigen, z. B. Python, Tomcat. Wir haben mindestens 3 Instanzen und maximal 8.

Wäre die Verwendung von Puppet / Chef angesichts dieser Anforderungen sinnvoll, anstatt Amazon Cloud Formation (CloudInit) zu verwenden?

Das Beste, was ich sehen kann, ist, wenn wir Puppet verwenden, dann hätten wir eine deklarative Programmierung, die einfacher zu überprüfen ist, um zu sehen, was im Vergleich zu einem Skript passiert. Außerdem hat CloudInit eine Größenbeschränkung von 16.000 Skripten, auf die wir möglicherweise stoßen oder nicht.

Ist jemand aus einem bestimmten Grund von CloudInit zu Puppet oder Chef gewechselt, den er hier als Antwort auf meine Frage angeben kann?

Empfohlene Vorgehensweise
quelle
2
Einige Leute (wie ich) verwenden einfache Benutzerdatenskripte (unterstützt von Cloud-Init) mit CloudFormation. Längere Skripte können von S3 heruntergeladen und vom ersten Benutzerdatenskript ausgeführt werden.
Eric Hammond
Cloud-Init ist agnostisch und wird von mehreren Cloud-Anbietern verwendet. Es kann auf AWS, der Google Cloud-Plattform und Microsoft Azure ausgeführt werden. ( cloud-init.io ) Während AWS :: CloudFormation :: Init nicht agnostisch ist. Es ist amazonenspezifisch.
Jordan Stewart

Antworten:

83

Gibt es einen Vorteil gegenüber CloudInit? Ja, absolut viele von ihnen!

Sicher, Sie können von oben nach unten laufen, sobald CloudInit-Skripte ausgeführt werden, um einen Server bereitzustellen. Aber was passiert, wenn Sie eine Konfigurationsdatei ändern, einen Benutzer hinzufügen, ein Paket aktualisieren oder ein neues Paket installieren müssen? Am Ende melden Sie sich bei Servern an oder schreiben dazu Skripte, was zwangsläufig zu einem inkongruenten Serverstatus führt.

CloudInit ist kein Konfigurationsmanagement. Wenn Sie sich für die Verwendung der Konfigurationsverwaltungssoftware entscheiden, verwenden Sie Cloud Init nur für eine Aufgabe: um den Puppet / Chef / anderen Agenten zu booten.

Puppet hilft Ihnen nicht nur dabei, die Installation von Paketen zu automatisieren, SSH-Schlüssel einzurichten oder Ihren Tomcat-Heap zu optimieren. Es stellt den Zustand der Dinge sicher. Wenn ein Entwickler um 3 Uhr morgens eine Java-App behebt und Ihre Tomcat-Konfiguration ändert, ändert Puppet sie zurück. Sie können die Version von Python schnell für alle oder Gruppen von Knoten ändern. Wenn jemand eine andere Version installiert, ändert Puppet sie zurück.

Wenn sich Ihr Anwendungsstapel ändert und Sie beispielsweise RabbitMQ oder Jetty oder ein neues RDBMS verwenden, können Sie die Änderungen problemlos auf Zehntausenden oder Tausenden von Servern testen und bereitstellen.

Es gibt viele andere Gründe für die Verwendung von Konfigurationsverwaltungssoftware, z. B. Back-End-Berichterstellung, Prüfung und Einhaltung von Sicherheitsbestimmungen.

czervik
quelle
14
Es hängt davon ab, ob. Für Dienste mit langer Laufzeit (normalerweise AD, DBs) ist möglicherweise eine Konfigurationsverwaltung erforderlich. Aber für andere austauschbare Wegwerfserver nicht wirklich; Webserver, die unter ASG verwaltet werden, Clusterknoten in Hadoop oder Elasticsearch. Wenn ich die Konfiguration ändern würde, würde ich einfach den Server wegwerfen und einen neuen starten.
Sleeper Smith
64

Der gesamte Punkt des Konfigurationsmanagements besteht darin, Maschinen vorhersehbar und konsistent hochzufahren. CloudFormation und Cloudinit eignen sich hervorragend, wenn Sie sich ausschließlich auf AWS beschränken (obwohl das Debuggen von CloudFormation-Vorlagen eine miserable Erfahrung ist ). Was ist jedoch mit Anwendungen, die sowohl Rechenzentrumsressourcen und AWS als auch lokale Testumgebungen oder Entwicklungsmaschinen verwenden?

Wenn Sie nur in AWS existieren, könnten Sie wahrscheinlich mit Cloudinit und nichts anderem davonkommen, aber ich bin nicht davon überzeugt, dass dies für Anwendungen jeder Größenordnung realistisch ist (Netflix beispielsweise backt seine AMIs mithilfe der von ihnen geschriebenen OSS-Technologien vor und für die Welt freigegeben; betrachten Sie dieses Video für Details). Hochverfügbare Anwendungen sind überregional, basieren häufig auf VPCs und werden in der Regel über VPNs in Rechenzentren gesichert. Dies betrifft nicht einmal Demo-, Staging-, Test- oder Entwicklungsumgebungen. Als jemand, der mit der Bereitstellung von Maschinen beauftragt ist, möchte ich als letztes die Arbeit wiederholen oder beim Debuggen mehrerer Bereitstellungsmethoden stecken bleiben.

Daher Chef oder Marionette. Sie funktionieren für AWS genauso gut wie für mein Rechenzentrum und für meine Entwicklungsmaschine, auf der Vagrant ausgeführt wird, genauso wie für die Demo-Umgebungen, die ich gelegentlich im laufenden Betrieb benötige. Ich würde Chef oder Puppet viel lieber von Cloudinit aus starten, als sowohl Cloudinit als auch Chef oder Puppet zu pflegen.

Christopher
quelle
1
@ U0001: Die Videoverbindung wurde behoben
Christopher
5

Wenn Sie Server wegwerfen möchten, sagen wir, dass Sie hinter einer Autoscaling-Gruppe laufen, würde ich sagen, dass Cloudinit wahrscheinlich ausreicht. Linux-Shell-Skripte oder Windows-Powershell-Skripte sollten den Trick machen.

Wenn es sich um einen Server mit langer Laufzeit handelt, den Sie verwalten möchten, kann Ihnen ein Koch, eine Marionette oder ein Hafenarbeiter einen Vorteil verschaffen, wie in der akzeptierten Antwort angegeben. Wenn Sie den Vorteil nach der Verwendung nicht erkennen können, benötigen Sie das Tool wahrscheinlich nicht.

egrubbs
quelle
Ich stimme vollkommen zu. Puppet und Chef sind komplex und wenn Sie einen Server einfach durch Löschen und Aufrufen eines neuen ersetzen können, würde ich davon abraten, sie zu verwenden. Es gibt bestimmte Szenarien, in denen Puppen / Köche großartig sind, aber Sie müssen die zusätzliche Komplexität der Verwendung in jedem Szenario abwägen.
Bobmarksie
0

Nach meiner Erfahrung gibt es einfache Dinge, die mit den von AWS bereitgestellten Standard-GUI-Tools leicht erledigt werden können. Wenn Sie jedoch in komplexere Dinge eintauchen, stellen Sie fest, dass es Einschränkungen gibt, was Sie mit nur tun können ihre Werkzeuge.

An diesem Punkt können Sie entweder aufhören oder andere Tools (wie Chef oder Puppet) finden, mit denen Sie diese komplexeren Ziele erreichen und die einfacheren Dinge tun können.

Deine Entscheidung.

Brad Knowles
quelle