Exécuter Docker Engine en mode swarm
Lorsque vous installez et commencez à travailler avec Docker Engine pour la première fois, le mode Swarm est
désactivé par défaut. Lorsque vous activez le mode Swarm, vous travaillez avec le concept de
services gérés via la commande docker service
.
Il y a deux façons d'exécuter le moteur en mode Swarm :
- Créer un nouveau swarm, couvert dans cet article.
- Rejoindre un swarm existant.
Lorsque vous exécutez le moteur en mode Swarm sur votre machine locale, vous pouvez créer et tester des services basés sur les images que vous avez créées ou d'autres images disponibles. Dans votre environnement de production, le mode Swarm fournit une plateforme tolérante aux pannes avec des fonctionnalités de gestion de cluster pour maintenir vos services en cours d'exécution et disponibles.
Ces instructions supposent que vous avez installé Docker Engine sur une machine pour servir de nœud gestionnaire dans votre swarm.
Si vous ne l'avez pas encore fait, lisez les concepts clés du mode Swarm et essayez le tutoriel du mode Swarm.
Créer un swarm
Lorsque vous exécutez la commande pour créer un swarm, Docker Engine commence à fonctionner en mode Swarm.
Exécutez
docker swarm init
pour créer un swarm à nœud unique sur le nœud actuel. Le moteur configure le swarm
comme suit :
- Bascule le nœud actuel en mode Swarm.
- Crée un swarm nommé
default
. - Désigne le nœud actuel comme nœud gestionnaire leader pour le swarm.
- Nomme le nœud avec le nom d'hôte de la machine.
- Configure le gestionnaire pour écouter sur une interface réseau active sur le port
2377
. - Définit le nœud actuel sur la disponibilité
Active
, ce qui signifie qu'il peut recevoir des tâches du planificateur. - Démarre un magasin de données distribué interne pour les moteurs participant au swarm afin de maintenir une vue cohérente du swarm et de tous les services qui s'exécutent dessus.
- Par défaut, génère une CA racine auto-signée pour le swarm.
- Par défaut, génère des jetons pour que les nœuds travailleurs et gestionnaires rejoignent le swarm.
- Crée un réseau overlay nommé
ingress
pour publier les ports de service externes au swarm. - Crée des adresses IP par défaut et un masque de sous-réseau pour vos réseaux
La sortie de docker swarm init
fournit la commande de connexion à utiliser lorsque
vous joignez de nouveaux nœuds travailleurs au swarm :
$ docker swarm init
Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Configuration des pools d'adresses par défaut
Par défaut, le mode Swarm utilise un pool d'adresses par défaut 10.0.0.0/8
pour les réseaux à portée globale (overlay). Chaque
réseau qui n'a pas de sous-réseau spécifié aura un sous-réseau alloué séquentiellement à partir de ce pool. Dans
certaines circonstances, il peut être souhaitable d'utiliser un pool d'adresses IP par défaut différent pour les réseaux.
Par exemple, si la plage par défaut 10.0.0.0/8
entre en conflit avec l'espace d'adresses déjà alloué dans votre réseau,
alors il est souhaitable de s'assurer que les réseaux utilisent une plage différente sans exiger que les utilisateurs swarm spécifient
chaque sous-réseau avec la commande --subnet
.
Pour configurer des pools d'adresses par défaut personnalisés, vous devez définir des pools lors de l'initialisation swarm en utilisant l'
option de ligne de commande --default-addr-pool
. Cette option de ligne de commande utilise la notation CIDR pour définir le masque de sous-réseau.
Pour créer le pool d'adresses personnalisé pour Swarm, vous devez définir au moins un pool d'adresses par défaut, et un masque de sous-réseau de pool d'adresses par défaut optionnel. Par exemple, pour le 10.0.0.0/27
, utilisez la valeur 27
.
Docker alloue les adresses de sous-réseau à partir des plages d'adresses spécifiées par l'option --default-addr-pool
. Par exemple, une option de ligne de commande --default-addr-pool 10.10.0.0/16
indique que Docker allouera des sous-réseaux à partir de cette plage d'adresses /16
. Si --default-addr-pool-mask-len
n'était pas spécifié ou explicitement défini à 24, cela résulterait en 256 réseaux /24
de la forme 10.10.X.0/24
.
The subnet range comes from the --default-addr-pool
, (such as 10.10.0.0/16
). The size of 16 there represents the number of networks one can create within that default-addr-pool
range. The --default-addr-pool
option may occur multiple times with each option providing additional addresses for docker to use for overlay subnets.
The format of the command is:
$ docker swarm init --default-addr-pool <IP range in CIDR> [--default-addr-pool <IP range in CIDR> --default-addr-pool-mask-length <CIDR value>]
The command to create a default IP address pool with a /16 (class B) for the 10.20.0.0
network looks like this:
$ docker swarm init --default-addr-pool 10.20.0.0/16
The command to create a default IP address pool with a /16
(class B) for the 10.20.0.0
and 10.30.0.0
networks, and to
create a subnet mask of /26
for each network looks like this:
$ docker swarm init --default-addr-pool 10.20.0.0/16 --default-addr-pool 10.30.0.0/16 --default-addr-pool-mask-length 26
In this example, docker network create -d overlay net1
will result in 10.20.0.0/26
as the allocated subnet for net1
,
and docker network create -d overlay net2
will result in 10.20.0.64/26
as the allocated subnet for net2
. This continues until
all the subnets are exhausted.
Refer to the following pages for more information:
- Swarm networking for more information about the default address pool usage
docker swarm init
CLI reference for more detail on the--default-addr-pool
flag.
Configure the advertise address
Manager nodes use an advertise address to allow other nodes in the swarm access to the Swarmkit API and overlay networking. The other nodes on the swarm must be able to access the manager node on its advertise address.
If you don't specify an advertise address, Docker checks if the system has a
single IP address. If so, Docker uses the IP address with the listening port
2377
by default. If the system has multiple IP addresses, you must specify the
correct --advertise-addr
to enable inter-manager communication and overlay
networking:
$ docker swarm init --advertise-addr <MANAGER-IP>
You must also specify the --advertise-addr
if the address where other nodes
reach the first manager node is not the same address the manager sees as its
own. For instance, in a cloud setup that spans different regions, hosts have
both internal addresses for access within the region and external addresses that
you use for access from outside that region. In this case, specify the external
address with --advertise-addr
so that the node can propagate that information
to other nodes that subsequently connect to it.
Refer to the docker swarm init
CLI reference
for more detail on the advertise address.
View the join command or update a swarm join token
Nodes require a secret token to join the swarm. The token for worker nodes is different from the token for manager nodes. Nodes only use the join-token at the moment they join the swarm. Rotating the join token after a node has already joined a swarm does not affect the node's swarm membership. Token rotation ensures an old token cannot be used by any new nodes attempting to join the swarm.
To retrieve the join command including the join token for worker nodes, run:
$ docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
This node joined a swarm as a worker.
To view the join command and token for manager nodes, run:
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-59egwe8qangbzbqb3ryawxzk3jn97ifahlsrw01yar60pmkr90-bdjfnkcflhooyafetgjod97sz \
192.168.99.100:2377
Pass the --quiet
flag to print only the token:
$ docker swarm join-token --quiet worker
SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
Be careful with the join tokens because they are the secrets necessary to join the swarm. In particular, checking a secret into version control is a bad practice because it would allow anyone with access to the application source code to add new nodes to the swarm. Manager tokens are especially sensitive because they allow a new manager node to join and gain control over the whole swarm.
We recommend that you rotate the join tokens in the following circumstances:
- If a token was checked-in by accident into a version control system, group chat or accidentally printed to your logs.
- If you suspect a node has been compromised.
- If you wish to guarantee that no new nodes can join the swarm.
Additionally, it is a best practice to implement a regular rotation schedule for any secret including swarm join tokens. We recommend that you rotate your tokens at least every 6 months.
Run swarm join-token --rotate
to invalidate the old token and generate a new
token. Specify whether you want to rotate the token for worker
or manager
nodes:
$ docker swarm join-token --rotate worker
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-2kscvs0zuymrsc9t0ocyy1rdns9dhaodvpl639j2bqx55uptag-ebmn5u927reawo27s3azntd44 \
192.168.99.100:2377