Swarm管理Docker集群

一.swam简介

Swram是Docker公司推出的官方容器集群平台,基于go语言实现,代码开源在 https://github.com/docker/swarm .2016年2月对架构进行重新设计,推出了v2版本,支持超过1千个节点。作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的Docker API及工具(如Compose,docker-py等),Docker本身就可以很好地与Swarm进行集成。

在这里插入图片描述

Manager:接收客户端服务定义,将任务发送到agnet节点,维护集群期望状态和集群管理功能以及leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。
agent:接收并执行从管理节点分配的任务,并报告任务当前的状态,以便Manager节点维护每个服务期望状态。

二.Swam管理集群

1.部署集群

1.清理实验环境
删除server1、server2的容器
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.为server3安装docker(server1、server2已经安装好了)

[root@server1 ~]# scp -r docker server3:
[root@server3 ~]# ls
docker
[root@server3 ~]# cd docker/
[root@server3 docker]# ls
container-selinux-2.21-1.el7.noarch.rpm
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
repodata
[root@server3 docker]# yum install *.rpm -y

在这里插入图片描述
在这里插入图片描述
3.打开server3的docker服务

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

在这里插入图片描述4.初始化server1(管理节点)的swarm集群

[root@server1 ~]# docker swarm init 

在这里插入图片描述5.查看server1的桥接,和网络信息

[root@server1 ~]# yum install bridge-utils.x86_64 -y					##提供brctl命令
[root@server1 ~]# brctl show
[root@server1 ~]# docker network ls

在这里插入图片描述
6.server2、server3加入集群

[root@server2 docker]# docker swarm join --token SWMTKN-1-5m3v8gviqk7r5e1zs9h8vsr16shhti2mp1o5qa23i7tgml08ut-bqrt2diawswa860qqmabblw4x 172.25.16.1:2377
[root@server2 docker]# docker swarm join --token SWMTKN-1-5m3v8gviqk7r5e1zs9h8vsr16shhti2mp1o5qa23i7tgml08ut-bqrt2diawswa860qqmabblw4x 172.25.16.1:2377

7.在管理节点查看到所有节点信息和状态

在这里插入图片描述

2.部署应用

1.server1中创建网络webnet,用于容器间通信。

[root@server1 ~]# docker service create --name web --network webnet --publish 80:80 --replicas 3 nginx:1.16 
##-replicas 3代表集群的个数为3;nginx后面要带版本号,默认是laster(可以修改标签)
image nginx:1.16 could not be accessed on a registry to record
its digest. Each node will access nginx:1.16 independently,
possibly leading to different nodes running different
versions of the image.

qchyxe0yjm7005e8rb2l5f9fz
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 
[root@server1 ~]# 

2.查看服务列表

[root@server1 ~]# docker service ls
[root@server1 ~]# docker service ps web 

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
4.给server3加载nginx镜像
在这里插入图片描述
5.扩容(增加到六个负载)

[root@server1 ~]# docker service scale 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 

在这里插入图片描述6.缩减到3个(够用就行)

[root@server1 ~]# docker service scale web=3
web scaled to 3
overall progress: 3 out of 3 tasks 
1/3: running   
2/3: running   
3/3: running   
verify: Service converged 

此时每个主机开启一个nginx服务
在这里插入图片描述
7.在三个虚拟机上编写nginx发布默认文件,并cp到容器内nginx的html下
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

测试:

物理机中访问三台虚拟机,成功访问并实现轮询

[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.2/index.html;done
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.2/index.html;done
[root@foundation60 ~]# for i in {1..10};do curl 172.25.16.3/index.html;done

在这里插入图片描述在这里插入图片描述

3.部署监控
1.在每个节点上导入visualizer.tar镜像

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
2.创建swarm的监控容器,使监控和docker连接起来

[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

在这里插入图片描述3.查看容器viz和8080端口开启情况
在这里插入图片描述
测试:

浏览器输入:172.25.16.1:8080

在这里插入图片描述