1.准备环境
例:此处的服务器为阿里云的ECS云服务器,linux系统,centos 7.8 操作系统
IP:47.111.249.146(外网)172.16.45.66(内网) 主机名:manager 担任角色:swarm manager
IP:116.62.27.188(外网)172.16.45.78(内网) 主机名:work01担任角色:swarm node
IP:118.31.102.40(外网)172.16.45.77(内网) 主机名:work02 担任角色:swarm node
2.修改主机名
命令为:hostnamectl set-hostname 主机名 也可以使用其他方法进行修改,个人认为这种方法方便快捷
示例:[root@manager ~]# hostnamectl set-hostname manager
注:三台服务器都需要进行操作
3.关闭防火墙
命令为:systemctl stop firewalld
示例:[root@manager ~]# systemctl stop firewalld
注:三台服务器都需要进行操作
4.安装docker
命令为:yum -y install docker
示例:[root@manager ~]# yum -y install docker
注:三台服务器都需要安装docker
5.创建swarm并添加node节点
示例:[root@manager ~]# docker swarm init --advertise-addr 172.16.45.66
如果报错:Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.请执行docker swarm leave -f 命令
示例:[root@manager ~]# docker swarm leave -f
添加node节点到swarm集群
示例:[root@worker01 ~]# docker swarm join --token SWMTKN-1-42coy1f4xtk987t6w04h6p53m7z12xzis6sjwvkd73ypmwl76k-1u0c37oyi9bz66e6wqfsr6xuh 172.16.45.66:2377
示例:[root@worker02 ~]# docker swarm join --token SWMTKN-1-42coy1f4xtk987t6w04h6p53m7z12xzis6sjwvkd73ypmwl76k-1u0c37oyi9bz66e6wqfsr6xuh 172.16.45.66:2377
查看集群的状态
示例:[root@manager ~]# docker node ls
创建网络
示例:[root@manager ~]# docker network create -d overlay nginx_net
查看创建的网络
示例:[root@manager ~]# docker network ls
创建服务
我们是jar 包构建dockerfile 来启动
这里以nginx 为例,先从镜像仓库拉nginx镜像
[root@manager ~]# docker pull nginx
示例:[root@manager ~]# docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx
扩展服务
示例:[root@manager ~]# docker service scale my_nginx=3
查看运行的服务
示例: docker service ps my_nginx
添加node节点成为备用管理节点
示例:[root@manager ~]# docker node promote worker01
查看swarm manager 的令牌
示例:[root@manager ~]# docker swarm join-token manager
剔除worker节点
示例:[root@manager ~]# docker node rm --force worker02
下线的worker节点再次上线
示例:[root@worker02 ~]# docker swarm join --token SWMTKN-1-42coy1f4xtk987t6w04h6p53m7z12xzis6sjwvkd73ypmwl76k-ahjz9y3o934pxr9jfqqbqizkv 172.16.45.66:2377
节点状态为drain 不再处理请求
示例:[root@manager ~]# docker node update --availability drain worker02
更新状态再加回来
示例:[root@manager ~]# docker node update --availability active worker02
附:
命令:
docker swarm:集群管理,子命令有init, join, leave, update。(docker swarm --help查看帮助)
docker service:服务创建,子命令有create, inspect, update, remove, tasks。(docker service--help查看帮助)
docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看帮助)
注意:版本尽量保持一致(不要差别太大),否则,worker节点不能作为通讯入口