mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
add run swarm mode guide
Signed-off-by: Charles Smith <charles.smith@docker.com>
This commit is contained in:
parent
aeea20f51e
commit
c406711cc0
2 changed files with 261 additions and 0 deletions
131
docs/swarm/join-nodes.md
Normal file
131
docs/swarm/join-nodes.md
Normal file
|
@ -0,0 +1,131 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
title = "Join nodes to a swarm"
|
||||
description = "Add worker and manager nodes to a swarm"
|
||||
keywords = ["guide, swarm mode, node"]
|
||||
advisory = "rc"
|
||||
[menu.main]
|
||||
identifier="join-nodes-guide"
|
||||
parent="engine_swarm"
|
||||
weight=13
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Join nodes to a swarm
|
||||
|
||||
When you first create a swarm, you place a single Docker Engine (Engine) into
|
||||
swarm mode. To take full advantage of swarm mode you can add nodes to the swarm:
|
||||
|
||||
* Adding worker nodes increases capacity. When you deploy a service to a swarm,
|
||||
the Engine schedules tasks on available nodes whether they are worker nodes or
|
||||
manager nodes. When you add workers to your swarm, you increase the scale of
|
||||
the swarm to handle tasks without affecting the manager raft consenus.
|
||||
* Manager nodes increase fault-tolerance. Manager nodes perform the
|
||||
orchestration and cluster management functions for the swarm. Among manager
|
||||
nodes, a single leader node conducts orchestration tasks. If a leader node
|
||||
goes down, the remaining manager nodes elect a new leader and resume
|
||||
orchestration and maintenance of the swarm state. By default, manager nodes
|
||||
also run tasks.
|
||||
|
||||
Before you add nodes to a swarm you must install Docker Engine 1.12 or later on
|
||||
the host machine.
|
||||
|
||||
## Join as a worker node
|
||||
|
||||
To retrieve the join command including the join token for worker nodes, run the
|
||||
following command on a manager node:
|
||||
|
||||
```bash
|
||||
$ 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
|
||||
```
|
||||
|
||||
Run the command from the output on the worker to join the swarm:
|
||||
|
||||
```bash
|
||||
$ docker swarm join \
|
||||
--token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
|
||||
192.168.99.100:2377
|
||||
|
||||
This node joined a swarm as a worker.
|
||||
```
|
||||
|
||||
The `docker swarm join` command does the following:
|
||||
|
||||
* switches the Docker Engine on the current node into swarm mode.
|
||||
* requests a TLS certificate from the manager.
|
||||
* names the node with the machine hostname
|
||||
* joins the current node to the swarm at the manager listen address based upon the swarm token.
|
||||
* sets the current node to `Active` availability, meaning it can receive tasks
|
||||
from the scheduler.
|
||||
* extends the `ingress` overlay network to the current node.
|
||||
|
||||
### Join as a manager node
|
||||
|
||||
When you run `docker swarm join` and pass the manager token, the Docker Engine
|
||||
switches into swarm mode the same as for workers. Manager nodes also participate
|
||||
in the raft consensus. The new nodes should be `Reachable`, but the existing
|
||||
manager will remain the swarm `Leader`.
|
||||
|
||||
Docker recommends three or five manager nodes per cluster to implement high
|
||||
availability. Because swarm mode manager nodes share data using Raft, there
|
||||
must be an odd number of managers. The swarm can continue to function after as
|
||||
long as a quorum of more than half of the manager nodes are available.
|
||||
|
||||
For more detail about swarm managers and administering a swarm cluster, see
|
||||
[Administer and maintain a swarm of Docker Engines](admin_guide.md).
|
||||
|
||||
To retrieve the join command including the join token for manager nodes, run the
|
||||
following command on a manager node:
|
||||
|
||||
```bash
|
||||
$ docker swarm join-token manager
|
||||
|
||||
To add a manager to this swarm, run the following command:
|
||||
docker swarm join \
|
||||
--token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
|
||||
192.168.99.100:2377
|
||||
```
|
||||
|
||||
Run the command from the output on the manager to join the swarm:
|
||||
|
||||
```bash
|
||||
$ docker swarm join \
|
||||
--token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
|
||||
192.168.99.100:2377
|
||||
|
||||
This node joined a swarm as a manager.
|
||||
```
|
||||
|
||||
<!--TODO WIP
|
||||
Manager nodes use the listen address for cluster management communications. The
|
||||
other nodes on the swarm must be able to access the manager node on the
|
||||
IP address and port you specify for the listen address.
|
||||
|
||||
Especially when there are multiple active network interfaces, you should
|
||||
you explicitly define the listen address when you add a manager node to the a
|
||||
swarm:
|
||||
|
||||
```bash
|
||||
docker swarm join \
|
||||
--token <MANAGER-TOKEN> \
|
||||
--listen-addr <NODE-IP>:<PORT> \
|
||||
<MANAGER-IP>:<PORT>
|
||||
```
|
||||
this will change for https://github.com/docker/docker/pull/24237 ->>
|
||||
Replace <NODE-IP> with the IP address of the node that is joining the swarm.
|
||||
Replace <MANAGER-IP> with the address of the swarm manager.
|
||||
|
||||
Only manager nodes use the listen address. If you specify `--listen-addr` for a
|
||||
worker node, the node only uses the listen address if it is promoted to a
|
||||
manager.
|
||||
-->
|
||||
|
||||
## Learn More
|
||||
|
||||
* `swarm join`[command line reference](../reference/commandline/swarm_join.md)
|
||||
* [Swarm mode tutorial](swarm-tutorial/index.md)
|
130
docs/swarm/swarm-mode.md
Normal file
130
docs/swarm/swarm-mode.md
Normal file
|
@ -0,0 +1,130 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
title = "Run Docker Engine in swarm mode"
|
||||
description = "Run Docker Engine in swarm mode"
|
||||
keywords = ["guide, swarm mode, node"]
|
||||
advisory = "rc"
|
||||
[menu.main]
|
||||
identifier="initialize-swarm-guide"
|
||||
parent="engine_swarm"
|
||||
weight=12
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Run Docker Engine in swarm mode
|
||||
|
||||
When you first install and start working with Docker Engine, swarm mode is
|
||||
disabled by default. When you enable swarm mode, you work with the concept of
|
||||
services managed through the `docker service` command.
|
||||
|
||||
There are two ways to run the Engine in swarm mode:
|
||||
|
||||
* Create a new swarm, covered in this article.
|
||||
* [Join an existing swarm](join-nodes.md).
|
||||
|
||||
When you run the Engine in swarm mode on your local machine, you can create and
|
||||
test services based upon images you've created or other available images. In
|
||||
your production environment, swarm mode provides a fault-tolerant platform with
|
||||
cluster management features to keep your services running and available.
|
||||
|
||||
These instructions assume you have installed the Docker Engine 1.12 or later on
|
||||
a machine to serve as a manager node in your swawrm.
|
||||
|
||||
If you haven't already, read through the [swarm mode key concepts](key-concepts.md)
|
||||
and try the [swarm mode tutorial](swarm-tutorial/index.md).
|
||||
|
||||
## Create a swarm
|
||||
|
||||
When you run the command to create a swarm, the Docker Engine starts running in swarm mode.
|
||||
|
||||
Run [`docker swarm init`](/engine/reference/commandline/swarm_init.md)]
|
||||
to create a single-node swarm on the current node. The Engine sets up the swarm
|
||||
as follows:
|
||||
|
||||
* switches the current node into swarm mode.
|
||||
* creates a swarm named `default`.
|
||||
* designates the current node as a leader manager node for the swarm.
|
||||
* names the node with the machine hostname.
|
||||
* configures the manager to listen on an active network interface on port 2377.
|
||||
* sets the current node to `Active` availability, meanining it can receive tasks
|
||||
from the scheduler.
|
||||
* starts an internal distributed data store for Engines participating in the
|
||||
swarm to maintain a consistent view of the swarm and all services running on it.
|
||||
* by default, generates a self-signed root CA for the swarm.
|
||||
* by default, generates tokens for worker and manager nodes to join the
|
||||
swarm.
|
||||
* creates an overlay network named `ingress` for publishing service ports
|
||||
external to the swarm.
|
||||
|
||||
The output for `docker swarm init` provides the connection command to use when
|
||||
you join new worker or manager nodes to the swarm:
|
||||
|
||||
```bash
|
||||
$ 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 the following command:
|
||||
docker swarm join \
|
||||
--token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \
|
||||
192.168.99.100:2377
|
||||
```
|
||||
|
||||
### View the join command or update a swarm join token
|
||||
|
||||
The manager node requires a secret token for a new node to join the swarm. The
|
||||
token for worker nodes is different from the token for manager nodes.
|
||||
|
||||
To retrieve the join command including the join token for worker nodes, run:
|
||||
|
||||
```bash
|
||||
$ 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:
|
||||
|
||||
```bash
|
||||
$ docker swarm join-token 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
|
||||
```
|
||||
|
||||
Pass the `--quiet` flag to print only the token:
|
||||
|
||||
```bash
|
||||
$ docker swarm join-token --quiet worker
|
||||
|
||||
SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c
|
||||
```
|
||||
|
||||
Pass the `--rotate` for `swarm join-token` to the token for a 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 \
|
||||
172.17.0.2:2377
|
||||
```
|
||||
|
||||
## Learn More
|
||||
|
||||
* [Join nodes to a swarm](join-nodes.md)
|
||||
* `swarm init`[command line reference](../reference/commandline/swarm_init.md)
|
||||
* [Swarm mode tutorial](swarm-tutorial/index.md)
|
Loading…
Reference in a new issue