swarm
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
Swarm的基本架构如下图所示:
这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源。管理者的管理对象不是服务器层面而是集群层面的,也就是说通过Manager,我们只能笼统地向集群发出指令而不能具体到某台具体的服务器上要干什么(这也是Swarm的根本所在)。至于具体的管理实现方式,Manager向外暴露了一个HTTP接口,外部用户通过这个HTTP接口来实现对集群的管理。对于稍微大一点的集群,最好是拿出一台实际的服务器作为专门的管理者,作为学习而言,也可以把管理者和被管理者放在一台服务器上.
安装与集群搭建
server1 172.25.67.1 manager
server2 172.25.67.2 worker
server3 172.25.67.3 worker
1.在server1端创建swarm环境,获取token
1)安装docker服务
[root@server1 docker]# yum install -y docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm container-selinux-2.9-4.el7.noarch.rpm pigz-2.3.3-1.el7.centos.x86_64.rpm
2)开启docker服务
[root@server1 ~]# systemctl start docker.service
[root@server1 ~]# systemctl status docker.service
3)导入镜像
[root@server1 ~]# docker load -i nginx.tar
4)初始化一个Swarm群集
[root@server1 ~]# docker swarm init
2.其他两个 worker 节点加入到 swarm cluster
在server2中:
1)安装docker服务
[root@server2 docker]# yum install -y docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm container-selinux-2.9-4.el7.noarch.rpm pigz-2.3.3-1.el7.centos.x86_64.rpm
2)开启docker服务
[root@server2 ~]# systemctl start docker.service
[root@server2 ~]# systemctl status docker.service
3)导入镜像
[root@server2 ~]# docker load -i nginx.tar
4)添加节点
[root@server2 ~]# docker swarm join \ #加入群集作为节点
> --token SWMTKN-1-5rggw8rteeqtu4x24omr7vp4rwj5nb9upj0yrq4o1p86ysgj4u-4ghsysu0kn1k9h1x1pejroz0t \
> 172.25.67.1:2377
This node joined a swarm as a worker.
在server3中:
1)安装docker服务
[root@server3 docker]# yum install -y docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm container-selinux-2.9-4.el7.noarch.rpm pigz-2.3.3-1.el7.centos.x86_64.rpm
2)开启docker服务
[root@server3 ~]# systemctl start docker.service
[root@server3 ~]# systemctl status docker.service
3)导入镜像
[root@server3 ~]# docker load -i nginx.tar
4)添加节点
[root@server3 ~]# docker swarm join \ #加入群集作为节点
> --token SWMTKN-1-5rggw8rteeqtu4x24omr7vp4rwj5nb9upj0yrq4o1p86ysgj4u-4ghsysu0kn1k9h1x1pejroz0t \
> 172.25.67.1:2377
This node joined a swarm as a worker.
在server1中:
在 manager 端查看 swarm 节点信息
[root@server1 ~]# docker node ls #查看集群中的节点
[root@server1 ~]# docker service create --name web --replicas 3 -p 80:80 nginx #创建一个名称为web,副本为3,开放端口为80的nginx服务
[root@server1 ~]# docker service ls #列出添加的服务
[root@server1 ~]# docker service ps web #在三个节点均匀分配
网页访问查看
172.25.67.1
3.测试
编辑默认发布目录,写入复制到nginx容器下
在server1中:
[root@server1 ~]# vim index.html
[root@server1 ~]# cat index.html
<h1>server1-swarm</h1>
[root@server1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af4821d1f248 nginx:latest "nginx -g 'daemon of…" 15 minutes ago Up 15 minutes 80/tcp web.3.jchmro6jsq8ih29gw7lhn44lk
[root@server1 ~]# docker container cp index.html af4821d1f248:/usr/share/nginx/html #将文件拷贝到nginx的发布目录下
在server2中:
[root@server2 ~]# vim index.html
[root@server2 ~]# cat index.html
<h1>server2-swarm</h1>
[root@server2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3c9a1295478 nginx:latest "nginx -g 'daemon of…" 17 minutes ago Up 17 minutes 80/tcp web.1.1nk80sv7fa2t7fxvskyrz4hgb
[root@server2 ~]# docker container cp index.html c3c9a1295478:/usr/share/nginx/html
在server3上:
[root@server3 ~]# vim index.html
[root@server3 ~]# cat index.html
<h1>server3-swarm</h1>
[root@server3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7097f9721492 nginx:latest "nginx -g 'daemon of…" 19 minutes ago Up 19 minutes 80/tcp web.2.wmjk4dvtf1t9nbi75lumno4kh
[root@server3 ~]# docker container cp index.html 7097f9721492:/usr/share/nginx/html
测试其负载均衡
[root@foundation67 ~]# curl 172.25.67.1
4.scale参数:
其可以调整容器副本的个数
[root@server1 ~]# docker service scale web=6 #调整web副本数为6
web scaled to 6
overall progress: 6 out of 6 tasks
1/6: running
2/6: running
3/6: running
4/6: running
5/6: running
6/6: running
verify: Service converged
[root@server1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
1ygxhtwam6po web replicated 6/6 nginx:latest *:80->80/tcp
[root@server1 ~]# docker service ps web #查看添加的web服务的状态
5.visualizer图形监控
1)导入镜像
[root@server1 ~]# docker load -i visualizer.tar
2)完成后创建服务
[root@server1 ~]# docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer
[root@server1 ~]# docker service ls #查看服务列表
3)在浏览器访问:
172.25.67.1:8080
4)在机器上的操作可以实时用图形来监控,将web更新为game2048
[root@server1 ~]# docker service update --image game2048 --update-parallelism 2 --update-delay 10s web #每10秒更新一次,一次更新2个
在图像界面查看