Was sind die Vorteile von Chef-Server anstelle von Chef-Solo?

33

Ich suche nach automatisierten Bereitstellungslösungen für mein Team und spiele seit einigen Tagen mit Chef. Mit chef-solo konnte ich eine einfache Web-App von einer Red Hat-Basis-VM aus zum Laufen bringen.

Unser Endziel ist es, mithilfe von Chef (oder einem anderen System) automatisch Anwendungstopologien in der Cloud bereitzustellen, während wir Builds ausführen. Unser Prozess würde grundsätzlich so ablaufen:

  1. Unser Web-App-Code, Abhängigkeiten und Kochbücher sind in SCM gespeichert
  2. Ein Build wird ausgeführt und erstellt ein einzelnes Paket, mit dem Images erfasst und getestet werden können
  3. Die Build-Engine stellt dann neue Cloud-Images bereit, auf denen ein Chef-Client ausgeführt wird, um Pakete zu installieren.
  4. Die Images beziehen die Kochbücher von SCM oder dem Chef-Server und installieren alles, um einsatzbereit zu sein

Was sind die Vorteile und / oder Anwendungsfälle, um einen Chef Server zum Laufen zu bringen?

Gibt es wesentliche Vorteile, wenn ein Chef-Server die Kochbücher von SCM verwaltet und erwirbt, im Gegensatz zu Chef-Solo und einem Skript, mit dem die Kochbücher von SCM abgerufen werden?

linusthe3rd
quelle

Antworten:

67

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.

Goladus
quelle
Wie würden Sie sensible Daten (zB private Schlüssel / Passwörter) bei chef-solo speichern / verbreiten? Wie kann ich es mit der Versionskontrolle verfolgen, ohne es als Klartext zu speichern?
Limbo Peng
@LimboPeng Sie können verschlüsselte Datentaschen im Chef Repo speichern. Sie müssen den Verschlüsselungsschlüssel jedoch extern speichern.
Willie Wheeler
27

Offenlegung: Ich arbeite für Opscode.

Der Hauptvorteil von Chef Server gegenüber Solo ist die Möglichkeit, die Suche mit Ihrer Infrastruktur zu nutzen. Das klassische Beispiel ist ein Load Balancer mit Webservern. Der Lastenausgleich kann seine Konfiguration automatisch aktualisieren, wenn der Infrastruktur Webserver hinzugefügt und daraus entfernt werden, indem einfach danach gesucht wird. Solo ist genau das, einzelne Maschinen, während Chef Server die Möglichkeit bietet, nach Dingen wie "allen Maschinen mit mehr als 4 GB RAM" oder "dem Datenbank-Master" zu suchen.

Chef Server bietet Ihnen auch die Möglichkeit, Ihre Infrastruktur zu verwalten, ohne Tarballs zu kopieren, Ihre Infrastruktur mit der Verwaltungskonsole zu visualisieren und zu verwalten, auf welchen Computern welche Versionen von Kochbüchern mit Umgebungen ausgeführt werden. Es gibt noch andere Vorteile, aber diese fallen mir schwer. Wenn Sie den Chef Server ausprobieren möchten, ohne ihn zu installieren, melden Sie sich einfach für ein Opscode Hosted Chef-Konto an. Die ersten 5 Knoten sind kostenlos.

mray
quelle
1
Dank mray, diese Information hilft einer TON. Wissen Sie, wie man DevOps-Philosophien aufnimmt, wenn man den Chef-Server benutzt? Damit meine ich, dass alle unsere Kochbücher in SCM leben. Gibt es eine einfache Möglichkeit, dass Chef Server aktualisierte Kochbücher erhält, wenn wir neuen Code liefern?
Linusthe3rd
2
@ strife25 Du solltest auf jeden Fall deine Kochbücher in einem Versionskontrollsystem haben. Wenn Sie nicht verpflichtet sind, empfiehlt Opscode Git, da es einfach ist, mit Zweigen und Steinen für verteilte Teams zu arbeiten. Sie können einen Post-Commit-Hook schreiben, der Kochbücher auf den Chef-Server hochlädt. Sie klonen Kochbücher nicht nur auf dem Chef-Server, weil Sie sie über eine API hochladen, und dies ist beabsichtigt.
jtimberman
1

chef-server verwaltet Kochbücher und Konfigurationsdaten für Ihre Knoten.

Sie fügen Kochbücher mit dem Messertool zu chef-server hinzu und geben jedem Knoten eine Liste mit Rezepten, damit er die Kochbücher erhält, die er benötigt, wenn der Knoten sich mit chef-client einrichtet. Da chef-client im Hintergrund ausgeführt wird, überprüfen Ihre Knoten regelmäßig, ob auf Ihrem chef-server aktualisierte Kochbücher vorhanden sind.

chef-server speichert auch Ihre Konfigurationsdaten und -variablen, sodass Sie die Einstellungen ändern können, damit Ihre Knoten automatisch übernommen werden. Dies ist gut für dynamischere Einstellungen, die in Ihren Rezepten nicht fest codiert werden sollten oder können.

Andrew Vit
quelle