Warum Chef / Puppet anstelle von Shell-Skripten verwenden?

81

Neu bei Puppen- und Kochwerkzeugen. Scheint, als ob der Job, den sie machen, mit Shell-Skripten erledigt werden kann. Vielleicht wurde es in Shell-Skripten gemacht, bis diese kamen.

Ich würde zustimmen, dass sie lesbarer sind. Aber gibt es andere Vorteile gegenüber Shell-Skripten als nur lesbar zu sein?

ausruhen
quelle

Antworten:

56

Eine domänenspezifische Sprache macht einen großen Unterschied in der Menge des Codes, den Sie schreiben. Zum Beispiel könnte man argumentieren, dass es keinen großen Unterschied gibt zwischen:

chmod 640 /my/file

und

file { "/my/file":
    mode => 640,
}

aber es gibt einen großen Unterschied zwischen diesen:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

und

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

Was passiert, wenn der Wget ausfällt? Wie geht Ihr Skript damit um? Und was passiert, wenn es danach in Ihrem Skript etwas gibt, für das $ FILE mit dem richtigen Inhalt vorhanden sein muss?

Sie könnten argumentieren, dass man nur echo "Hello world" > $FILEdas Skript einfügen könnte , außer dass im ersten Beispiel das Skript auf dem Client ausgeführt werden muss, während Puppet dies alles auf dem Server kompiliert. Wenn Sie also den Inhalt ändern, müssen Sie ihn nur auf dem Server ändern, und er ändert sich für so viele Systeme, wie Sie möchten. Und Marionette handhabt Abhängigkeiten und Übertragungsprobleme für Sie automatisch.

Es gibt einfach keinen Vergleich - richtige Konfigurationsmanagement-Tools sparen Ihnen Zeit und Komplexität. Je mehr Sie versuchen, dies zu tun, desto mehr Shell-Skripte scheinen unzureichend zu sein, und desto mehr Aufwand sparen Sie, wenn Sie dies mit Puppet tun.

Paul Gear
quelle
9
@Paul Gear, es ist eine Vereinfachung zu sagen, dass Konfigurationsmanagement-Tools auf lange Sicht der richtige Weg sind. Wenn Sie beispielsweise AWS verwenden, kann ein Shell-Skript den Server von Grund auf neu erstellen, einige Tests ausführen und ein Image erstellen, sobald Sie sicher sind, dass die AWS-Installationen in Ordnung sind. Anschließend können Sie dieses Image für weitere Tests in einer Vorschau- oder Staging-Umgebung bereitstellen. Sobald Sie überprüft haben, ob das Image für Ihre Zwecke geeignet ist, können Sie zur Produktion übergehen. Konfigurationsverwaltungstools helfen in diesem Szenario überhaupt nicht.
Derek Litz
Wenn Sie nun Hunderte von dedizierten Servern verwalten möchten, die täglich verwendet werden (und Sie haben nur wenig Kontrolle darüber, was diese versehentlich tun oder nicht), sollten Sie Konfigurationsmanagement-Tools verwenden.
Derek Litz
6
Dies ist kein sehr überzeugendes Beispiel. Ich könnte mit wget anfangen und dann würde ich nicht in einem seltsamen Zustand enden. Ist Datei wie eine Transaktion, die zurückgesetzt wird, wenn einer der Schritte nicht erfolgreich ist?
PSkocik
33

Dies wird eine unpopuläre Meinung sein, aber Konfigurationsmanagementsysteme sind nicht unbedingt besser. Manchmal ist einfach wirklich am besten.

Das von Ihnen gewählte Konfigurationssystem ist mit einer bestimmten Lernkurve und einem bestimmten Verwaltungsaufwand verbunden. Sie führen schließlich eine Abhängigkeit ein. Wie bei jeder Automatisierung müssen Sie auch bei implementierten Konfigurationen darauf achten, dass die Sicherheit gewährleistet ist.

Ich hatte nur ein paar Fälle, in denen wir das Konfigurationsmanagement bereitgestellt haben und es blieb hängen. Es gab immer eine große Anzahl von Systemen mit sich wiederholenden Konfigurationen und der Notwendigkeit, konfigurierbare Cookie-Cutter-Implementierungen durchzuführen.

Kenchilada
quelle
10
Wenn die Kosten für die Verwaltung der Umgebung so hoch sind, dass die Verwaltung der Automatisierung wirklich günstiger ist. Wenn es einfacher ist, in Git verwaltete Änderungen zu skripten oder Dinge in einem ssh-Multiplexer einzurichten, machen wir das. Für mich ist es am wichtigsten, dass ich die Systeme überwache und überprüfe, ob alles wie erwartet funktioniert. Solange ich benachrichtigt werde, wenn etwas falsch konfiguriert ist, ist es nicht so wichtig, wie es konfiguriert wird.
Kenchilada
10
@ewwhite "Wann entscheiden Sie sich zu automatisieren vs. nicht" xkcd.com/1205
MikeyB
3
Moderne Tools wie Ansible haben erheblich weniger Aufwand für Bereitstellung / Verwaltung als Chef oder Puppet und erfordern nur geringe oder gar keine Abhängigkeiten (insbesondere Ansible ist ohne Agenten). Dies senkt wirklich die Messlatte für die Annahme.
GomoX
2
@ewwhite Sie automatisieren, wann immer Sie möchten, um Ihre Produktivität zu steigern. Sie lernen durch Automatisierung, Sie lernen nicht durch alltägliche Aufgaben. Lernen = Produktivitätssteigerung und iterative Verbesserung. Die Automatisierung kombiniert sich damit, um mehr Positive zu erzeugen. Es ist ein positiver Schneeball anstatt eines negativen. Technischer Fortschritt versus technische Verschuldung.
Derek Litz
2
@ABB Nein, das ist nicht impliziert. Ich erwähne nicht einmal Shell-Skripte, ich erwähne Automatisierung als allgemeine Praxis. Sie können Dinge mit Shellskripten automatisieren und die Skriptabstraktion erlernen, anstatt Dinge manuell zu erledigen, was Ihnen nicht nur die Zeit spart, diese Aufgabe erneut zu erledigen, sondern auch Fehler verhindert. Außerdem sollten Sie in der Lage sein, Ihr nächstes Skript ein bisschen besser zu schreiben als das letzte. Ein positiver Schneeball ... Wenn Sie jedoch ein Experte für das Schreiben von Skripten sind und kein Skript schreiben, das Sie jemals wieder ausführen werden, hilft Ihnen dies nicht, Zeit zu sparen oder zu lernen.
Derek Litz
23

Sie haben Ihre eigene Frage beantwortet ...

Die Automatisierung wird skalierbarer und formalisierter . Puppet und Chef gelten heutzutage als Standard (siehe Stellenanzeigen ).

Cobbled-Together-Shell-Skripte haben ihren Platz, sind jedoch im Kontext der DevOps-Bewegung nicht skalierbar. Die Lesbarkeit ist ein Teil davon.

ewwhite
quelle
7
Sind Shell-Skripte weniger formalisiert? Überzeugt das Zitieren von Stellenanzeigen? Und ein Entwickler ist ziemlich schade, denn er / sie ist als Entwickler unterausgenutzt. Der Link sagt eigentlich nichts über die Skalierbarkeit aus. Ist die Behauptung, dass Shell-Skripte nicht skalierbar sind? Ich finde Puppet interessant, aber nicht unbedingt aus den in der Antwort genannten Gründen.
Acumenus
Stellenanzeigen spiegeln den realen Markt für bestimmte Fähigkeiten wider. Ja, die Verwendung des Konfigurationsmanagements für den vorgesehenen Zweck ist skalierbarer, robuster und einfacher zu dokumentieren als Shell-Skripte. Ich habe in vielen Umgebungen gearbeitet, und die meisten Skripte, die ich sehe, sind nicht so aufgebaut, wie man es für "Produktionsqualität" halten würde, und sind so organisiert, dass sie mit Ausnahmen umgehen. Lesen Sie die akzeptierte Antwort, um zu verstehen, warum.
Ewwhite
1
"Und ein Entwickler ist eine Schande, denn er ist als Entwickler unterausgenutzt." Das stimmt einfach nicht. DevOps ist eine Entwicklungsspezialisierung, genau wie Web Development. Die Muster und Praktiken der Softwareentwicklung gelten weiterhin. Sie sollten über DevOps lesen.
Chaim Eliyah
13

Chef erleichtert die Verwaltung und Versionierung des Aufbaus einer komplexen Infrastruktur erheblich, insbesondere in jeder Art von Cloud-Umgebung, im Gegensatz dazu, dass eine Reihe von Shell-Skripten, die nicht standardisiert organisiert sind, manuell per FTP oder SCP ausgeführt werden müssen. Abhängig davon, wie viele Abhängigkeiten Sie verwalten müssen, kann die Größe dieses Gewinns sehr unterschiedlich sein, sodass die Entscheidung für eine CM-Lösung für viele Menschen nicht offensichtlich ist.

Der wahre (oft nicht gesungene) Vorteil von Chefkoch ist Idempotenz . Es ist ein enormer Vorteil gegenüber der Konfiguration von Shell-Skripten, den Status einer Ressource unabhängig von der Kombination von ausgeführten Rezepten mit überlappenden Interessen zu bestimmen. Wenn Sie jetzt Shell-Skripte zur Konfiguration haben, fragen Sie sich, wie viele von ihnen ohne unbeabsichtigte / unerwünschte Konsequenzen mehrmals ausgeführt werden können.

Eine geeignete CM-Lösung trägt dazu bei, den Erfolg in großem Maßstab sicherzustellen, indem sie die plattformübergreifende Automatisierung und die Teamzusammenarbeit vereinfacht. All dies kann mit einer gut organisierten, ordnungsgemäß verwalteten, versionierten Gruppe von Shell-Skripten erreicht werden. du musst dich fragen "warum". Chef / Puppet und ähnliche Technologien sind entstanden, weil eine Gruppe talentierter SysOps es satt hatte, dieselben Probleme immer wieder lösen zu müssen, und sich vorgenommen haben, uns eine bessere Option zu bieten.

Schlüsselstücke:

  • Idempotenz
  • Einfaches Abhängigkeitsmanagement (Versionierung)
  • Standardisierte Organisation (auf Branchenebene akzeptiert)
  • Abstraktion, um Serverkonfigurationsaufgaben von Details auf Systemebene zu trennen
  • Fähigkeit, Community-Wissen zu nutzen (das garantiert alle oben genannten Prinzipien umfasst)
Matt Surabian
quelle
3
Idempotenz ist mit ss kaum unmöglich. Abhängigkeiten werden von yum / apt usw. gut verwaltet. Akzeptanz ist irrelevant. Community-Wissen existiert für ss. Ich akzeptiere jedoch, dass es nützlich ist, nicht über eine Reihe von Skripten kopieren zu müssen und Systeme auch zentral zu konfigurieren. Ich habe gehört, Marionette benötigt einen clientseitigen Agenten.
Acumenus
10

Moderne Konfigurationsmanagement-Tools wie Puppet und Chef ermöglichen es Ihnen, den Status eines Systems zu definieren , anstatt sich um die Aktivitäten zu kümmern, die zum Erreichen eines konfigurierten Servers erforderlich sind.

Bei Ihrem Befehl chmod wird beispielsweise davon ausgegangen, dass die Datei vorhanden ist, dass der Benutzer, der die Datei besitzt, vorhanden ist, dass die Verzeichnisse erstellt wurden usw. Ihr Skript muss daher alle diese Voraussetzungen berücksichtigen.

Tools für die zustandsbasierte Konfigurationsverwaltung sind einfacher: Es ist nur wichtig, dass die Datei über die richtigen Berechtigungen verfügt. Wie dies erreicht wird, ist das Problem des Werkzeugs.

Jon Jaroker
quelle
1
Eigentlich gehe ich chmodnicht davon aus, dass die Datei existiert, weil sie entweder vom Skript erstellt oder auf Existenz geprüft wurde.
Acumenus
9

Wenn Ihnen Server zur Verfügung stehen oder Sie mehr als ein Paar auf einmal ausstehen müssen, erfüllt ein vollständiges CM-System Ihre Anforderungen viel besser als eine Reihe von Shell-Skripten.

Wenn Ihre Build-Anforderungen bescheiden sind (oder Sie Bio-Fair-Trade-Server aus Freilandhaltung handwerklich herstellen möchten), halten Sie es einfach.

Persönlich habe ich Chef bei einem vergangenen Auftritt ausgiebig benutzt und versucht, es bei diesem Auftritt einfach zu halten, aber ich habe die Primitiven, Abstraktionen und die Kraft, die Chef bereitgestellt hat, wirklich vermisst. Selbst wenn Sie in eine Situation geraten, in der Sie mit ein paar Shell-Befehlen das bekommen, was Sie brauchen, können Sie diese einfach mit einem 'command'-Block ausführen und Ihre Shell-Befehle genau so eingeben, als würden Sie sie in Shell schreiben.

Vor diesem Hintergrund können Sie Chef ohne Server ausführen (Chef-Solo), und ich bin mir ziemlich sicher, dass Puppet über ein Analogon verfügt, bei dem Sie die Kochbücher und Rezepte anderer weiterhin nutzen können, ohne einen zentralen Server zu verwenden.

Ein weiterer Vorteil ist die Community: Es gibt viele Leute (von denen viele klüger und / oder erfahrener sind als Sie). Persönlich finde ich es toll, wenn jemand anders meine Arbeit für mich geleistet hat, oft umfangreicher als ich.

gWaldo
quelle
1

Ich habe ein Shell-Skript-basiertes Server-Automatisierungsframework erstellt: https://github.com/myplaceonline/posixcube

Ich bin mir sicher, dass ich nicht der erste bin, der ein solches Projekt realisiert, aber ich konnte so etwas nicht finden, dass es meinen Bedürfnissen entspricht. Deshalb dachte ich, dass andere dies nützlich finden könnten. Ich hatte nur Erfahrung mit Chefkoch, aber als ich anfing, mich bei Ansible und anderen umzuschauen, wollte ich Shell-Skripten eine Chance geben, und das Ergebnis gefällt mir bisher.

Kevin
quelle