swarm

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

Swarm的基本架构如下图所示:

wms技术架构 swarm架构_html

这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有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

wms技术架构 swarm架构_docker_02

wms技术架构 swarm架构_html_03

2)开启docker服务

[root@server1 ~]# systemctl start docker.service

[root@server1 ~]# systemctl status docker.service

wms技术架构 swarm架构_html_04

3)导入镜像

[root@server1 ~]# docker load -i nginx.tar

wms技术架构 swarm架构_nginx_05

4)初始化一个Swarm群集

[root@server1 ~]# docker swarm init

wms技术架构 swarm架构_html_06

 

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

wms技术架构 swarm架构_nginx_07

wms技术架构 swarm架构_docker_08

2)开启docker服务

[root@server2 ~]# systemctl start docker.service

[root@server2 ~]# systemctl status docker.service

wms技术架构 swarm架构_wms技术架构_09

3)导入镜像

[root@server2 ~]# docker load -i nginx.tar

wms技术架构 swarm架构_wms技术架构_10

4)添加节点

[root@server2 ~]# docker swarm join \  #加入群集作为节点

> --token SWMTKN-1-5rggw8rteeqtu4x24omr7vp4rwj5nb9upj0yrq4o1p86ysgj4u-4ghsysu0kn1k9h1x1pejroz0t \

> 172.25.67.1:2377

This node joined a swarm as a worker.

wms技术架构 swarm架构_docker_11

在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

wms技术架构 swarm架构_html_12

wms技术架构 swarm架构_nginx_13

2)开启docker服务

[root@server3 ~]# systemctl start docker.service

[root@server3 ~]# systemctl status docker.service

wms技术架构 swarm架构_docker_14

3)导入镜像

[root@server3 ~]# docker load -i nginx.tar

wms技术架构 swarm架构_nginx_15

4)添加节点

[root@server3 ~]# docker swarm join \    #加入群集作为节点

> --token SWMTKN-1-5rggw8rteeqtu4x24omr7vp4rwj5nb9upj0yrq4o1p86ysgj4u-4ghsysu0kn1k9h1x1pejroz0t \

> 172.25.67.1:2377

This node joined a swarm as a worker.

wms技术架构 swarm架构_wms技术架构_16

在server1中:

在 manager 端查看 swarm 节点信息

[root@server1 ~]# docker node ls  #查看集群中的节点

wms技术架构 swarm架构_html_17

[root@server1 ~]# docker service create --name web --replicas 3 -p 80:80 nginx #创建一个名称为web,副本为3,开放端口为80的nginx服务

wms技术架构 swarm架构_nginx_18

[root@server1 ~]# docker service ls  #列出添加的服务

wms技术架构 swarm架构_html_19

[root@server1 ~]# docker service ps web  #在三个节点均匀分配

wms技术架构 swarm架构_html_20

网页访问查看

172.25.67.1

wms技术架构 swarm架构_html_21

 

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的发布目录下

wms技术架构 swarm架构_nginx_22

在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

wms技术架构 swarm架构_nginx_23

在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

wms技术架构 swarm架构_wms技术架构_24

测试其负载均衡

[root@foundation67 ~]# curl 172.25.67.1

wms技术架构 swarm架构_nginx_25

 

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

wms技术架构 swarm架构_docker_26

[root@server1 ~]# docker service ps web  #查看添加的web服务的状态

wms技术架构 swarm架构_wms技术架构_27

 

5.visualizer图形监控

1)导入镜像

[root@server1 ~]# docker load -i visualizer.tar

wms技术架构 swarm架构_nginx_28

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

wms技术架构 swarm架构_html_29

[root@server1 ~]# docker service ls #查看服务列表

wms技术架构 swarm架构_wms技术架构_30

3)在浏览器访问:

172.25.67.1:8080

wms技术架构 swarm架构_wms技术架构_31

4)在机器上的操作可以实时用图形来监控,将web更新为game2048

[root@server1 ~]# docker service update --image game2048 --update-parallelism 2 --update-delay 10s web  #每10秒更新一次,一次更新2个

wms技术架构 swarm架构_html_32

wms技术架构 swarm架构_docker_33

在图像界面查看

wms技术架构 swarm架构_wms技术架构_34