Docker swarm 集群通过 docker cli 来创建,并通过docker cli来实现应用的部署和集群的管理。
Docker swarm集群的搭建相对简单,这里使用三台虚拟机(一个管理节点,两个worker节点)来简单演示下集群的搭建过程。
|-----------------------------------------------------------------|
| hostname | IP |
|-----------------------------------------------------------------|
| master | 192.168.223.31 |
|-----------------------------------------------------------------|
| node-01 | 192.168.223.32 |
|-----------------------------------------------------------------|
| node-02 | 192.168.223.33 |
|-----------------------------------------------------------------|
虚拟机和docker-ce的安装这里就不做赘述了,安装后关闭系统默认的防火墙,关闭selinux,安装最新的docker-ce-20.10.17,并且修改docker.service,增加下面的参数配置。
- # vi /lib/systemd/system/docker.service
-
- 在 ExecStart=/usr/bin/dockerd 后添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ,修改后的配置如下所示
-
- [Service]
- Type=notify
- # the default is not to use systemd for cgroups because the delegate issues still
- # exists and systemd currently does not support the cgroup feature set required
- # for containers run by docker
- ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock
-
- 修改后,记得reload配置,并且重启docker服务
-
- # systemctl daemon-reload
- # systemctl restart docker.service
下面就给大家直接贴出我搭建和使用swarm集群过程的相关命令的记录。
- ---初始化集群的管理节点
- # docker swarm init --advertise-addr 192.168.223.31
- Swarm initialized: current node (betygbmft1wkh4kmrf5wx45mc) is now a manager.
-
- To add a worker to this swarm, run the following command:
-
- docker swarm join --token SWMTKN-1-66syvw9yv8xr457lk4eviixyhd5fviw1gg3ktkwa1nkdp2rb44-14530poeryamdfwlssfynmxhk 192.168.223.31:2377
-
- To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
-
- ---从节点加入到管理节点
- # docker swarm join --token SWMTKN-1-66syvw9yv8xr457lk4eviixyhd5fviw1gg3ktkwa1nkdp2rb44-14530poeryamdfwlssfynmxhk 192.168.223.31:2377
- This node joined a swarm as a worker.
-
- ----查看集群的节点、状态
- # docker node ls
- ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
- betygbmft1wkh4kmrf5wx45mc * master Ready Active Leader 20.10.17
- nq4urvgyfdjedabze9p5oll6q node-01 Ready Active 20.10.17
- t6wtou7b5jm07qltlrp35ha85 node-02 Ready Active 20.10.17
-
- ---创建网络
- # docker network create --opt encrypted --driver overlay --attachable webnet
- 7e0huckau0g8olzsyvdts8ta2
-
- ---创建nginx服务(1)
- # docker service create --replicas 2 --network webnet --name nginx --publish published=80,target=80 nginx:1.22.0
- gf8n3ad4k1pkxqwej6xpdthhe
- overall progress: 2 out of 2 tasks
- 1/2: running [==================================================>]
- 2/2: running [==================================================>]
- verify: Service converged
-
- or
- ---创建nginx服务(2)
- # docker service create --replicas 3 --network webnet --name nginx -p 80:80 nginx:1.22.0
-
- ---查看服务信息
- # docker service ls
- ID NAME MODE REPLICAS IMAGE PORTS
- gf8n3ad4k1pk nginx replicated 2/2 nginx:1.22.0 *:80->80/tcp
-
- ---查看nginx进程
- # docker service ps nginx
- ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
- 4vxulka6ofd2 nginx.1 nginx:1.22.0 master Running Running about a minute ago
- res3qre7ywcx nginx.2 nginx:1.22.0 node-01 Running Running 3 minutes ago
-
- ---查看服务明细
- # docker service inspect nginx
-
- ---服务扩展
- # docker service scale nginx=3
- nginx scaled to 3
- overall progress: 3 out of 3 tasks
- 1/3: running [==================================================>]
- 2/3: running [==================================================>]
- 3/3: running [==================================================>]
- verify: Service converged
-
- # docker service ps nginx
- ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
- 4vxulka6ofd2 nginx.1 nginx:1.22.0 master Running Running 10 minutes ago
- res3qre7ywcx nginx.2 nginx:1.22.0 node-01 Running Running 11 minutes ago
- xpwlus8bbo6z nginx.3 nginx:1.22.0 node-02 Running Running 25 seconds ago
-
- ---删除服务
- # docker service rm nginx
- nginx
Docker swarm集群的特性:
1)当swarm集群所有节点关机后重启,重启后,之前创建的服务都可以自动启动;
2)当swarm集群某个从节点宕机,从节点上运行的容器会在其他节点上启动,以确保replicas设置的副本数不变;
3)当swarm集群只有一个主节点,且该主节点宕机,那么主节点上运行的服务,不会在从节点上再启动,replicas指定的服务副本数将无法得到保障;
参考:
https://docs.docker.com/engine/reference/commandline/swarm_init/
https://docs.docker.com/engine/reference/commandline/swarm_join/