Szukaj…


Wprowadzenie

Rój to szereg silników dokujących (lub węzłów ), które wspólnie wdrażają usługi . Swarm służy do dystrybucji przetwarzania na wiele maszyn fizycznych, wirtualnych lub chmurowych.

Składnia

Uwagi

Tryb roju ma następujące funkcje:

  • Zarządzanie klastrami zintegrowane z Docker Engine
  • Zdecentralizowany projekt
  • Deklaratywny model usługi
  • skalowanie
  • Pożądane uzgodnienie stanu
  • Sieć z wieloma hostami
  • Odkrycie usługi
  • Równoważenie obciążenia
  • Domyślnie bezpieczny projekt
  • Aktualizacje kroczące

Aby uzyskać bardziej oficjalną dokumentację Dockera dotyczącą wizyty Swarm : Omówienie trybu Swarm


Polecenia CLI w trybie roju

Kliknij opis poleceń, aby uzyskać dokumentację

Zainicjuj rój

docker swarm init [OPTIONS]

Dołącz do roju jako węzeł i / lub menedżer

docker swarm join [OPTIONS] HOST:PORT

Utwórz nową usługę

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Wyświetl szczegółowe informacje na temat jednej lub więcej usług

docker service inspect [OPTIONS] SERVICE [SERVICE...]

Lista usług

docker service ls [OPTIONS]

Usuń jedną lub więcej usług

docker service rm SERVICE [SERVICE...]

Skaluj jedną lub wiele replikowanych usług

docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]

Wymień zadania jednej lub więcej usług

docker service ps [OPTIONS] SERVICE [SERVICE...]

Zaktualizuj usługę

docker service update [OPTIONS] SERVICE

Utwórz rój w systemie Linux za pomocą maszyny dokującej i VirtualBox

# Create the nodes
# In a real world scenario we would use at least 3 managers to cover the fail of one manager.
docker-machine create -d virtualbox manager
docker-machine create -d virtualbox worker1

# Create the swarm
# It is possible to define a port for the *advertise-addr* and *listen-addr*, if none is defined the default port 2377 will be used.
docker-machine ssh manager \
    docker swarm init \
    --advertise-addr $(docker-machine ip manager)
    --listen-addr $(docker-machine ip manager)

# Extract the Tokens for joining the Swarm
# There are 2 different Tokens for joining the swarm.
MANAGER_TOKEN=$(docker-machine ssh manager docker swarm join-token manager --quiet)
WORKER_TOKEN=$(docker-machine ssh manager docker swarm join-token worker --quiet)


# Join a worker node with the worker token
docker-machine ssh worker1 \
    docker swarm join \
    --token $WORKER_TOKEN \
    --listen-addr $(docker-machine ip worker1) \
    $(docker-machine ip manager):2377



Znajdź token dołączenia do pracownika i menedżera

Podczas automatyzacji przydzielania nowych węzłów do roju, musisz wiedzieć, jaki jest właściwy token łączenia dla roju, a także podany w reklamie adres menedżera. Możesz to sprawdzić, uruchamiając następujące polecenia w dowolnym z istniejących węzłów menedżera:

# grab the ipaddress:port of the manager (second last line minus the whitespace)
export MANAGER_ADDRESS=$(docker swarm join-token worker | tail -n 2 |  tr -d '[[:space:]]')

# grab the manager and worker token
export MANAGER_TOKEN=$(docker swarm join-token manager -q)
export WORKER_TOKEN=$(docker swarm join-token worker -q)

Opcja -q wyświetla tylko token. Bez tej opcji otrzymasz pełne polecenie rejestracji w roju.

Następnie na nowo wyposażonych węzłach możesz dołączyć do roju za pomocą.

docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS

Aplikacja Hello World

Zwykle chcesz utworzyć stos usług, aby utworzyć replikowaną i zorganizowaną aplikację.

Typowa nowoczesna aplikacja internetowa składa się z bazy danych, interfejsu API, interfejsu użytkownika i odwrotnego proxy.

