一、swarm集群
首先我们要了解一下什么是集群。官方理解我不做说明,我的理解是,通过一台管理机,去操作N台机器,让用户在操作的时候觉得自己是在一台机器上操作的。这里做个说明,swarm只做管理者,不建议在swarm上做容器,他只是管理其他机器上的容器。
二、swarm集群的搭建
1、准备工作:准备四台机器。一台管理机,三台容器机做节点。
192.168.1.167 管理机(167)
192.168.1.166 容器机(166)
192.168.1.172 容器机(172)
192.168.1.173 容器机(173)
以上所有的机器都安装了docker,版本是17.03,并且ip是在一个网段的。
HOSTNAME 的名字取决于节点名称。
以下端口必须可用。在某些系统上,这些端口默认是打开的,如果没有开启,请进行配置,或者是关闭防火墙。
TCP端口2377用于集群管理通信
TCP和UDP端口7946用于节点之间的通信
UDP端口4789用于覆盖网络流量
2、在管理机(167)上的操作
[root@localhost /]# docker swarm init --advertise-addr 192.168.1.167
Swarm initialized: current node (gl9wpo3vvh0kv3bsivpw850tr) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-4cqhad8s8swwxj39za989evdbto7idcqrxtyz6obsm9vy0wiu8-ayredhk9u28ns5j8j6wawbsrc \
192.168.1.167:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
出现上述的结果,那么就表示在167这台机器上,创建了一个集群,可以通过docker info命令来查看
集群信息
如果需要查看集群中有哪些节点:docker node ls
[root@localhost /]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
gl9wpo3vvh0kv3bsivpw850tr * localhost.localdomain Ready Active Leader
node ID旁边那个*号表示现在连接到这个节点上
3、将容器机挂到管理机下面
1. 在管理机执行:docker swarm join-token worker
[root@localhost ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1pubot0weptvzdeprfjxpfgwtp4dfzyzt0axwtct46xqvgso4m-bliirdxy7fb9m1acectknffi7 \
192.168.1.167:2377
复制docker swarm join ...的内容
2.在容器机(166)执行复制的命令
挂载节点
出现上面的内容表示成功。回到管理机(167)查看挂载的节点:docker node ls
已经挂载的节点
到此位置集群搭建完成。
如果出现类似Error response from daemon: rpc error: code = 14 desc = grpc: the connection is unavailable的错误,可能是由于防火墙引起的,解决方案是正确配置防火墙或关闭防火墙。
关于防火墙的命令:systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)