2016-11-25 2 views
4

sagen, dass wir in Schwarm-Modus und wir haben drei Knoten arbeiten:Docker Schwarm laufen Aufgaben nur bei Arbeitern

  • manager1
  • worker1
  • worker2

Ist es möglich, zu schaffen einen Dienst und geben Sie an, dass die Aufgaben nur in den Worker (worker1 und worker2) und nicht in den Managern (manager1) ausgeführt werden müssen

Ich verwende den folgenden Befehl, um den Dienst zu erstellen:

docker-machine ssh manager1 "docker service create --network dognet --name dog-db redis" 

und wenn ich ps der Service:

docker-machine ssh manager1 "docker service ps dog-db" 

ich:

ID       NAME  IMAGE NODE  DESIRED STATE CURRENT STATE   ERROR 
3kvfpbhl6fj0qwtglc5k7sbkw dog-db.1 redis manager1 Running  Preparing 4 seconds ago 

Antwort

6

Während Sie Einschränkungen nutzen können (mit --constraint node.role=worker) eine Untergruppe von Knoten auf ihre Rolle (Manager oder Arbeiter) auf der Grundlage zu beseitigen, würde ich so weit gehen, wie die Deaktivierung Manager (n) aus, wie Arbeiter wirkende (n) mit:

# Disables the Manager as a Worker node 

docker node update --availability drain manager1 

die Idee ist, dass der Manager sollte über Ressourcenüberlastung (CPU, RAM, fds) sicher aufbewahrt werden, dass, wenn die Ressourcen verwendet passieren könnte durch bereitstellen d-Dienste sind höher als die auf einem Manager verfügbaren Ressourcen. Es kann ein Fehlerkaskadierungsszenario auslösen, und der Cluster könnte sehr instabil werden (oder auf keine weiteren Anforderungen reagieren).

Der Manager verwaltet im Wesentlichen kritische Komponenten (z. B. Zertifikatausgabe und -rotation, verteilter Datenspeicher, Netzwerk). Es wäre daher schlecht, den gesamten Cluster instabil zu machen, da den Managern Ressourcen ausgehen.

verwandte Fragen:

Quelle: Ich war ein Betreuer des Docker Swarm und schrieb den Administration Guide für Swarm-Modus.

+0

Dies funktioniert gut, um meine Dienste auf nur Arbeitsknoten zu implementieren, keine Einschränkung erforderlich! – Cotton

+0

Es wird die Zuweisung einer Aufgabe zum Schwarm-Manager übersprungen. Aber ich möchte meinen Schwarm mit Portainer verwalten, mit dem man den Schwarmmanager verwalten kann. Es wird auch nicht möglich sein, einen Portainer bereitzustellen. – Nitul

4

Ja, können Sie einen Dienst einschränken basierend auf der Knotenrolle. Ändern Sie Ihren Befehl:

docker service create --network dognet --constraint node.role==worker --name dog-db redis

+0

Während mein Weg gut funktioniert, ist Abronans Antwort jetzt mein bevorzugter Weg. – johnharris85

Verwandte Themen