实验要求:可以上网的三台centos 7
实验步骤:
准备工作:
主机一(node1):
1安装docker环境:
2.设置ntp服务器的同步时间
vim /etc/ntp.conf
添加:
server 127.127.1.0
fudge 127.127.1.0 stratum 8
systemctl restart ntpd
其他两台服务器同步ntp服务器的时间
systemctl restart ntpd
3.修改主机名
临时修改:
hostname node1
bash
永久修改:
vim /etc/sysconfig/network
添加:
HOSTNAME=node1
其他两台服务器也修改主机名,分别为:node2 node3
4.修改hosts文件,用来解析主机。
vim /etc/hosts
192.168.6.106 node1
192.168.6.109 node2
192.168.6.110 node3
其他两台服务器做同样的配置
如:
scp /etc/hosts [email protected]:/etc/
scp /etc/hosts [email protected]:/etc/
验证:ping node2
ping node3
可以通过主机名进行网络的连通性测试
5.清除防火墙的默认规则,关闭selinux,开启docke服务
iptables -F
iptables –L
setenforce 0
systemctl restart docker
其他两台服务器做同样的配置
6.配置ssh远程访问,使用密钥的方式创建链接,则不需要密码了。
生成密钥,一路下一步即可
ssh-keygen
将公钥传给其他两台服务器:
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
验证:可以通过主机名链接其他两台服务器
ssh node3
正式开始:
7.创建docker群集的领导者和工作者,node1作为领导者进行配置。
(1)初始化swarm指定群集的通讯IP地址,此时6.106成为领导者
docker swarm init --advertise-addr 192.168.6.106
(2)可查看当前节点成员
docker node ls
(3)根据领导发话将后续节点加入群集,根据下面的这段代码可以将其他的两台服务器加入到swarm群集中,
docker swarm join \
--token SWMTKN-1-3vxn0lnobabqwngyxi67hxtf74qi00fciy86lfr2
g931ziv2ro-0varh1mcqoe3pi4ak9qzo5deo \
192.168.6.105:2377
docker node ls //查看swarm群集的成员
(4)分别在其他两台服务器上执行这段代码,将其加入到群集中,如果加不进去的检查防火墙策略清空没有
(5)再次查看群集节点信息
docker node ls
8.开启ipv4转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl –p
其他两台服务做同样的配置
如:
scp /etc/sysctl.conf node2:/etc
scp /etc/sysctl.conf node3:/etc
并分别到两台服务器上进行内核文件的刷新
9.拉取registry:2镜像,用来做私有仓库,
(1)公网拉取
docker search registry
docker pull registry:2
(2)离线包 //次实验推荐的步骤
docker load -i registry2.tar //解压tar包成镜像
docker images
创建私有仓库的物理目录
mkdir /lpc/xixi –p
启动私有库用的容器
docker run -itd -p 5000:5000 --restart=always -v /lpc/xixi/registry/:/var/lib/registry --name registry registry:2
docker ps
验证容器中的私有库目录是否存在
curl 192.168.6.106:5000/v2/_catalog
发布私有仓库其他主机可以访问
注意:为了防止改坏这份文件,可以先做备份
cp /usr/lib/systemd/system/docker.service /yum/
然后进行修改:
vim /usr/lib/systemd/system/docker.service
ExecStart=后面的选项最下面添加换行符和新选项 --insecure-registry 192.168.6.106:5000
如:
守护进程重新加载
systemctl daemon-reload
重启服务
service docker restart
验证:
确保docker ps后容器还在,否则就是配置有误docker ps
其他两台服务器的配置,
将修改后的docker.service文件分别复制都其他两台服务器的相同的目录路径下,为了可以访问领导者的私有库,并在每台服务器上启动守护进程和重启docker服务。
scp /usr/lib/systemd/system/docker.service node2:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/docker.service node3:/usr/lib/systemd/system/
systemctl daemon-reload
service docker restart
10.拉取或添加nginx镜像
docker pull nginx 或
docker load -i nginx2.tar
docker images
为这个镜像添加易识别的私有标签,来区别是公有的还是私有的
docker tag nginx 192.168.6.106:5000/nginx
docker images
上传私有镜像到刚才做好的私有仓库
docker push 192.168.6.106:5000/nginx
再次查看私有仓库目录
curl 192.168.6.106:5000/v2/_catalog
也可以去其他节点试着pull一下192.168.6.106:5000/nginx,但是拉完别忘记删掉一会再推
11.添加群集专属网络
docker network create --driver overlay my-network
docker network ls
12. 安装swarm群集图形化监视工具
拉取镜像
docker pull docker.io/dockersamples/visualizer
或者使用离线包 //本实验推荐
docker load -i visualizer.tar
docker images
先给离线镜像做个标记,用来区别公有镜像。
docker tag dockersamples/visualizer 192.168.6.106:5000/visualizer
docker images
将这个镜像发布到私有仓库
docker push 192.168.6.106:5000/visualizer
curl 192.168.6.106:5000/v2/_catalog
13. 本地运行图形监视软件所在镜像成为容器
docker run -itd -p 8888:8080 -e HOST=192.168.6.106 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer 192.168.6.106:5000/visualizer
docker ps
14.验证图形监控页面
Firefox 192.168.6.106:8888
15. 创建swarm群集服务,3个容器跑nginx
docker service create --replicas 3 --network my-network --name web -p 80:80 192.168.6.106:5000/nginx
docker ps
查看服务节点信息
docker service ps web
查看群集列表
docker service ls
验证:
重新访问后者刷新游览器首页
Firefox 192.168.6.106:8888
16.增加容器为5个
在管理者上执行:
docker service scale web=5
查看服务节点信息
docker service ps web
查看群集列表
docker service ls
重新访问后者刷新游览器首页
17.验证
(1)在各个nginx容器中修改主页信息,测试群集效果
进入正在运行的nginx容器里,添加不同的主页信息
docker exec -it 容器ID /bin/bash
echo "wwww
" > /usr/share/nginx/html/index.html
(2)关闭node3的docker服务,会发现这个容器被转移到了其他节点,重启打开node3,再把转移走的容器删掉,容器又会转移会node3
注意:在关闭node3后,其他两台服务器会通过自己内部的调度器将node3上的容器运行在其他两台上,当重新启动node3时,并不会自动切回来,需要到其他两台服务器上,查看容器列(docker ps)表,通过容器运行的时间来确定那几台是刚加进来的,刚加进来的就是node3的容器,删除他,就会自动回到node3上。
18.群集管理常用命令
开启节点docker node update --availability active node3
关闭节点docker node update --availability drain node3
在界节点上申请退出群集
docker swarm leave -f
node2与node3
1.配置hosts文件,由于是从node1的管理者上直接通过scp传过来的,所以直接查看即可。
cat /etc/hosts
2. 清除防火墙的默认规则,关闭selinux,开启docke服务
iptables –F
setenforce 0
systemctl restart docker
3.这是在管理者node1生成的加入swarm群集的代码,在工作者服务器上执行就可以加入群集。
docker swarm join \
--token SWMTKN-1-3vxn0lnobabqwngyxi67hxtf74qi00fciy86lfr2
g931ziv2ro-0varh1mcqoe3pi4ak9qzo5deo \
192.168.6.105:2377
如果后来忘记了
用Docker swarm join-token worker 重新查看加入命令
4.开启ipv4转发功能,
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl –p
5.用来访问管理者私有仓库的配置文件,和node1上的一摸一样,通过scp就可以分别传到node2和node3上,查看即可
cat /usr/lib/systemd/system/docker.service
但是需要开启守护进程和重启docker服务
systemctl daemon-reload
service docker restart
6.当node1的私有仓库搭建好之后,并上传镜像后,可以在node2,3上测试是否可以使用,拉取镜像。
docker pull 192.168.6.106:5000/nginx
docker images
7.修改本服务器上的容器的nginx默认首页文件,用来做群集调度测试。
添加:
经理可以加副经理
docker node promote node2
删除副经理
docker node demote node2
docker info //可以查看其经理的信息