wake-up-neo.net

docker swarm - Wie balancieren Sie bereits laufende Container in einem Swarm-Cluster

Ich habe einen Docker-Schwarmcluster mit 2 Knoten in AWS. Ich habe die beiden Instanzen gestoppt und zunächst den Swarm Manager und dann den Worker gestartet. Bevor die Instanzen gestoppt wurden, hatte ich einen Dienst mit 4 Replikaten, die auf Manager und Arbeiter verteilt waren.
Beim ersten Start des Swarm-Manager-Knotens wurden alle Replikatcontainer auf Manager selbst gestartet und nicht auf den Worker verschoben.
Bitte sagen Sie mir, wie man Lastverteilung macht.
Ist der Schwarmmanager nicht dafür verantwortlich, wenn der Arbeiter anfing?

4
VENKAT

Swarm derzeit (18.03) verschiebt oder ersetzt keine Container, wenn neue Knoten gestartet werden, wenn sich die Dienste standardmäßig im "replizierten Modus" befinden. Dies ist beabsichtigt. Wenn ich einen neuen Knoten hinzufügen würde, möchte ich nicht unbedingt, dass eine Reihe anderer Container gestoppt und neue auf meinem neuen Knoten erstellt werden. Swarm stoppt Container nur dann, wenn sie Replikate "verschieben" müssen (im replizierten Modus).

docker service update --force <servicename> verteilt einen Dienst auf alle Knoten, die seine Anforderungen und Einschränkungen erfüllen.

Weitere Ratschläge: Wie bei anderen Container-Orchestrierern müssen Sie Kapazität für Ihre Knoten bereitstellen, um die Workloads von Service-Replikaten zu handhaben, die sich während eines Ausfalls bewegen. Ihre freie Kapazität sollte dem Umfang der von Ihnen geplanten Redundanz entsprechen. Wenn Sie beispielsweise die Kapazität für zwei Knoten behandeln möchten, die gleichzeitig ausfallen, benötigen Sie auf allen Knoten einen Mindestprozentsatz an Ressourcen, damit diese Workloads zu anderen Knoten wechseln können.

11
Bret Fisher

In docker-compose.yml können Sie Folgendes definieren:

version: "3"

services:

  app:
    image: repository/user/app:latest
    networks:
      - net
    ports:
      - 80
    deploy:
      restart_policy:
        condition: any
      mode: replicated
      replicas: 5
      placement:
        constraints: [node.role == worker]
      update_config:
        delay: 2s

Anmerkung: Die Einschränkung lautet node.role == worker 

Wenn Sie das Flag "- replicas" verwenden, ist es uns egal, auf welchem ​​Knoten sie angelegt werden. Wenn Sie einen Dienst pro Knoten wünschen, können Sie stattdessen "- mode = global" verwenden.

In Docker 1.13 und höher können Sie das Flag "--force" oder "-f" mit dem Befehl "Docker Service Update" verwenden, um zu erzwingen, dass der Service seine Aufgaben auf die verfügbaren Arbeiterknoten verteilt. </ B>

1
abv2014

Swarm führt keine automatische Balancierung durch, wenn Container erstellt werden. Sie können das Skalieren auf/ab erhöhen, wenn alle Ihre Mitarbeiter bereit sind, und die Container werden entsprechend Ihren Konfigurationsanforderungen/Rollen/etc verteilt.

siehe: https://github.com/moby/moby/issues/24103

Es gibt Probleme mit neuen Knoten, die "überfallen" werden, wenn sie hinzugefügt werden . Wir vermeiden auch das Vorkommen von gesunden Aufgaben. Rebalancing wird über .__ abgeschlossen. Zeit, anstatt Arbeitsprozesse zu töten. Vorkaufsrecht ist für die Zukunft betrachtet.

Als Problemumgehung sollte das Skalieren eines Dienstes nach oben und nach unten die Aufgaben. Sie können auch ein laufendes Update auslösen, da dies eine Neuplanung von __. neue Aufgaben.

1
ldg