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