Frage Warum verwenden Sie Chef / Puppet über Shell-Skripte?


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

Ich stimme zu, dass sie besser lesbar sind. Aber gibt es andere Vorteile gegenüber Shell-Skripten als nur lesbar zu sein?


78
2018-05-01 10:13


Ursprung




Antworten:


Eine domänenspezifische Sprache macht einen großen Unterschied in der Menge an Code, den Sie schreiben. Zum Beispiel könnten Sie argumentieren, dass es nicht viel 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 das wget fehlschlägt? Wie wird dein Skript damit umgehen? Und was passiert, wenn in Ihrem Skript etwas danach ist, das $ FILE benötigt, um mit dem richtigen Inhalt da zu sein?

Sie könnten argumentieren, dass man es einfach sagen könnte echo "Hello world" > $FILE im Skript, außer dass im ersten Beispiel das Skript auf dem Client ausgeführt werden muss, während Puppet das alles auf dem Server kompiliert. Wenn Sie also den Inhalt ändern, müssen Sie ihn nur auf dem Server ändern und für so viele Systeme ändern, wie Sie möchten. Und Marionette behandelt Abhängigkeiten und überträgt Probleme automatisch für Sie.

Es gibt einfach keinen Vergleich - richtige Konfigurationsmanagement-Tools sparen Ihnen Zeit und Komplexität. Je mehr du versuchst zu tun, desto mehr Shell-Skripte scheinen unangemessen zu sein, und desto mehr Aufwand wirst du sparen, wenn du es mit Marionetten machst.


55
2018-05-01 11:14



@Paul Gear, es ist eine zu starke Vereinfachung zu sagen, dass Konfigurations-Management-Tools der Weg auf lange Sicht sind. Wenn Sie beispielsweise mit AWS ein Shell-Skript verwenden, können Sie den Server von Grund auf neu erstellen, einige Tests durchführen und, sobald Sie sicher sind, dass die AWS-Installationen in Ordnung sind, ein Image erstellen. Dann können Sie dieses Bild für weitere Tests in einer Vorschau- oder Staging-Umgebung bereitstellen. Sobald Sie das Bild validiert haben, ist es für Ihre Zwecke gut, dann schieben Sie in die Produktion. Konfigurationsverwaltungstools helfen in diesem Szenario überhaupt nicht. - Derek Litz
Jetzt, wenn Sie 100 von dedizierten Servern verwalten möchten, die Benutzer täglich verwenden (und Sie haben wenig Kontrolle darüber, was sie tun, irrtümlicherweise oder nicht), dann sollten die Konfigurationsverwaltungstools verwendet werden. - Derek Litz
Dies ist kein sehr überzeugendes Beispiel. Ich könnte mit wget anfangen und dann würde ich nicht in einem komischen Zustand enden. Ist Datei wie eine Transaktion, die zurückgesetzt wird, wenn einer der Schritte nicht erfolgreich ist? - PSkocik


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

Mit dem von Ihnen gewählten Konfigurationssystem sind eine bestimmte Lernkurve und Verwaltungsaufwand verbunden. Sie führen schließlich eine Abhängigkeit ein. Wie bei jeder Automatisierung müssen Sie auch darauf achten, dass die Sicherheit in bereitgestellten Konfigurationen beibehalten wird.

Ich hatte nur ein paar Fälle, in denen wir das Konfigurationsmanagement implementiert haben und es blieb hängen. Es war immer dann, als es eine große Anzahl von Systemen mit sich wiederholender Konfiguration gab und konfigurierbare Cookie-Cutter-Bereitstellungen durchgeführt werden mussten.


31
2018-05-01 14:58



Wenn die Kosten für die Verwaltung der Umgebung so hoch sind, dass das Management der Automatisierung wirklich billiger ist. Wenn es einfacher ist, in Git gemanagte Änderungen zu skripten oder Dinge in einem ssh-Multiplexer einzurichten, tun wir das. Am wichtigsten ist für mich, 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
@ewwhite "Wann beschließen Sie, nicht zu automatisieren" xkcd.com/1205 - MikeyB
Modernere Tools wie Ansible haben einen erheblich geringeren Implementierungs- / Verwaltungsaufwand als Chef oder Puppet und erfordern wenig bis keine Abhängigkeiten (insbesondere Ansible ist agentenlos). Dies senkt wirklich die Bar für die Annahme. - GomoX
@ewwhite Sie automatisieren, wenn Sie für die persönliche Produktivität möchten. Sie lernen durch Automatisierung, Sie lernen nicht, indem Sie alltägliche Aufgaben erledigen. Lernen = Produktivitätssteigerung und iterative Verbesserung. Die Automatisierung kombiniert damit mehr Positives. Es ist ein positiver Schneeball statt eines negativen. Technischer Fortschritt versus technische Schulden. - Derek Litz
@ A-B-B Nein, das ist nicht impliziert. Ich erwähne nicht einmal Shell-Skripte, ich erwähne Automatisierung als eine allgemeine Praxis. Sie können Dinge mit Shell-Skripten automatisieren und lernen die Abstraktion Abstraktion, anstatt Dinge manuell zu tun, was Ihnen nicht nur den Zeitaufwand für diese Aufgabe spart, sondern auch Fehler verhindert. Außerdem sollten Sie in der Lage sein, Ihr nächstes Skript etwas besser als das letzte zu schreiben. Ein positiver Schneeball ... Wenn Sie jedoch ein Experte beim Schreiben von Skripten sind und nicht etwas schreiben, das Sie jemals wieder ausführen, hilft es Ihnen nicht, Zeit zu gewinnen oder zu sparen. - Derek Litz


Du hast deine eigene Frage beantwortet ...

Die Automatisierung wird skalierbarer und formalisierter. Marionette und Chefkoch gelten heutzutage als Standard Stellenanzeigen).

Cobble-together Shell-Skripte haben ihren Platz, aber sie sind nicht skalierbar im Rahmen der DevOps-Bewegung. Lesbarkeit ist ein Teil davon.


23
2018-05-01 10:40



Sind Shell-Skripte irgendwie weniger formalisiert? Zitieren Jobanzeigen ein Argument überzeugend? Und ein Devops ist eine Schande, denn er / sie wird als Entwickler zu wenig genutzt. Der Link sagt nichts wirklich über Skalierbarkeit. Ist die Behauptung, dass Shell-Skripte nicht skalierbar sind? Ich denke, Marionette ist interessant, aber nicht unbedingt aus den Gründen in der Antwort. - A-B-B
Stellenanzeigen spiegeln den realen Markt für spezifische Fähigkeiten wider. Ja, die Verwendung des Konfigurationsmanagements für den vorgesehenen Zweck ist besser skalierbar, robuster und einfacher zu dokumentieren als Shell-Skripts. Ich bin in vielen Umgebungen gewesen, und die meisten Skripts, die ich sehe, sind nicht in einer Weise konstruiert, die man als "Produktionsqualität" bezeichnen würde und die dafür ausgelegt ist, Ausnahmen zu behandeln. Sehen Sie die akzeptierte Antwort, um zu verstehen, warum. - ewwhite
"Und ein Devops ist eine Schande, denn er / sie wird als Entwickler zu wenig genutzt." Das ist einfach nicht wahr. DevOps ist eine Entwicklungsspezialisierung, genau wie Web Development. Die Muster und Praktiken der Softwareentwicklung gelten weiterhin. Sie sollten über DevOps lesen. - Chaim Eliyah


Chef macht es viel einfacher zu verwalten und Ausführung das Einrichten einer komplexen Infrastruktur, insbesondere in jeder Art von Cloud-Umgebung, im Gegensatz zu dem manuellen ftp- oder scp-Zugriff auf eine Reihe von Shell-Skripten, die auf nicht standardisierte Weise organisiert sind. Je nachdem, wie viele Abhängigkeiten verwaltet werden müssen, kann die Größe dieses Gewinns stark variieren. Dies macht die Entscheidung für eine CM-Lösung für viele Menschen zu einer nicht offensichtlichen Lösung.

Der echte (oft unbesungene) Vorteil von Chefkoch ist Idempotenz. Sich unabhängig von der Kombination von Rezepten, die mit sich überschneidenden Interessen laufen, über den Status einer Ressource sicher zu sein, ist ein großer Vorteil gegenüber der Shell-Skriptkonfiguration. Wenn Sie jetzt Shell-Skripte für die Konfiguration haben, fragen Sie sich, wie viele davon ohne unbeabsichtigte / unerwünschte Konsequenzen mehrfach ausgeführt werden können?

