Verwenden von Chef für Operationen mit mehreren Knoten

7

Ich habe eine Anwendung, die ich mit Chef konfigurieren möchte und die mehrere Knoten umfasst. Nehmen wir an, der Prozess besteht darin

  1. Machen Sie etwas auf Knoten A, um die Ausgabe zu erfassen
  2. Machen Sie mit dieser Ausgabe etwas anderes auf Knoten B.
  3. Zurück zu Knoten A für einige Operationen
  4. Jetzt wieder auf Knoten B.
  5. ...

Eine Möglichkeit, dies zu tun, besteht darin, ein Rezept zu schreiben, in dem die Phase gespeichert ist, auf der es sich auf jedem Knoten befand, und es einfach wiederholt auf beiden Knoten auszuführen, bis es schließlich die Möglichkeit hatte, alle Operationen auf allen Knoten auszuführen. Dies ist jedoch umständlich und lässt sich nicht skalieren, wenn Knoten C, D usw. vorhanden sind. Ich weiß , wie man Abhängigkeiten innerhalb eines einzelnen Knotens benachrichtigt , aber das funktioniert nicht über mehrere Knoten hinweg. Ich kann nicht die einzige Person sein, die dies benötigt. Gibt es also einen Mechanismus oder ein Entwurfsmuster / Best Practice / TTP für diesen Aktivitätsstil?

Gaius
quelle

Antworten:

6

Kurz gesagt, Chefkoch ist möglicherweise nicht das Werkzeug, das hier verwendet werden kann.

Chefkoch ist ein konvergentes Modell, daher müssen Sie Ihre Rezepte auf idempotente Weise schreiben, z. B. nach einigen Läufen im gewünschten Zustand entsprechend den anderen Knoten in der Umgebung.

Ihr Ansatz zum Speichern des Status klingt nach dem richtigen Weg, und Sie müssen einen externen Orchestrator verwenden, um die Chef-Client-Läufe alternativ auf A und B zu planen.
Wenn Sie einen Chef-Server haben, können Push-Jobs der richtige Weg sein Der Hauptvorteil, den ich im Vergleich zu anderen Orchestratoren sehe, ist ein Pull-Modell, das weder einen eingehenden Verwaltungsport noch SSH auf den Zielknoten benötigt.

Tensibai
quelle
3

Dies ist ein Lehrbuchbeispiel für Server- Orchestrierung und etwas, das Chef von Natur aus nicht tun soll. Wie von Tensibai festgestellt, ist ein Server, auf dem Chef ausgeführt wird, ein konvergentes System, das auf der Grundlage von Konfigurationseinstellungen, die durch Rezepte, Attribute, Datentaschen usw. festgelegt wurden, seinen eigenen gewünschten Status erreicht in der Lage sein zu nehmen sind:

Erstellen Sie unabhängige idempotente Operationen

Wie Sie in Ihrer Frage angegeben haben, lässt sich das Erstellen eines Betriebszustands, in dem Ihre Knoten wiederholt ausgeführt werden können, bis alle Aufgaben abgeschlossen sind, nicht gut skalieren. Es kann jedoch möglich sein, Ihre Knoten so zu gestalten, dass es keine Rolle spielt. Wenn die Knoten a und b Aufgaben ausführen, um ihre Protokolle parallel auszugeben, und b vor a abgeschlossen wird, kann die Aufgabe ausgeführt werden, die Knoten a normalerweise ausführen würde, und umgekehrt.

Verwenden Sie einen externen Orchestrator für die Delegierung

Die Verwendung eines Delegatorknotens wird definitiv viel besser skaliert, wenn Sie beabsichtigen, viele Knoten zu orchestrieren. Dies kann jedoch zu Konflikten mit Ihren Chef-Client-Läufen auf den vom Delegator verwalteten Knoten führen. Es ist sehr schwierig zu überprüfen, ob Ihre Knotenkonfigurationen und die Aufgaben des Delegatorknotens nicht miteinander in Konflikt stehen. Eine clevere Möglichkeit, dies zu verwalten, könnte darin bestehen, die Aufgaben in die Konfiguration jedes Knotens einzubeziehen und den Delegator einen Wert in eine Datentasche oder ein Attribut des Servers festlegen zu lassen, um zu signalisieren, wie er sich selbst konfigurieren soll (dh welche Aufgaben er ausführen muss) ).

Kombinieren Sie Ihre Infrastruktur

Wenn jeder Knoten seine Aufgaben abhängig von den anderen Knoten seriell ausführt und Sie keine Kosten- / technischen Abhängigkeiten von der Ausführung von Aufgaben auf verschiedenen Knoten haben, sollten Sie Ihre Knotenkonfigurationen zu einem einzigen Knoten kombinieren. Dies würde alle Konfigurationskonflikte beseitigen, die zwischen einem Ihrer Knoten auftreten würden. Ich stelle mir vor, dass es klare Absichten gibt, Ihre Aufgaben auf verschiedenen Knoten auszuführen, aber dies ist definitiv eine Option, die in Betracht gezogen werden sollte (möglicherweise sogar auf Kosten der Zeit, um Aufgaben für verschiedene Knoten neu zu schreiben).

PrestonM
quelle
Könnte sein. Ich neige dazu, Orchestrierung eher als das Ausführen von Dingen zu betrachten als das anfängliche Einrichten von Dingen.
Gaius