Ricerca…


introduzione

Uno sciame è un numero di Docker Engines (o nodi ) che distribuiscono servizi collettivamente. Swarm viene utilizzato per distribuire l'elaborazione su molte macchine fisiche, virtuali o cloud.

Sintassi

Osservazioni

La modalità Sciame implementa le seguenti funzionalità:

  • Gestione dei cluster integrata con Docker Engine
  • Design decentralizzato
  • Modello di servizio dichiarativo
  • scalata
  • Riconciliazione di stato desiderata
  • Rete multi-host
  • Scoperta del servizio
  • Bilancio del carico
  • Design sicuro per impostazione predefinita
  • Aggiornamenti a rotazione

Per ulteriori informazioni sulla documentazione ufficiale di Docker in merito alla visita di Swarm : panoramica sulla modalità Swarm


Comandi CLI della modalità scia

Fare clic sulla descrizione dei comandi per la documentazione

Inizializza uno sciame

docker swarm init [OPTIONS]

Unisciti a uno sciame come nodo e / o manager

docker swarm join [OPTIONS] HOST:PORT

Crea un nuovo servizio

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

Visualizza informazioni dettagliate su uno o più servizi

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

Elenco dei servizi

docker service ls [OPTIONS]

Rimuovere uno o più servizi

docker service rm SERVICE [SERVICE...]

Scala uno o più servizi replicati

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

Elencare le attività di uno o più servizi

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

Aggiorna un servizio

docker service update [OPTIONS] SERVICE

Crea uno sciame su Linux usando docker-machine e 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



Scopri i token di join di worker e manager

Quando si automatizza il provisioning di nuovi nodi su uno sciame, è necessario sapere qual è il giusto token di join sia per lo sciame che per l'indirizzo pubblicizzato del gestore. Puoi scoprirlo eseguendo i seguenti comandi su uno dei nodi del gestore esistente:

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

L'opzione -q emette solo il token. Senza questa opzione si ottiene il comando completo per la registrazione a uno sciame.

Quindi su nodi appena sottoposti a provisioning, puoi unirti allo sciame usando.

docker swarm join --token $WORKER_TOKEN $MANAGER_ADDRESS

Ciao domanda mondiale

Di solito vorresti creare una serie di servizi per formare un'applicazione replicata e orchestrata.

Una tipica applicazione Web moderna è costituita da un database, api, frontend e reverse proxy.

Persistenza

Il database ha bisogno di persistenza, quindi abbiamo bisogno di un filesystem condiviso su tutti i nodi di uno sciame. Può essere NAS, server NFS, GFS2 o qualsiasi altra cosa. L'impostazione è fuori portata qui. Attualmente Docker non contiene e non gestisce la persistenza in uno sciame. Questo esempio presuppone che ci sia /nfs/ posizione condivisa montata su tutti i nodi.

Rete

Per essere in grado di comunicare tra loro, i servizi in uno sciame devono essere sulla stessa rete.

Scegli un intervallo IP (qui 10.0.9.0/24 ) e il nome della rete ( hello-network ) ed esegui un comando:

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

Banca dati

Il primo servizio di cui abbiamo bisogno è un database. Usiamo postgresql come esempio. Crea una cartella per un database in nfs/postgres ed esegui questo:

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

Nota che abbiamo usato le --network hello-network e --mount .

API

La creazione dell'API non rientra nell'ambito di questo esempio, quindi facciamo finta di avere un'immagine API sotto 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

Si noti che abbiamo passato un nome al nostro servizio di database. Docker swarm ha un server DNS round robin incorporato, quindi l'API sarà in grado di connettersi al database usando il suo nome DNS.

Reverse proxy

Creiamo il servizio nginx per servire la nostra API in un mondo esterno. Creare i file di configurazione di nginx in un percorso condiviso ed eseguire questo:

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

Si noti che abbiamo usato l'opzione -p per pubblicare una porta. Questa porta sarebbe disponibile per qualsiasi nodo in uno sciame.

Nodo Disponibilità

Disponibilità del nodo modalità sciame:

  • Attivo significa che lo schedulatore può assegnare compiti a un nodo.
  • Pausa indica che lo scheduler non assegna nuove attività al nodo, ma le attività esistenti rimangono in esecuzione.
  • Scarico indica che lo scheduler non assegna nuove attività al nodo. Lo scheduler chiude tutte le attività esistenti e le pianifica su un nodo disponibile.

Per cambiare la disponibilità della modalità:

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

Promuovi o abbassa i nodi dello sciame

Per promuovere un nodo o un insieme di nodi, eseguire il docker node promote da un nodo gestore:

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.

Per abbassare di livello un nodo o un set di nodi, eseguire il docker node demote da un nodo gestore:

docker node demote node-3 node-2

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

Lasciando lo Sciame

Nodo lavoratore:

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

docker swarm leave
Node left the swarm.

Se il nodo ha il ruolo Manager , riceverai un avviso sul mantenimento del quorum dei Manager. Puoi usare --force per lasciare sul nodo manager:

#Manager Node

docker swarm leave --force
Node left the swarm.

I nodi che hanno lasciato lo Swarm verranno comunque visualizzati nell'output del docker node ls .

Per rimuovere i nodi dall'elenco:

docker node rm node-2

node-2


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow