Ich werde diese Antwort so ausrichten, als ob die Frage lautete "Was sind die Vorteile von Chef-Solo?", Weil ich auf diese Weise die Unterschiede zwischen den Ansätzen am besten erfassen kann.
Meine zusammenfassende Empfehlung stimmt mit anderen überein: Verwenden Sie einen Chef-Server, wenn Sie eine dynamische, virtualisierte Umgebung verwalten müssen, in der Sie häufig Knoten hinzufügen und entfernen. Ein Chef-Server ist auch eine gute CMDB , wenn Sie eine brauchen. Verwenden Sie Chef-Solo, wenn Sie eine weniger dynamische Umgebung haben, in der sich die Knoten nicht zu oft ändern, die Rollen und Rezepte jedoch. Größe und Komplexität Ihrer Umgebung sind mehr oder weniger irrelevant. Beide Ansätze lassen sich sehr gut skalieren.
Wenn Sie chef-solo bereitstellen, verwenden Sie einen Cronjob mit rsync, 'git pull' oder einem anderen idempotenten Dateiübertragungsmechanismus, um eine vollständige Kopie des chef-Repositorys auf jedem Knoten zu verwalten. Der Cronjob sollte einfach so konfigurierbar sein, dass er (a) überhaupt nicht ausgeführt wird und (b) ausgeführt wird, ohne jedoch das lokale Repository zu synchronisieren. Fügen Sie in Ihrem Chef-Repository einen Knoten / ein Verzeichnis mit einer JSON-Datei für jeden Knoten hinzu. Ihr Cronjob kann in Bezug auf die Identifizierung des richtigen Nodefiles so raffiniert sein, wie Sie möchten (obwohl ich einfach $ (hostname -s) .json empfehlen würde. Sie möchten möglicherweise auch ein Opscode-Konto erstellen und einen Client mit einem gehosteten Koch konfigurieren, wenn z Es gibt keinen anderen Grund, als in der Lage zu sein, mit knife Community-Kochbücher herunterzuladen und Skelette zu erstellen.
Dieser Ansatz bietet neben der offensichtlichen Tatsache, dass kein Server verwaltet werden muss, mehrere Vorteile. Ihre Quellcodeverwaltung ist der letzte Entscheidungsträger für alle Konfigurationsänderungen, das Repository enthält alle Knoten und Ausführungslisten, und jeder Server, der vollständig unabhängig ist, erleichtert einige praktische Testszenarien.
Chef-Server führt eine Lücke ein, in der Sie den "Messer-Upload" verwenden, um ein Kochbuch zu aktualisieren, und Sie müssen diese Lücke selbst patchen (z. B. mit einem Post-Commit-Haken) oder Änderungen an der Website riskieren, die unbemerkt von jemandem überschrieben werden, der "Messer-Upload" vornimmt. Es ist ein veraltetes Rezept aus dem veralteten lokalen Repository auf seinem Laptop. Dies ist bei chef-solo weniger wahrscheinlich, da alle Änderungen direkt aus dem Master-Repository mit den Servern synchronisiert werden. Hier geht es um Disziplin und Anzahl der Mitarbeiter. Wenn Sie ein Einzelentwickler oder ein sehr kleines Team sind, ist das Hochladen von Kochbüchern über die API nicht sehr riskant. In einem größeren Team kann es sein, dass Sie keine guten Kontrollen einsetzen.
Außerdem können Sie mit chef-solo alle Rollen, benutzerdefinierten Attribute und Runlists Ihrer Knoten als node.json-Dateien in Ihrem Haupt-Chef-Repository speichern. Mit chef-server werden Rollen und Runlists mithilfe der API im Handumdrehen geändert. Mit chef-solo können Sie diese Informationen in der Revisionskontrolle nachverfolgen. Hier ist der Konflikt zwischen statischen und dynamischen Umgebungen deutlich zu erkennen. Wenn sich Ihre Knotenliste (egal wie lang sie auch sein mag) nicht oft ändert, ist es sehr nützlich, diese Daten in der Versionskontrolle zu haben. Auf der anderen Seite ist es nur ein unnötiger Aufwand, wenn Sie häufig neue Knoten spawnen und alte Knoten zerstören (nie mehr den Hostnamen oder den FQDN zu sehen), und eine API zum Vornehmen von Änderungen ist sehr praktisch. Chef-Server verfügt über eine Reihe von Funktionen, die auch für die Verwaltung dynamischer Cloud-Umgebungen vorgesehen sind, wie z. B. die Namensoption in "knife bootstrap", mit der Sie fqdn als Standardmethode zum Identifizieren eines Knotens ersetzen können. In einer statischen Umgebung sind diese Funktionen jedoch nur von begrenztem Wert, insbesondere im Vergleich dazu, dass die Rollen und Runlists mit allen anderen Funktionen der Revisionskontrolle unterliegen.
Schließlich können Rezept-Testumgebungen für fast keine zusätzliche Arbeit im laufenden Betrieb eingerichtet werden. Sie können die auf einem Server ausgeführten Cronjobs deaktivieren und Änderungen direkt am lokalen Repository vornehmen. Sie können die Änderungen testen, indem Sie chef-solo ausführen und genau sehen, wie sich der Server in der Produktion selbst konfiguriert. Sobald alles getestet ist, können Sie die Änderungen einchecken und die lokalen Cronjobs wieder aktivieren. Wenn Sie jedoch Rezepte schreiben, können Sie die "Search" -API nicht verwenden. Wenn Sie also dynamische Rezepte (z. B. Loadbalancer) schreiben möchten, müssen Sie diese Einschränkung umgehen und die Daten aus den json-Dateien in sammeln Ihre Knoten / Verzeichnis, was wahrscheinlich weniger bequem ist und einige der in der vollständigen CMDB verfügbaren Daten fehlen wird. Erneut werden dynamischere Umgebungen den datenbankgestützten Ansatz bevorzugen. In weniger dynamischen Umgebungen sind JSON-Dateien auf der lokalen Festplatte in Ordnung. In einer Serverumgebung, in der ein Chef API-Aufrufe an eine zentrale Datenbank vornehmen muss, müssen Sie alle Testumgebungen in dieser Datenbank verwalten.
Letzteres kann auch in Notfällen eingesetzt werden. Wenn Sie ein kritisches Problem auf Produktionsservern beheben und es mit einer Konfigurationsänderung beheben, können Sie die Änderung sofort im Repository des Servers vornehmen und anschließend auf den Master übertragen.
Das sind die Hauptvorteile von Chef-Solo. Es gibt einige andere, zum Beispiel, dass man keinen Server verwalten oder für einen gehosteten Koch bezahlen muss, aber das sind relativ geringfügige Bedenken.
Zusammenfassend lässt sich sagen: Wenn Sie dynamisch und stark virtualisiert sind, bietet Chef-Server eine Reihe großartiger Funktionen (die an anderer Stelle behandelt werden), und die meisten Vorteile von Chef-Solo werden sich weniger bemerkbar machen. Chef-Solo bietet jedoch einige eindeutige, oft nicht erwähnte Vorteile, insbesondere in traditionelleren Umgebungen. Beachten Sie, dass die Bereitstellung in der Cloud nicht unbedingt bedeutet, dass Sie eine dynamische Umgebung haben. Wenn Sie beispielsweise Ihrem System keine weiteren Knoten hinzufügen können, ohne eine neue Version Ihrer Software zu veröffentlichen, sind Sie wahrscheinlich nicht dynamisch. Aus einer übergeordneten Perspektive kann eine CMDB für eine Reihe von Dingen nützlich sein, die nur einen tangentialen Bezug zur Systemadministration und -konfiguration haben, z. B. für die Abrechnung und den Informationsaustausch zwischen Teams. Der Einsatz von chef-server könnte sich allein schon für diese Funktion lohnen.