Trwałość

Baza danych wymaga trwałości, dlatego potrzebujemy systemu plików współdzielonego przez wszystkie węzły w roju. Może to być NAS, serwer NFS, GFS2 lub cokolwiek innego. Konfiguracja jest poza zakresem. Obecnie Docker nie zawiera i nie zarządza uporczywością w roju. W tym przykładzie założono, że istnieje /nfs/ shared location zamontowane we wszystkich węzłach.

Sieć

Aby móc się ze sobą komunikować, usługi w roju muszą znajdować się w tej samej sieci.

Wybierz zakres adresów IP (tutaj 10.0.9.0/24 ) i nazwę sieci ( hello-network ) i uruchom polecenie:

docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  --opt encrypted \
  hello-network

Baza danych

Pierwszą potrzebną usługą jest baza danych. Użyjmy postgresql jako przykładu. Utwórz folder bazy danych w nfs/postgres i uruchom to:

docker service create --replicas 1 --name hello-db \
       --network hello-network -e PGDATA=/var/lib/postgresql/data \
       --mount type=bind,src=/nfs/postgres,dst=/var/lib/postgresql/data \
       kiasaki/alpine-postgres:9.5

Zauważ, że użyliśmy opcji --network hello-network i --mount .

API

Tworzenie interfejsu API jest poza zakresem tego przykładu, więc udawajmy, że masz obraz interfejsu API pod username/hello-api .

docker service create --replicas 1 --name hello-api \
       --network hello-network \
       -e NODE_ENV=production -e PORT=80 -e POSTGRESQL_HOST=hello-db \
       username/hello-api

Zauważ, że przekazaliśmy nazwę naszej usługi bazy danych. Docker Swarm ma wbudowany okrągły serwer DNS, więc interfejs API będzie mógł łączyć się z bazą danych przy użyciu swojej nazwy DNS.

Odwrotny serwer proxy

Stwórzmy usługę nginx, aby obsługiwać nasze API w świecie zewnętrznym. Utwórz pliki konfiguracyjne nginx we wspólnej lokalizacji i uruchom to:

docker service create --replicas 1 --name hello-load-balancer \
       --network hello-network \
       --mount type=bind,src=/nfs/nginx/nginx.conf,dst=/etc/nginx/nginx.conf \
       -p 80:80 \
       nginx:1.10-alpine

Zauważ, że użyliśmy opcji -p do opublikowania portu. Ten port byłby dostępny dla dowolnego węzła w roju.

Dostępność węzła

Dostępność węzła trybu roju:

  • Aktywny oznacza, że planista może przypisywać zadania do węzła.
  • Pauza oznacza, że planista nie przypisuje nowych zadań do węzła, ale istniejące zadania pozostają uruchomione.
  • Opróżnianie oznacza, że planista nie przypisuje nowych zadań do węzła. Program planujący zamyka wszelkie istniejące zadania i planuje je w dostępnym węźle.

Aby zmienić dostępność trybu:

#Following commands can be used on swarm manager(s)
docker node update --availability drain node-1
#to verify:
docker node ls

Promuj lub obniżaj liczbę węzłów roju

Aby wypromować węzeł lub zestaw węzłów, uruchom docker node promote z węzła menedżera:

docker node promote node-3 node-2

Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

Aby obniżyć poziom węzła lub zestawu węzłów, uruchom docker node demote z węzła menedżera:

docker node demote node-3 node-2

Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

Opuszczając rój

Węzeł roboczy:

#Run the following on the worker node to leave the swarm.

docker swarm leave
Node left the swarm.

Jeśli węzeł pełni rolę Menedżera , pojawi się ostrzeżenie o utrzymaniu kworum Menedżerów. Możesz użyć opcji --force, aby wyjść z węzła menedżera:

#Manager Node

docker swarm leave --force
Node left the swarm.

Węzły, które opuściły Rój, nadal będą się wyświetlać w danych wyjściowych docker node ls .

Aby usunąć węzły z listy:

docker node rm node-2

node-2


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow