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).