Bearbeiten Diese Frage und Antwort sind Jahre alt. Die endgültigen Best Practices werden über die von Chef Software, Inc. entwickelten Lernmodule für die Rallye -Kochschulung vermittelt. Der Großteil der ursprünglichen Antwort befindet sich unten.
In dieser Antwort bezieht sich "Chef" oder "Chef-Kunde" normalerweise auf Chef Infra, das Produkt. Opscode wurde 2013 in Chef Software, Inc umbenannt . Im April 2019 öffnete Chef den Quellcode für alle seine Produkte und erstellte eine einheitliche Markenbezeichnung.
Nicht klar, ob es besser ist, Rollen in Ruby DSL, JSON oder über die Verwaltungskonsole einzurichten? Warum gibt es mehrere Möglichkeiten, dasselbe zu tun?
Update 2019 : Richtliniendateien sind der beste Workflow. Rollen gelten als minderwertig, und Chef Software, Inc. empfiehlt die Migration auf Richtliniendateien.
Es gibt mehrere Möglichkeiten, dasselbe zu tun, da die Benutzer unterschiedliche Workflows haben. Sie wählen den Workflow aus, der für Ihre Umgebung am besten geeignet ist. Lassen Sie mich die Unterschiede erklären, damit Sie eine fundierte Entscheidung treffen können.
Ruby DSL for Roles erleichtert das Schreiben von Rollen, ohne die Syntax von JSON zu kennen. Es ist eine einfache Möglichkeit, mit Rollen zu beginnen. Sobald Sie Änderungen vorgenommen haben, laden Sie diese mit knife auf den Chef Server hoch.
knife role from file myrole.rb
Dadurch wird die Rolle in JSON konvertiert und auf dem Server gespeichert. Wenn Sie eine Umgebung haben, die das Chef Repository erzwingt, in der Ihre Rollen als Quelle der Wahrheit fungieren, funktioniert dies recht gut.
JSON wird vom Chef Server gespeichert, sodass Sie JSON auch direkt in der Verwaltungskonsole bearbeiten können. Es sind mehr Felder als beim Ruby DSL erforderlich, damit Knife das Hochladen richtig erkennt. Diese Details werden in gewissem Maße über die Web-Benutzeroberfläche ausgeblendet.
Der Nachteil der Verwendung der Webui / Management-Konsole zum Bearbeiten von Rollen besteht darin, dass sie nicht in Ihrem lokalen Versionskontrollsystem vorhanden sind, es sei denn, Sie laden sie vom Server herunter. Sie können dies mit Messer tun:
knife role show myrole -Fj
Das -Fj
weist das Messer an, "im JSON-Format anzuzeigen". Sie können die Ausgabe auf Wunsch in eine .json-Datei umleiten.
Aktualisierung vor Jahren : Es gibt zusätzliche Messerbefehle für die Arbeit mit den Dateien im lokalen Chef-Repository. Derzeit unterstützen diese Befehle nur Dateien im JSON-Format. Es ist ein Community-RFC geöffnet, in dem das Hinzufügen von Unterstützung für Ruby DSL für diese Plugins behandelt wird. Hier ist eine kurze Zusammenfassung des Workflows.
Überprüfen Sie die inhaltlichen Unterschiede zwischen dem Server und der lokalen Datei.
knife diff roles/myrole.json
Laden Sie eine JSON-formatierte Rollendatei hoch. Der roles/
Pfad ist erforderlich. Dies wird demselben API-Endpunkt auf dem Server zugeordnet.
knife upload roles/myrole.json
Laden Sie den Inhalt vom Server herunter, indem Sie den Inhalt der Datei im Repository überschreiben.
knife download roles/myrole.json
Diese Befehle stammen aus knife-essentials
dem Chef-Client-Paket.
Können Sie Kochbücher in Unterverzeichnissen organisieren? ZB- Wir haben kundenspezifische Software, für die ich ein Kochbuch schreiben möchte und die in: chef-repo / cookbooks / ourcompanystuff / custom softwarecookbook enthalten ist. Wäre dies eine gute Übung?
Nein. Knife geht davon aus, wo sich Kochbücher befinden sollen, da es eine API verwendet, um Kochbücher auf den Server hochzuladen. Dies wird im knife.rb
mit eingestellt cookbook_path
. In älteren Versionen von Chef Infra konnten Sie eine Reihe von Pfaden für Kochbücher angeben. Dies wird jedoch nicht mehr empfohlen, da dies mehr Wartung erfordert und die Benutzer verwirrt.
Konventionell benennen wir kundenspezifische oder ortsspezifische Kochbücher mit dem im Kochbuchverzeichnis vorangestellten Namen. Für Ihr Beispiel wäre es:
chef-repo/cookbooks/ourcompany_customsoftware
Es gibt möglicherweise mehrere unterschiedliche Kochbücher für "ourcompany", je nachdem, was Sie tun.
Weitere Hinweise:
Erstelle ich ein Kochbuch für jeden Rollentyp, in dem angegeben ist, was er tut? Muss ich in diesen Kochbüchern auch andere Kochbücher angeben (dh das Kochbuch für meine Webserverrolle enthält das Apache-Kochbuch)? Ich bin mir nicht sicher, wie mit den Abhängigkeiten und der Vererbung von Kochbüchern umgegangen wird.
Es gibt keine direkte Beziehung oder Abhängigkeit zwischen Rollen und Kochbüchern.
Rollen haben eine Ausführungsliste, die die Rezepte und andere Rollen angibt, die auf jeden Knoten angewendet werden sollen, der diese Rolle hat. Knoten haben eine Ausführungsliste, die Rollen oder Rezepte enthalten kann. Wenn Chef auf dem Knoten ausgeführt wird, wird die Ausführungsliste für alle darin enthaltenen Rollen und Rezepte erweitert und anschließend die erforderlichen Kochbücher heruntergeladen. In einer Knotenlaufliste:
recipe[apache2]
Chef lädt das apache2
Kochbuch für den Knoten herunter, damit er dieses Rezept anwenden kann.
Möglicherweise verfügen Sie über ein spezielles Kochbuch für eine Rolle in Ihrer Infrastruktur. Üblicherweise gibt es Kochbücher, mit denen bestimmte Arten von Diensten wie Apache2, MySQL, Redis, Haproxy usw. eingerichtet werden können. Anschließend werden diese in die entsprechenden Rollen eingeteilt. Wenn Sie anwendungsspezifische Dinge haben, die passieren müssen, um eine Rolle zu erfüllen, können Sie diese in ein benutzerdefiniertes Kochbuch schreiben (wie oben beschrieben).
Weitere Hinweise:
Gibt es so etwas wie einen externen Knotenklassifikator für Puppen, damit Knoten ihre Rollen automatisch bestimmen?
"Ja." Der Chef Infra Server speichert die Knotendaten automatisch (in JSON), und der Server indiziert auch automatisch alle Knotendaten für die Suche.
Weitere Hinweise:
Wie es scheint, können Sie Dinge mit dem Messer oder in der Management-Konsole konfigurieren oder JSON-Dateien bearbeiten? Das ist super verwirrend für mich, warum es so viele Möglichkeiten gibt, Dinge zu tun, es ist lähmend! Gibt es einen Grund, den einen oder anderen zu benutzen?
Der Chef Infra Server verfügt über eine RESTful-API, die JSON-Antworten sendet und empfängt. Knife und die Verwaltungskonsole sind Benutzeroberflächen für die Interaktion mit der API aus administrativer Sicht.
Sie können das Tool verwenden, das Ihnen besser gefällt, obwohl die Verwaltungskonsole nicht so viele Funktionen bietet wie Knife. Die meisten Personen, die Chef Infra verwenden, bevorzugen die Befehlszeilenschnittstelle, da diese leistungsstark und flexibel ist. Dies gilt auch für Benutzer, die Chef Infra unter Windows verwenden. Darüber hinaus knife
handelt es sich um ein Plugin-basiertes Tool, mit dem Sie neue Plugins erstellen können, um mit dem Chef Infra Server oder mit anderen Teilen Ihrer Infrastruktur zu interagieren.
Chef Infra besteht aus einer Reihe von Bibliotheken, Grundelementen und einer API. Sie haben die Flexibilität, das für Ihre Infrastruktur am besten geeignete Konfigurationsmanagementsystem zu erstellen.
Weitere Lektüre:
Wie kann ich automatisch Knoten mit chef in meinem Entwicklercluster bereitstellen? Mit puppet starte ich eine VM, die sich mit dem puppermatser verbindet und einen Puppenlauf startet und sich selbst einrichtet (Rolle wird durch externen Knotenklassifikator bestimmt). Wie mache ich das mit dem Koch? - Installieren Sie chef mit pem / rb-Dateien, die es an einen chef-Server binden, teilen Sie dem Knoten manuell seine Rollen mit knife mit oder bearbeiten Sie diese in der Management-Oberfläche und starten Sie dann einen chef-client-Lauf, um sich einzurichten?
Sie sollten das Messer-Bootstrap-Plugin verwenden. Dies ist ein integriertes Plugin, das mit knife geliefert wird. Sie rufen es folgendermaßen auf:
knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'
Dieser Wille:
- SSH zum Zielsystem (10.1.1.112) als
root
Benutzer unter Verwendung eines SSH-Schlüssels (Sie könnten ssh als anderen Benutzer verwenden und dann --sudo
).
- Installieren Sie Ruby
- Installieren Sie Chef
- Erstellen Sie die Chef-Konfigurationsdatei für Ihren Chef-Server und lesen Sie die Konfiguration des Messers (.chef / knife.rb).
- Kopieren Sie den privaten RSA-Schlüssel "validation", den der Knoten verwendet, um sich automatisch beim Chef Server zu registrieren.
- Führen Sie
chef-client
durch das Zeichen Komma laufen angegeben aufgeführt. In diesem Beispiel wird nur die webserver
Rolle angewendet.
Dies setzt voraus, dass das Zielsystem bereitgestellt wurde, eine IP-Adresse hat und Sie SSH als Root verwenden können. Abhängig von Ihren lokalen Richtlinien und dem Bereitstellungsprozess müssen Sie möglicherweise die Funktionsweise anpassen. Die Messer-Bootstrap-Seite im Wiki beschreibt mehr darüber, wie dies funktioniert.
Knife verfügt auch über Plugins für eine Reihe von öffentlichen Cloud-Computing-Anbietern wie Amazon EC2 und Rackspace Cloud. Es gibt Plugins für private Cloud-Umgebungen wie Eucalyptus und OpenStack. Es gibt auch Plugins für VMware, Vsphere und andere. Weitere Informationen finden Sie in der Dokumentation.
Weitere Lektüre:
Gibt es noch andere gute Kochressourcen, die mir bei meinen Suchanfragen fehlen könnten?
Die Chef-Dokumentation ist die Hauptquelle der Dokumentation.
Die Learn Chef Rally ist eine Reihe von selbstgeführten Modulen, in denen Sie alles über verschiedene Aspekte von Chef Infra und anderen Chef-Produkten lernen können.
Früher pflegte ich einen Blog, in dem ich Tipps, Tricks und Anleitungen zu Chef Infra veröffentlichte: http://jtimberman.housepub.org/ . Ich hatte eine Serie mit dem Titel " Quick Tips ". Aufgrund realer Umstände und anderer Verpflichtungen habe ich keine Zeit mehr, die Website zu warten, aber ich werde möglicherweise in Zukunft darauf zurückgreifen.
Chefkunden erhalten Hilfe und Support auf der Support-Website:
Die Benutzer-Community von Chef ist eine hervorragende Quelle für zusätzliche Hilfe:
Zusätzliche Mittel sind auf Chef Software, Inc. auf der Website .
Ich hoffe das hilft.