Zoeken…


Invoering

Een zwerm is een aantal Docker Engines (of nodes ) die diensten gezamenlijk inzetten. Zwerm wordt gebruikt om de verwerking te verspreiden over vele fysieke, virtuele of cloud-machines.

Syntaxis

Opmerkingen

Zwermmodus implementeert de volgende functies:

  • Clusterbeheer geïntegreerd met Docker Engine
  • Gedecentraliseerd ontwerp
  • Declaratief servicemodel
  • scaling
  • Gewenste staatsverzoening
  • Multi-host netwerken
  • Service ontdekking
  • Load balancing
  • Standaard beveiligd ontwerp
  • Rolling updates

Ga voor meer officiële Docker-documentatie over Swarm naar: Overzicht zwermmodus


Zwermmodus CLI-opdrachten

Klik op opdrachtenbeschrijving voor documentatie

Initialiseer een zwerm

docker swarm init [OPTIONS]

Word lid van een zwerm als een knooppunt en / of manager

docker swarm join [OPTIONS] HOST:PORT

Maak een nieuwe service

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

Toon gedetailleerde informatie over een of meer services

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

Lijst met services

docker service ls [OPTIONS]

Verwijder een of meer services

docker service rm SERVICE [SERVICE...]

Schaal een of meerdere gerepliceerde services

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

Lijst de taken van een of meer services

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

Update een service

docker service update [OPTIONS] SERVICE

Maak een zwerm op Linux met behulp van docker-machine en 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



Ontdek werknemer en manager join token

Wanneer u de levering van nieuwe knooppunten aan een zwerm automatiseert, moet u weten wat het juiste join-token is voor de zwerm en het geadverteerde adres van de manager. U kunt dit vinden door de volgende opdrachten uit te voeren op elk van de bestaande beheerknooppunten:

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

De optie -q voert alleen het token uit. Zonder deze optie krijgt u de volledige opdracht voor het registreren bij een zwerm.

Vervolgens kun je op nieuw ingerichte knooppunten met de zwerm meedoen via.

docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS

Hallo wereld applicatie

Gewoonlijk wilt u een stapel services maken om een gerepliceerde en georkestreerde toepassing te vormen.

Een typische moderne webapplicatie bestaat uit een database, api, frontend en reverse proxy.

volharding

Database heeft persistentie nodig, dus we hebben een bestandssysteem nodig dat wordt gedeeld over alle knooppunten in een zwerm. Het kan NAS, NFS-server, GFS2 of iets anders zijn. Het instellen valt hier buiten het bereik. Momenteel bevat Docker geen volharding in een zwerm en beheert deze niet. In dit voorbeeld wordt ervan uitgegaan dat er /nfs/ shared location is gemonteerd op alle knooppunten.

Netwerk

Om met elkaar te kunnen communiceren, moeten services in een zwerm zich op hetzelfde netwerk bevinden.

Kies een IP-bereik (hier 10.0.9.0/24 ) en netwerknaam ( hello-network ) en voer een opdracht uit:

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

Database

De eerste service die we nodig hebben is een database. Laten we postgresql als voorbeeld gebruiken. Maak een map voor een database in nfs/postgres en voer dit uit:

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

Merk op dat we --network hello-network en --mount opties hebben gebruikt.

API

Het maken van API valt buiten het bereik van dit voorbeeld, dus laten we doen alsof u een API-afbeelding hebt onder 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

Merk op dat we een naam van onze database-service hebben doorgegeven. Docker-zwerm heeft een ingesloten round-robin DNS-server, zodat API verbinding kan maken met de database met behulp van de DNS-naam.

Omgekeerde proxy

Laten we de nginx-service maken om onze API aan een buitenwereld te bieden. Maak nginx-configuratiebestanden op een gedeelde locatie en voer dit uit:

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

Merk op dat we de optie -p hebben gebruikt om een poort te publiceren. Deze poort zou beschikbaar zijn voor elk knooppunt in een zwerm.

Knooppunt Beschikbaarheid

Beschikbaarheid zwermmodus:

  • Actief betekent dat de planner taken kan toewijzen aan een knooppunt.
  • Pauze betekent dat de planner geen nieuwe taken aan het knooppunt toewijst, maar bestaande taken actief blijven.
  • Drain betekent dat de planner geen nieuwe taken aan het knooppunt toewijst. De planner sluit alle bestaande taken af en plant deze op een beschikbaar knooppunt.

Om de beschikbaarheid van de modus te wijzigen:

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

Zwermknooppunten promoten of degraderen

Om een knooppunt of een reeks knooppunten te promoten, voert u docker node promote uit vanaf een managerknooppunt:

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.

Als u een knooppunt of een reeks knooppunten wilt degraderen, voert u docker node demote uit vanaf een beheerknooppunt:

docker node demote node-3 node-2

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

De zwerm verlaten

Werknemersknooppunt:

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

docker swarm leave
Node left the swarm.

Als het knooppunt de rol Manager heeft, krijgt u een waarschuwing over het handhaven van het quorum van managers. Je kunt --force gebruiken om op het managerknooppunt te vertrekken:

#Manager Node

docker swarm leave --force
Node left the swarm.

Knopen die de zwerm hebben verlaten, worden nog steeds weergegeven in de uitvoer van docker node ls .

Knopen uit de lijst verwijderen:

docker node rm node-2

node-2


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow