docker swarm集群部署及相关服务(监控、滚动更新等)

前言:

Swarm 是 Docker 公司在 2014 年 12 月初发布的一套较为简单的工具,用来管理 Docker 集群,它将一群 Docker 宿主机变成 一个单一的,虚拟的主机。Swarm 使用标准的 Docker API接口作为其前端访问入口。

换言之,各种形式的 Docker Client(docker client in go,docker_py,docker 等)均可以直接与 Swarm 通信。Swarm 几乎全部用 Go 语言来完成开发。Swarmdeamon 只是一个调度器(Scheduler)加路由器(router),Swarm 自己不运行容器,它只是接受 docker 客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm 由于某些原因挂掉了,集群中的节点也会照常运行,当 Swarm 重新恢复 运行之后,它会收集重建集群信息。

在这里插入图片描述

一、实验环境(rhel7.3)

1、firewalld、selinux都为disabled
2、各主机信息如下:

主机ip地址
server1(manager)172.25.1.1
server2(node)172.25.1.2
server3(node)172.25.1.3
foundation1(用来测试)172.25.1.250

二、使实验环境纯净(没有正在运行的容器)

1、server1-3先安装docker服务。

之前的文章已经详细的讲过,不在赘述。

2、清理正在运行的容器

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

二、Docker Swarm集群的搭建部署

1、在管理节点的server1上,初始化swarm集群

[root@server1 ~]# docker swarm init

在这里插入图片描述
在server1节点上查看桥接信息
在这里插入图片描述
在server1节点上查看docker的网络信息
在这里插入图片描述

2、server2,server3(work节点)加入集群

[root@server2 ~]# docker swarm join --token SWMTKN-1-35ghqupt6xkfg5yfqccbt5s49pjrukym9vhgcoytmvtrk8bcbe-43lzcz9mvkzaxslz2q6mpjxbf 172.25.1.1:2377
This node joined a swarm as a worker.

[root@server3 docker]# docker swarm join --token SWMTKN-1-35ghqupt6xkfg5yfqccbt5s49pjrukym9vhgcoytmvtrk8bcbe-43lzcz9mvkzaxslz2q6mpjxbf 172.25.1.1:2377
This node joined a swarm as a worker.

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

  • 在server1(manager节点)查看节点信息
[root@server1 ~]# docker node ls

在这里插入图片描述

三、使用swarm集群,部署web服务

1、三个节点都要导入nginx镜像

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

2、在集群上部署了三个Nginx容器,用来提供服务

[root@server1 ~]# docker network create -d overlay webnet		#创建驱动为overlay的网络

[root@server1 ~]# docker service create --name web  \
> --network webnet \
> --replicas 3 \   	#–replicas 3就是代表集群的个数变为3。manager会将容器平均分配到三个节点上
> -p 80:80 \   	#或-publish 80:80或-publish=80:80/tcp
> nginx				 #创建一个名称为web,副本为3,开放端口为80的nginx容器
 
#这里使用的是自己创建的驱动为overlay的网络(值的一提的是:如果这里指定网络,则必须是驱动为overlay的网络)。当然也可以不加--network webnet,使用默认的网络。只是使用自己的网络,可能出现的问题会比较少。

在这里插入图片描述

  • 查看80端口
    在这里插入图片描述
  • 查看docker服务列表
    在这里插入图片描述
  • 查看docker集群的web服务列表
    在这里插入图片描述

2、三个节点都要操作:从容器中复制文件到容器nginx默认发布目录

server1:

[root@server1 ~]# vim index.html
[root@server1 ~]# cat index.html
server1
[root@server1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fad2156c5b35        nginx:latest        "nginx -g 'daemon of…"   6 minutes ago       Up 6 minutes        80/tcp              web.2.lqzyse4y1hn63uhbtl0erc038
[root@server1 ~]# docker cp index.html web.2.lqzyse4y1hn63uhbtl0erc038:/usr/share/nginx/html

server2:

[root@server2 ~]# cat index.html
server2
[root@server2 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
03274e9981d1        nginx:latest        "nginx -g 'daemon of…"   9 minutes ago       Up 9 minutes        80/tcp              web.3.jcr8ojyzrlozoeqtqa5ed9zh6
[root@server2 ~]# docker cp index.html web.3.jcr8ojyzrlozoeqtqa5ed9zh6:/usr/share/nginx/html

server3:

[root@server3 ~]# vim index.html
[root@server3 ~]# cat index.html 
server3
[root@server3 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d7146439a312        nginx:latest        "nginx -g 'daemon of…"   10 minutes ago      Up 10 minutes       80/tcp              web.1.k4hyyrueybz4dod3z3sslzc0j
[root@server3 ~]# docker cp index.html web.1.k4hyyrueybz4dod3z3sslzc0j:/usr/share/nginx/html

3、在物理机上测试(负载均衡)

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

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

四、容器拉伸以及缩减(增加或减少服务数目)

1.拉伸(增加scale的数目)

[root@server1 ~]# docker service scale web=6
  • 查看每个主机上正在运行的容器个数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 查看docker集群的web服务列表

[root@server1 ~]# docker service ps web

在这里插入图片描述

2、测试

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

在这里插入图片描述
我们可以看到六个容器都可以访问。

2.减少scale的数目

[root@server1 ~]# docker service scale web=3

在这里插入图片描述
测试i:
在这里插入图片描述

五、监控

首先,在网上下载visualizer.tar

1.在server1上,导入visualizer镜像

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

在这里插入图片描述
查看容器:
在这里插入图片描述

2、创建swarm的监控容器

[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

在这里插入图片描述

  • 查看运行viz的容器

在这里插入图片描述

  • 查看8080端口
    在这里插入图片描述

3、测试:web页面去监控管理的集群每个容器的状态

在这里插入图片描述

  • 当server3的docker服务关闭后,web从server3转移到别的节点
    在这里插入图片描述
    在这里插入图片描述
    值的一提的是:即使server3的docker服务重新启动,web也不会从server2重新移回到server3。除非执行增加服务或减少服务的操作,使Docker swarm集群重新分配节点的数目

  • 当增加服务的数目时,Docker swarm集群会自动分配每个节点的web数目,并展示到监控界面

[root@server3 ~]# systemctl start docker

[root@server1 ~]# docker service scale web=12

在这里插入图片描述

六、滚动更新(灰度更新)

1、导入要更新镜像

(这里以httpd镜像为例。值的注意的是:滚动更新用的镜像和之前的镜像必须是平行的,即结构类似,比如端口等等——因为上篇博文中创建web服务时用到了80端口,所以滚动更新使用的镜像中也必须是80端口)

[root@server1 ~]# docker load -i httpd.tar 
[root@server2 ~]# docker load -i httpd.tar 
[root@server3 ~]# docker load -i httpd.tar 

2、增加web服务数目为30

[root@server1 images]# docker service scale web=30

在这里插入图片描述
看到的镜像是nginx:latest(滚动更新之前)

3、设定每5秒更新一次,每次更新5个

docker service update --image httpd --update-delay 5s --update-parallelism 5 web

在这里插入图片描述
在这里插入图片描述
看到的镜像是httpd:latest(滚动更新之后)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值