服务器列表
IP | hostname | swarm role |
---|---|---|
192.168.2.121 | ubuntu | manager |
192.168.2.122 | zipkin | worker |
192.168.2.123 | elastic | worker |
192.168.2.124 | tensorflow | manager |
本次验证所使用的docker 版本如下:
kube@tensorflow:~$ docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:42:29 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 06:42:29 2017
OS/Arch: linux/amd64
Experimental: false
本次验证的主要架构如下图所示:
为了防止Swarm Mange单点故障,引入了HA机制,Swarm Manage自身是无状态的,所以还是很容易实现HA的。 实现过程中采用主备方式,当主节点故障以后,会从新选主提供服务,选主过程中采用分布式锁实现,现在支持etcd、zookeeper、consul三种类型的分布式存储,用来提供分布式锁。 当备节点收到消息后,会将消息转发给主节点
Steps
kube@ubuntu:~$ docker swarm init --listen-addr 192.168.2.121:2377
Swarm initialized: current node (tlm00esjj8c794bnt27ohy6ax) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br \
192.168.2.121:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
kube@ubuntu:~$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-brgeenpout0mom3506l19ioqi \
192.168.2.121:2377
kube@ubuntu:~$ docker swarm join-token -q manager //查看swarm manager的token
SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-brgeenpout0mom3506l19ioqi
kube@ubuntu:~$ docker swarm join-token -q worker //查看swarm worker的token
SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br
kube@zipkin:~$ docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br \
192.168.2.121:2377
This node joined a swarm as a worker.
kube@elastic:~$ docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-a0iw8a8mkwwczrnxeedff57br \
192.168.2.121:2377
This node joined a swarm as a worker.
kube@tensorflow:~$ docker swarm join \
--token SWMTKN-1-1d0zbvscbn5n879a8d8gninqc0zrgio9eu21vvh4c3r48h22o1-brgeenpout0mom3506l19ioqi \
192.168.2.121:2377
This node joined a swarm as a manager
kube@ubuntu:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
2p25ctjidc4ep93x9dtc94o41 elastic Ready Active
tlm00esjj8c794bnt27ohy6ax * ubuntu Ready Active Leader
xw25t5biu4lt22ctfiqyy98ls tensorflow Ready Active Reachable
y3tbcpks0hmatb2eylxo93516 zipkin Ready Active
kube@ubuntu:~$ docker service create --replicas 1 --name svc alpine ping docker.com
yagle957bftymp5r9f4irpqe5
kube@ubuntu:~$ docker service create --replicas 3 --name redis --update-delay 10s --update-parallelism 1 redis:3.2.7
xbfehf2v0pmx8onc6n0jvj145