Beste Strategie, um Kochbuchversionen unter Kontrolle zu halten

10

Ich bin auf der Suche nach Ideen zur Verwaltung von Kochbuchversionen. Ich weiß, dass Sie bestimmte Versionen in der Umgebung anheften, bin mir aber nicht sicher, wie ich vorgehen soll.

Wir verwenden einen Bibliothekar-Koch, der Community-Bücher von Drittanbietern in den Kochbuchordner installiert. Wir berühren diese Bücher nie und aktualisieren sie von Zeit zu Zeit auf neuere Versionen.

Wir haben auch unsere benutzerdefinierten ortsspezifischen Kochbücher, aus denen wir Community-Kochbücher ( include_recipe) einschließen .

Theoretisch könnten wir bestimmte Versionen von Community-Büchern angeben, von denen unsere benutzerdefinierten Bücher abhängen, und dann unsere Kochbuchversionen in der Umgebungskonfiguration festlegen. Das Problem ist jedoch, dass diese Community-Bücher auf einige andere Bücher ohne bestimmte Versionen angewiesen sind. Und diese tief verschachtelte Abhängigkeit könnte weitergehen.

Es gibt also keine Garantie dafür, dass beim Hochladen eines Kochbuchs auf den Chef-Server das Produkt nicht beschädigt wird, da sich auch abhängige Kochbücher ändern können.

Die einzige Lösung, die ich derzeit sehen kann, besteht darin, jede einzelne Kochbuchversion anzugeben, die wir in der Umgebungskonfiguration verwenden, einschließlich Community- und benutzerdefinierter Versionen. Aber dann muss ich jedes Kochbuch durchgehen und diese Versionen herausfinden.

Von Zeit zu Zeit aktualisieren wir auch Bibliothekare und Köche. Ich kann mir vorstellen, dass es schwierig wird, geänderte Versionen aufzuspüren und nicht zu vergessen, die Version in der Umgebung zu aktualisieren, wenn es soweit ist.

Bitte teilen Sie Ihre Erfahrungen und Best Practices mit. Ich bin sicher, es wird für andere Leute sehr nützlich sein.

Gansbrest
quelle

Antworten:

11

Es dauerte nicht lange, bis ich anfing, Chef ernsthaft einzusetzen, und ich stieß auf dieselben Probleme. Ich kam erst zu einem Gefühl der Vernunft, als ich anfing, vier Dinge operativ zu erledigen. Beachten Sie, dass diese von einigen in der Chef-Community möglicherweise nicht als "Best Practices" angesehen werden. Trotzdem brachte ich auf diese Weise Vernunft, Wiederholbarkeit und Ordnung in meine Welt.

  1. Erstellen Sie Ihre eigenen Rezepte. Ich habe die Verwendung von Community-Kochbüchern ganz eingestellt und einfach meine eigenen Rezepte nach meinen Vorgaben erstellt. Auf diese Weise verwalte und kontrolliere ich meine eigenen Abhängigkeiten. Viele würden dagegen argumentieren, aber ehrlich gesagt - wenn ich zuerst einige der Opscode- und Community-Rezepte gelesen hätte, hätte ich wahrscheinlich nicht zuerst Chef als meine Lösung gewählt. Ich halte meine Rezepte einfach und im Einklang mit meiner Arbeitsweise. Ich habe genau null Community-Kochbücher in meinem Repository.
  2. Seien Sie diszipliniert über Upgrades. Wenn ich ein Rezept aktualisiere, stelle ich sicher, dass es überall funktioniert, und ich muss es überall bereitstellen, auch wenn es meinen Workflow stört und Reibung verursacht. Auf lange Sicht ist dies der Schlüssel zur geistigen Gesundheit des Küchenchefs. In extremen Fällen, wenn ich für einige Hosts Variationen benötige, z. B. eine Test- oder Produktionsumgebung, codiere ich sie in das Kochbuch. Meine Philosophie ist jedoch, dass die neueste Version jedes Kochbuchs überall dort sicher angewendet werden kann, wo sie benötigt werden.
  3. Verwenden Sie Chef Solo für alles. Alle paar Monate bekomme ich es irgendwie in den Kopf, dass ich versuchen sollte, Chef Server erneut zu verwenden. Die Community Edition verbessert sich, aber das ganze Paradigma scheint nie in meine Welt zu passen. Und jedes Mal, wenn ich es versuche, sehe ich mich selbst an und trete mich. Das Chef Server-Paradigma eignet sich für eine Welt mit langlebigen Servern, die häufige Systemwechsel erfordern. Ich nehme Systemänderungen so selten vor, dass es einfach albern ist, wenn meine Server ständig bei einem Chef-Server nach Updates suchen. Und ich habe weitaus bessere Tools, um sicherzustellen, dass meine Gastgeber gesund sind. Meine Arbeit befindet sich in einer Welt virtueller Einwegmaschinen, in der sie möglicherweise nur ein oder zwei Konfigurationsänderungen überleben. Ich verwende jetzt ausschließlich Chef Solo und übertrage Änderungen an meine Hosts, während ich genau die gleichen Kochbücher an alle Hosts weitergebe, die sie benötigen.
  4. Vermeiden Sie das Kompilieren von Software während der Ausführung von Chef. Der extremste (dh dümmste) Fall für mich war, jedes Mal, wenn ich eine neue Box bootete, Ruby-1.9.3 aus dem Quellcode zu kompilieren. Das Erstellen von benutzerdefinierten Paketen kann jedoch häufig zu Problemen führen. Als ich das hervorragende Tool fpm entdeckte , wurde es trivial, meine eigenen RPMs, Debs und Edelsteine ​​zu verpacken, und mein Leben wurde viel effizienter und einfacher.

