Docker Swarm 集群管理
[toc]
swarm
是什么
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
原理
如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。
- swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
- work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。
共识算法
swarm 的共识算法和 etcd 共识算法是类似的,使用的是 raft 共识算法,来保证集群的稳定性。
提示
在 CloudNative 中我们可以看到关于 etcd & raft 教程。
raft 需要保证大部分节点一致性,所以不要心存侥幸~
我们应该尽可能的使用 奇数 作为集群数量。
1 1 0 0 leader
2 2 0 0 leader
3 2 1 1 leader
5 3 2 2 leader
6 4 2 2 leader
奇数和偶数一样的~
命令
[root@iZbp1evo5cnwagauz3w188Z /]# docker swarm -h
Flag shorthand -h has been deprecated, please use --help
Usage: docker swarm COMMAND
Manage Swarm
Commands:
ca Display and rotate the root CA
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm
init
Usage: docker swarm init [OPTIONS]
Initialize a swarm
Options:
--advertise-addr string Advertised address (format: <ip|interface>[:port])
--autolock Enable manager autolocking (requiring an unlock key to start a stopped manager)
--availability string Availability of the node ("active"|"pause"|"drain") (default "active")
--cert-expiry duration Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
--data-path-addr string Address or interface to use for data path traffic (format: <ip|interface>)
--data-path-port uint32 Port number to use for data path traffic (1024 - 49151). If no value is set
or is set to 0, the default port (4789) is used.
--default-addr-pool ipNetSlice default address pool in CIDR format (default [])
--default-addr-pool-mask-length uint32 default address pool subnet mask length (default 24)
--dispatcher-heartbeat duration Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
--external-ca external-ca Specifications of one or more certificate signing endpoints
--force-new-cluster Force create a new cluster from current state
--listen-addr node-addr Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
--max-snapshots uint Number of additional Raft snapshots to retain
--snapshot-interval uint Number of log entries between Raft snapshots (default 10000)
--task-history-limit int Task history retention limit (default 5)
初始化集群
[root@iZbp1evo5cnwagauz3w188Z /]# docker swarm init
Swarm initialized: current node (an0oq2uwu0qv2xkfcwwazhjx5) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2vqziogty31uuxyw58fwbbvji4323uz24v1hhgusnw0dve7k12-0q89bbp3g4st04eij30x7ob2i 10.0.0.188:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
提示
生成了一个用于其他节点加入主节点的命令:
docker swarm join --token SWMTKN-1-2vqziogty31uuxyw58fwbbvji4323uz24v1hhgusnw0dve7k12-0q89bbp3g4st04eij30x7ob2i 10.0.0.188:2377
移除节点(离开集群):
docker swarm leave
更新集群:
docker swarm update
服务
[root@iZbp1evo5cnwagauz3w188Z /]# docker service
Usage: docker service COMMAND
Manage services
Commands:
create Create a new service
inspect Display detailed information on one or more services
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services
update Update a service
Run 'docker service COMMAND --help' for more information on a command.
其他常用命令
初始化 swarm 集群,进行初始化的这台机器,就是集群的管理节点。
docker-machine ssh swarm-manager
docker swarm init --advertise-addr 192.168.99.107 #这里的 IP 为创建机器时分配的 ip。
查看集群信息
进入管理节点,执行:docker info 可以查看当前集群的信息。
docker info
部署服务到集群中
注意:跟集群管理有关的任何操作,都是在管理节点上操作的。
以下例子,在一个工作节点上创建一个名为 helloworld 的服务,这里是随机指派给一个工作节点:
docker service create --replicas 1 --name helloworld alpine ping docker.com