2012-08-16 11 views
75

Wir planen, AMI EC2-Instanzen zu verwenden, die nicht "vorgebacken" sind. I.e. Wenn sie hochgespielt werden, sind sie bare Installationen von AWS Linux. Unser Bootstrap-Prozess zieht die verschiedenen Installationen an, die wir z.B. Python, Kater. Wir haben min von 3 Instanzen und max von 8.Warum verwenden Menschen Puppet/Chef mit Amazon Cloud Formation statt nur CloudInit?

Angesichts dieser Anforderungen, würde die Verwendung von Puppet/Chef nützlich sein, anstatt Amazon Cloud Formation (CloudInit) verwenden?

Am besten kann ich sehen, wenn wir Puppet verwenden, dann hätten wir eine deklarative Programmierung, die einfacher zu auditieren ist, um zu sehen, was im Vergleich zu einem Skript passiert. Auch CloudInit hat ein 16k-Skript-Größenlimit, auf das wir möglicherweise nicht stoßen.

Hat jemand aus CloudInit zu Puppet oder Chef aus einem bestimmten Grund bewegt, die sie hier als Antwort auf meine Frage bereitstellen können?

+1

Einige Leute (wie ich) verwenden einfache Benutzerdatenskripte (unterstützt von cloud-init) mit CloudFormation. Längere Skripte können von S3 heruntergeladen und über das erste Benutzerdatenskript ausgeführt werden. –

+0

Cloud-init ist agnostisch, und mehrere Cloud-Anbieter verwenden es. Es kann auf AWS, Google Cloud Platform und Microsoft Azure ausgeführt werden. (https://cloud-init.io/) Dagegen ist AWS :: CloudFormation :: Init nicht agnostisch. Es ist amazonspezifisch. –

Antwort

73

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

Sicher, Sie können von oben nach unten laufen lassen einmal CloudInit-Skripte, um einen Server bereitzustellen. Was passiert aber, wenn Sie eine Konfigurationsdatei ändern, einen Benutzer hinzufügen, ein Paket aktualisieren oder ein neues Paket installieren müssen? Sie werden sich am Ende bei Servern anmelden oder Skripte schreiben, um dies zu tun, und unvermeidlich einen inkongruenten Status von Servern.

CloudInit ist keine Konfigurationsverwaltung. Wenn Sie sich dafür entscheiden, die Konfigurationsverwaltungssoftware zu verwenden, verwenden Sie cloud init nur für eine Aufgabe: um den Puppet/Chef/anderen Agenten zu booten.

Mit Puppet können Sie nicht nur die Installation von Paketen automatisieren, ssh-Schlüssel einrichten oder Ihren Tomcat-Heap optimieren. Es sichert den Zustand der Dinge. Wenn ein Entwickler eine Java-App um 3:00 Uhr morgens behebt und Ihre Tomcat-Konfiguration ändert, wird Puppet diese zurücksetzen. Sie können die Version von Python für alle oder Gruppen von Knoten schnell ändern, und wenn jemand eine andere Version installiert, wird Puppet diese zurück ändern.

Wenn sich der Anwendungsstapel ändert und Sie beginnen, RabbitMQ oder Jetty oder ein neues RDBMS zu verwenden, können Sie die Änderungen problemlos auf mehreren zehn oder tausend Servern testen und bereitstellen.

Es gibt viele andere Gründe für die Verwendung von Konfigurationsverwaltungssoftware wie Back-End-Berichterstellung, Auditing und Sicherheitskonformität.

+14

Es kommt darauf an. Für lange laufende Dienste (normalerweise AD, DBs), kann Konfigurationsverwaltung benötigt werden. Aber für andere austauschbare Server, nicht wirklich; Webserver unter ASG, Clusterknoten in Hadoop oder Elasticsearch. Wenn ich die Konfiguration ändern würde, würde ich einfach den Server wegwerfen und einen neuen booten. –

59

Der ganze Sinn des Konfigurationsmanagements besteht darin, Rechner vorhersehbar und konsistent hochzufahren. CloudFormation und cloudinit eignen sich hervorragend, wenn Sie nur auf AWS beschränkt sind (obwohl das Debuggen von CloudFormation-Vorlagen miserable experience ist), aber was ist mit Anwendungen, die sowohl Rechenzentrumsressourcen als auch AWS oder lokale Testumgebungen oder Entwicklungsmaschinen verwenden?

Wenn Sie nur in AWS existieren, können Sie mit Cloudinit und sonst nichts davonkommen, aber ich bin nicht davon überzeugt, dass es für Anwendungen jeglicher Größenordnung realistisch ist (Netflix zum Beispiel backt ihre AMIs mithilfe von OSS-Technologien) Sie haben geschrieben und in die Welt veröffentlicht, siehe this video für Details). Hochverfügbare Anwendungen sind überregional und basieren häufig auf VPCs. Sie tendieren dazu, Backups zu Datencentern über VPNs hinweg durchzuführen, und dies betrifft nicht einmal Demo-, Staging-, Test- oder Entwicklungsumgebungen. Als jemand, der mit der Bereitstellung von Maschinen beauftragt ist die letzten Dinge, die ich tun möchte, sind die Arbeit zu wiederholen oder stecken bleiben Debuggen von mehreren Provisionierungsmethoden.

Daher Chef oder Puppet. Sie funktionieren genauso gut für AWS wie für mein Rechenzentrum und genauso gut für meine Entwicklungsmaschine, die Vagrant ausführt, wie sie es für die Demoumgebungen tun, die ich gelegentlich im laufenden Betrieb brauche.Ich würde viel lieber Koch oder Marionette aus Cloudinit starten, als sowohl Cloudinit als auch Chef oder Puppet beizubehalten.

+1

@ U0001: Video-Link – Christopher

5

Für weggeworfene Server, sagen wir hinter einer Autoscaling-Gruppe laufen würde ich Cloudinit wahrscheinlich genug. Linux-Shell-Skripte oder Windows-Powershell-Skripte sollten den Trick machen.

Wenn es ein lang laufender Server ist, den Sie planen, vielleicht Chef, Puppe oder Docker zu verwalten, könnte Ihnen ein Vorteil geben, wie in der angenommenen Antwort erwähnt. Wenn Sie den Vorteil nach der Verwendung nicht sehen können, benötigen Sie das Tool wahrscheinlich nicht.

+0

Ich stimme voll und ganz zu. Puppet und Chef sind komplex und wenn Sie einen Server ersetzen können, indem Sie einfach einen neuen Server löschen und neu erstellen, würde ich davon abraten, sie zu benutzen. Es gibt bestimmte Szenarien, in denen Marionette/Koch großartig sind, aber Sie müssen die zusätzliche Komplexität der Verwendung in jedem Szenario abwiegen. – bobmarksie

0

Meiner Erfahrung nach gibt es einfache Dinge, die mit den von AWS bereitgestellten Out-of-the-Box-GUI-Tools leicht erledigt werden können. Wenn Sie jedoch mit komplexeren Dingen konfrontiert werden, werden Sie feststellen, dass Sie Einschränkungen haben kann nur mit ihren Werkzeugen tun.

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

Ihre Wahl.