Docker Swarm
Docker Swarm集群的构建
1.修改主机名
node1(192.168.88.28) node2(192.168.88.4) node3(192.168.88.133)
[root@node1 ~]# vim /etc/hosts
添加:
192.168.88.28 node1 192.168.88.4 node2 192.168.88.133 node3
ping一下网络可以ping通
scp /etc/hosts root@192.168.88.4:/etc/
scp /etc/hosts root@192.168.88.133:/etc/ #将/etc/hosts下修改的主机名远程拷贝到另外两台主机(现在可以在另外两台主机分别ping别的主机查看网络是否能通)
修改主机名:
hostname node1
bash #使其生效
hostname node2
bash #使其生效
hostname node3
bash #使其生效
2.设置时区
!注意三台主机的时区不等错误,命令date查看时区,如果发现时区不同,需要修修改时区后才能进行后续操作
修改时区:
timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称
Asia/Shanghai
timedatectl set-timezone Asia/Shanghai #设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #或者设置软连接
3.设置免密登录
生成密钥:ssh-keygen
把密钥复制到其他主机:
ssh-copy-id -i /root/.ssh/id-rsa.pub root@192.168.88.4
ssh-copy-id -i /root/.ssh/id-rsa.pub root@192.168.88.133
三台主机现在都已完成免密登录
4.尽可能保持三台主机的docker版本一致,避免以下不必要的麻烦
docker -v #查看docker版本
5.[root@node1 ~]# docker swarm init --advertise-addr 192.168.88.28 #初始化节点,将ip地址公布
执行此明后,会出现一个提示:现在想作为一个worker端加入到集群的时候,运行以下命令,将此命令复制下来,在第二台主机上运行,即可加入docker swarm群集
[root@node2 ~]# docker swarm join --token SWMTKN-1-57y3pxr8hqrfxjxrefhbat0cdnb4tphwunsv3u5ym9028yxspn-4ogiferuwhhbbxg5t6deijdkz 192.168.88.28:2377
提示这个node作为worker已经加入到群集。
在node1初始化节点后提示要想作为manager加入集群运行以下命令:
[root@node1 ~] docker swarm join-token manager #我们将node1作为manager加入群集
mananger加入后,再次提示tocken随机值(有效时间大概在24小时左右)
[root@node3 ~] docker swarm join --token SWMTKN-1-57y3pxr8hqrfxjxrefhbat0cdnb4tphwunsv3u5ym9028yxspn-4m1x97s9s8m2hu0s6s463ytdn 192.168.88.28:2377 #将命令赋值到node3上
现在node3也同样以manager节点加入到集群中。
docker info #可以查看节点详细信息
docker node ls #在manager上可以查看简要的node节点信息(在worker节点上运行时不成立,因为不是manager)
6.manager和node相互转换
manager节点和worker节点是可以互相转换的
例如:manager节点负载压力过大,现在希望worker节点提升为manager节点
命令:
[root@node1 ~]# docker node promote node2
Node node2 promoted to a manager in the swarm.
降级命令:
[root@node1 ~]# docker node demote node2 Manager node2 demoted in the swarm.
docker node ls #查看
7.搭建本地仓库
准备工作:
开启路由转发
[root@node1 ~]# vim /etc/sysctl.conf
添加net.ipv4.ip_forward = 1
sysctl -p #使其生效
scp /etc/sysctl.conf root@192.168.88.4:/etc/
scp /etc/sysctl.conf root@192.168.88.133:/etc/
到这两台主机上执行sysctl -p使其生效
正式搭建:
[root@node1 ~]# docker pull registry:2
拉取成功后创建一个映射目录:[root@node1 ~]# mkdir -p /opt/data/registry
[root@node1 ~]# docker run -itd -p 5000:5000 --restart always -v /opt/data/registry:/var/lib/registry --name registry registry:2
[root@node1 ~]# curl 192.168.88.28:5000/_cataalog
目前没有存的数据
打开私有仓库配置文件,在其配置文件中指定私有仓库位置
vim /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
scp /usr/lib/systemd/system/docker.service root@192.168.88.4:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/docker.serviceroot@192.168.88.133:/usr/lib/systemd/system/
拷贝过去后,每个主机执行读取、重启
systemctl daemon-reload systemctl restart docker
[root@node1 ~]# docker tag d4e60c8eb27a 192.168.88.28:5000/httpd
[root@node1 ~]# docker tag busybox:latest 192.168.88.28:5000/busybox
[root@node1 ~]# docker push 192.168.88.28:5000/httpd 将打包的景象push
在node2上拉去刚才在node1上打包好的httpd私有镜像
8.docker swarm图形界面
[root@node1 ~]# docker search visualizer
[root@node1 ~]# docker pull docker.io/dockersamples/visualizer
下载好镜像后,传到私有仓库,防止镜像损坏。
[root@node1 ~]# docker tag docker.io/dockersamples/visualizer:latest 192.168.88.28:5000/visualizer
[root@node1 ~]# docker push 192.168.88.28:5000/visualizer #传到私有仓库
[root@node1 ~]# docker run -itd -p 8888:8080 -e HOST=192.168.88.28 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer 192.168.88.28:5000/visualizer #运行这个容器
打开浏览器:http://192.168.88.28:8888/