it-swarm.com.de

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

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 ruft die verschiedenen Installationen ab, die wir beispielsweise für Python und Tomcat benötigen. Wir haben mindestens 3 Instanzen und maximal 8.

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

Das Beste, was ich sehen kann, ist, wenn wir Puppet verwenden, dass wir eine deklarative Programmierung haben, die einfacher zu prüfen ist, um zu sehen, was im Vergleich zu einem Skript passiert. CloudInit hat auch ein 16k-Skriptgrößenlimit, auf das 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 zur Verfügung stellen kann?

82
BestPractices

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

Klar, Sie können von oben nach unten schreiben, sobald CloudInit-Skripte einen Server bereitstellen. Aber was passiert, wenn Sie eine Konfigurationsdatei ändern, einen Benutzer hinzufügen, ein Paket aktualisieren oder ein neues Paket installieren müssen? Sie werden sich letztendlich bei Servern anmelden oder Skripte schreiben, was unvermeidlich zu einem inkongruenten Zustand der Server 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 sichert den Stand der Dinge. Wenn ein Entwickler um 3 Uhr morgens eine Java App behebt und Ihre Tomcat-Konfiguration ändert, wird diese von Puppet zurückgesetzt. Sie können die Version von Python für alle schnell ändern oder Gruppen von Knoten, und wenn jemand eine andere Version installiert, wird Puppet es zurück ändern.

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

Es gibt viele andere Gründe für die Verwendung von Konfigurationsverwaltungssoftware, z. B. Back-End-Berichterstellung, Überwachung und Sicherheitskonformität.

80
czervik

Das gesamte Konfigurationsmanagement besteht darin, Computer 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 ein miserables Erlebnis ist), aber was ist mit Anwendungen, die sowohl Rechenzentrumsressourcen als auch AWS oder lokale Testumgebungen oder Entwicklungsumgebungen verwenden Maschinen?

Wenn Sie nur in AWS existieren, könnten Sie wahrscheinlich mit cloudinit und nichts anderem davonkommen, aber ich bin nicht überzeugt, dass dies für Anwendungen jeglicher Größenordnung realistisch ist (Netflix beispielsweise erstellt Vorab-Backs für ihre AMIs mithilfe der von ihnen geschriebenen OSS-Technologien und veröffentlicht für die Welt, betrachten dieses Video für Details). Hochverfügbare Anwendungen sind überregional und basieren häufig auf VPCs. Sie werden in der Regel über VPNs auf Rechenzentren gesichert, und dies betrifft nicht einmal Demo-, Staging-, Test- oder Entwicklungsumgebungen. Als jemand, der mit Provisioning-Maschinen beauftragt ist, möchte ich last die Arbeit wiederholen oder nicht mehr mit dem Debuggen mehrerer Provisioning-Methoden fertig werden.

Daher Chefkoch oder Marionette. Sie funktionieren für AWS genauso gut wie für mein Rechenzentrum und für meine laufende Entwicklungsmaschine Vagrant genauso gut wie für die Demo-Umgebungen, die ich gelegentlich im laufenden Betrieb benötige. Ich möchte Chef oder Puppet lieber von cloudinit aus starten, als sowohl cloudinit als auch Chef oder Puppet beizubehalten.

63
Christopher

Wenn Sie Server wegwerfen möchten, beispielsweise 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 Betriebsdauer handelt, den Sie möglicherweise verwalten möchten, können Koch, Marionette oder Hafenarbeiter Ihnen 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.

5
egrubbs

Nach meiner Erfahrung gibt es einfache Dinge, die mit den von AWS bereitgestellten sofort einsatzbereiten GUI-Tools leicht zu erledigen sind. Wenn Sie sich jedoch mit komplexeren Dingen befassen, stellen Sie fest, dass es Einschränkungen gibt, mit denen Sie nur etwas anfangen können ihre Werkzeuge.

An diesem Punkt können Sie entweder aufhören oder andere Tools (wie Chefkoch oder Marionette) finden, die Ihnen helfen, diese komplexeren Ziele zu erreichen und die einfacheren Dinge zu tun.

Deine Entscheidung.

0
Brad Knowles