实验要求:可以上网的三台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 root@192.168.6.109:/etc/
scp /etc/hosts root@192.168.6.110:/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 root@192.168.6.109
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.6.110
验证:可以通过主机名链接其他两台服务器
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 "<h1>wwww</h1>"  > /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

 

 

 

 

node2node3

 

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   //可以查看其经理的信息