Gibt es eine Möglichkeit, die Ausführung einer Aufgabe auf bestimmten Knoten zu beschränken, ohne sie darauf einzuschränken?

Gibt es eine Möglichkeit, die Ausführung einer Aufgabe auf bestimmten Knoten zu beschränken, ohne sie darauf einzuschränken?

Ich verwende einen Docker Swarm, der mehrere Rechenzentren umfasst. Der Swarm läuft in einer „virtuellen privaten Cloud“.

Eines der am Setup beteiligten Rechenzentren hat eine etwas langsamere Verbindung als die anderen. Ich möchte vermeiden, dass in diesem Rechenzentrum ein besonders latenzempfindlicher Dienst geplant wird.

  • Ich kann Platzierungsbeschränkungen verwenden, aber das wirkt sich auf die Verfügbarkeit aus. Wenn das „langsame“ Rechenzentrum aus irgendeinem Grund das einzige ist, das läuft, stellen Beschränkungen sicher, dass der eingeschränkte Dienst in diesem Rechenzentrum nie eingeplant wird. Beeinflusst die Verfügbarkeit.
  • Ich kann Platzierungspräferenzen verwenden, aber das ist nur eine Präferenz. Wenn ich das Label lowlatencyallen Knoten außer denen im „langsamen“ Rechenzentrum hinzufüge, wird der Dienst möglicherweise trotzdem dort geplant. Es ist schließlich nur eine Präferenz.

Gibt es eine Möglichkeit, einen Dienst irgendwie auf bestimmte Knoten zu beschränken, Docker aber zu erlauben, den Dienst auf anderen Knoten zu planen, wenn die bevorzugten Knoten nicht verfügbar sind?

Antwort1

Nein, dies ist keine integrierte Funktion des Schwarmmodus.

Die einzige derzeit verfügbare Platzierungspräferenz besteht darin, die Arbeitslast auf die Werte eines Labels zu verteilen. Dies wird verwendet, um zu vermeiden, dass alle Replikate in einer einzigen Verfügbarkeitszone geplant werden, z. B. alle Arbeitslasten im selben Rack, Rechenzentrum usw. Es gibt keine Platzierungspräferenz, die wie eine weiche Einschränkung wirken würde.

Die andere verfügbare Option bei der Schwarmplanung ist eine Einschränkung, und zwar eine harte Einschränkung. Arbeitslasten werden nicht auf Knoten geplant, die der Einschränkung nicht entsprechen, selbst wenn dies bedeutet, dass sie nirgendwo geplant werden können und der Dienst ausgefallen bleibt.

Sie kommen Ihrem gewünschten Ziel am nächsten, indem Sie einen zusätzlichen Prozess ausführen, um den Ausfall aller anderen Rechenzentren zu erkennen und die Einschränkung Ihres Dienstes anzupassen. Ich vermute jedoch, dass dies zwei entsprechende Probleme mit sich bringen wird. Erstens haben Sie bei Ausfall der anderen Rechenzentren wahrscheinlich das Quorum mit Ihren Managern verloren, es wird keine Planungsaktivität stattfinden und Befehle an einen laufenden Manager werden aufgrund des Verlusts eines Leaders fehlschlagen. Und zweitens werden die Knoten im verbleibenden Rechenzentrum, wenn Sie ein Quorum haben, wahrscheinlich durch die anderen neu geplanten Workloads überlastet. Dies ist als das „Thundering Herd“-Problem bekannt, bei dem Sie CPU- und Speicheranforderungen für Ihre Container festlegen müssen. Diese Anforderungen würden die Planung neuer Jobs auf dem Knoten blockieren, um einen weiteren Ausfall zu vermeiden, und verhindern, dass Ihr geänderter Dienst einen Knoten mit Kapazität findet.

verwandte Informationen