Hoffe das hilft jemandem!

- UPDATE -

Fast drei Jahre später sind mir diese Grundsätze weiterhin hilfreich. Aber ich werde noch einen Ratschlag hinzufügen, und das aus den gleichen Gründen, aus denen ich Chef-Solo dem Chef vorgezogen habe.

  1. VERWENDEN SIE STATT ANSIBLE
Plattformen
quelle
3

Es gibt 2 Probleme:

  1. Verwalten von Kochbuchversionen in verschiedenen Umgebungsobjekten
  2. verwalten Rezept Version in Knoten run_list.

Der Artikel Grundlagen von Kochbuchversionenist die beste Referenz für Kochbuchversionen. Laut Nummer 1 haben Sie Recht, weil es schwierig ist, verschiedene Versionen von Kochbüchern zu verwalten, um unterschiedliche Konfigurationssätze bereitzustellen, insbesondere wenn es mit Kochbuchabhängigkeiten gemischt ist, bei denen die meisten Kochbücher von der Kochbuchseite diese Aufgabe nicht gut erledigen. Daher kann die Konfiguration unterbrochen werden. und wenn Sie die Versionen nicht durch Testen des Laufzeitverhaltens einer Komponente verwaltet haben, wird sie nur unterbrochen. Es ist daher eine schlechte Idee, ein Kochbuch hochzuladen, ohne die Versionsnummer in Ihrem Umgebungsobjekt anzugeben. Verwalten Sie daher die Kochbuchversionen im Umgebungsobjekt und testen Sie sie sorgfältig, wenn Sie die Version eines neuen Kochbuchs bewerben. Normalerweise verwalte ich das Umgebungsobjekt in SCM und lade es nicht über einen automatisierten Job auf den Chef-Server hoch, bis das geänderte Kochbuch gut mit anderen vorhandenen Komponenten zusammenarbeitet.

Laut # 2 ist es ein heikles Thema, da hier die eigentliche Rezeptabhängigkeit auf jedem Knoten funktioniert. Kurz gesagt, für kritische Knoten sollten Sie die Abhängigkeit von Rezepten besser steuern, indem Sie die Rezeptversion in der Knoten- / Rollenlaufliste angeben. Ich mache das kaum, weil es eine gute Körnungskontrolle ist und beim Testen / Fördern mehr kostet. Für kritische Rollen / Knoten ist dies jedoch keine schlechte Idee, sondern bietet eine Versicherung für Konfigurationsänderungen.

shawmzhu
quelle