Eine geeignete CM-Lösung trägt durch die Vereinfachung der plattformübergreifenden Automatisierung und der Teamzusammenarbeit zur Erzielung von Skalenerträgen bei. Es ist zwar möglich, all dies mit einer gut organisierten, ordnungsgemäß gepflegten, versionierten Gruppe von Shell-Skripten zu erreichen; du musst dich fragen "warum". Chef / Puppet und ähnliche Technologien kamen zustande, weil eine Gruppe talentierter SysOps es satt hatte, diese Probleme immer wieder zu lösen und uns eine bessere Option zu geben.

Schlüsselstücke:

  • Idempotenz
  • Leichtigkeit der Abhängigkeitsverwaltung (Versionierung)
  • Standardisierte Organisation (auf Branchenebene akzeptiert)
  • Abstraktion, um Serverkonfigurationsaufgaben von den Details auf Systemebene zu trennen
  • Fähigkeit, das Gemeinschaftswissen zu nutzen (das garantiert alle oben genannten Prinzipien)

13
2018-05-03 19:11



Idempotenz ist mit ss kaum unmöglich. Abhängigkeiten werden von yum / apt usw. gut verwaltet. Die Akzeptanz ist irrelevant. Gemeinschaftliches Wissen existiert für ss. Ich akzeptiere jedoch, dass es nicht sinnvoll ist, nicht mehrere Skripts zu kopieren und auch Systeme zentral zu konfigurieren. Ich höre Marionette erfordert einen Client-Agent. - A-B-B


Moderne Konfigurations-Management-Tools wie Puppet und Chef können Sie definieren Zustand eines Systems statt sich Sorgen zu machen Aktivitäten notwendig, um einen konfigurierten Server zu erreichen.

Zum Beispiel geht Ihr chmod-Befehl davon aus, dass die Datei existiert, der Benutzer, der die Datei besitzt, existiert, dass die Verzeichnisse erstellt wurden, und so weiter. Ihr Skript muss daher alle diese Voraussetzungen berücksichtigen.

State-based Konfigurations-Management-Tools sind einfacher: Sie nur darauf achten, dass die Datei die richtigen Berechtigungen hat. Wie das erreicht wird, ist das Problem des Werkzeugs.


10
2018-05-20 02:19



Eigentlich mein chmod geht nicht davon aus, dass die Datei existiert, weil die Datei entweder vom Skript erstellt wurde oder vom System getestet wurde. - A-B-B


Wenn Server für Sie verfügbar sind oder Sie mehr als ein Paar auf einmal aufstehen müssen, wird ein voll entwickeltes CM-System Ihre Anforderungen viel besser erfüllen als eine Reihe von Shell-Skripten.

Wenn Ihre Bauanforderungen bescheiden sind (oder handwerkliche Fairtrade-Server aus biologischem Freiland handwerklich in Handarbeit herstellen), dann halten Sie es einfach.

Persönlich, nachdem ich bei einem Konzert in der Vergangenheit Chefkoch ausgiebig benutzt hatte, versuchte ich bei diesem Konzert, "es einfach zu halten", aber ich vermisste wirklich die Primitiven, Abstraktionen und die Kraft, die der Chef zur Verfügung stellte. Selbst wenn Sie zu einer Situation kommen, in der Sie mit ein paar Shell-Befehlen das bekommen könnten, was Sie brauchen, können Sie diese einfach mit einem Befehlsblock ausführen und Ihre Shell-Befehle genau so eingeben, wie Sie sie in der Shell schreiben würden.

Wenn Sie das sagen, können Sie Chef ohne einen Server (Chef-Solo) führen, und ich bin mir ziemlich sicher, dass Puppet ein Analog hat, wo Sie immer noch die Kochbücher und Rezepte anderer nutzen können, ohne einen zentralen Server zu betreiben.

Ein weiterer Vorteil ist die Gemeinschaft: Es gibt eine Menge Leute (von denen viele klüger und / oder erfahrener sind als Sie). Persönlich liebe ich es, wenn jemand anderes meine Arbeit für mich erledigt hat, oft umfangreicher als ich es getan hätte.


9
2018-05-01 22:32





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

Ich bin mir sicher, dass ich nicht die erste bin, die ein solches Projekt macht, aber ich konnte nicht so etwas finden, das meinen Bedürfnissen entspricht, also dachte ich, dass andere das nützlich finden könnten. Ich hatte nur Erfahrung mit Chefkoch, aber als ich anfing, mich bei Ansible und anderen umzuschauen, wollte ich Shell-Skripte ausprobieren, und ich mag das Ergebnis bisher.


1
2017-12-25 01:15