Docker --三剑客之三: docker-swarm构建docker集群

Docker Swarm简介

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。

Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。

Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。 

Docker Swarm 优点

任何规模都有高性能表现

灵活的容器调度

服务的持续可用性

和 Docker API 及整合支持的兼容性

Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

docker swarm 相关概念

节点分为管理 (manager) 节点和工作 (worker) 节点

任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。

服务 (Services) 是指一组任务的集合,服务定义了任务的属性。 

Docker Swarm实践

实验环境:  server1作为私有仓库  server234作为节点集群  (harbor私有仓库和集群相结合)Docker --三剑客之三: docker-swarm构建docker集群_第1张图片

首先清理实验环境 确保没有其他容器 保持本次实验环境干净执行./install.sh脚本可自动拉起集群

Docker --三剑客之三: docker-swarm构建docker集群_第2张图片

[root@server1 harbor]# docker-compose ps  列出所有容器

创建 Swarm 集群

root@server2 ~]# docker swarm init   初始化集群

Docker --三剑客之三: docker-swarm构建docker集群_第3张图片根据提示在其他docker节点server3 server4上执行命令:

[root@server2 ~]# docker node ls  查看swarm集群节点

将server2上的 demo json文件和demo json证书发送给server3 server4

Docker --三剑客之三: docker-swarm构建docker集群_第4张图片Docker --三剑客之三: docker-swarm构建docker集群_第5张图片此次报错是由于重启电脑之后原来配置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数 此次解决需要修改内核参数

[root@server3 sysctl.d]# sysctl -a|grep bridge-nf-call-iptables 过滤内核选项Docker --三剑客之三: docker-swarm构建docker集群_第6张图片

[root@server3 sysctl.d]# vim /etc/sysctl.d/docker.conf 创建docker.conf文件 打开桥接

[root@server3 sysctl.d]# sysctl --system 使之生效Docker --三剑客之三: docker-swarm构建docker集群_第7张图片[root@server3 sysctl.d]# docker info 查看docker的详细信息  没有报错Docker --三剑客之三: docker-swarm构建docker集群_第8张图片

server4上此次也会出现跟server3上一样的报错 解决方法也是一样的 将server3上的docker.conf文件发送到server4上的./etc/sysctl.d/路径下此时 sysctl --system 使之生效即可解决报错

Docker --三剑客之三: docker-swarm构建docker集群_第9张图片Docker --三剑客之三: docker-swarm构建docker集群_第10张图片Docker --三剑客之三: docker-swarm构建docker集群_第11张图片

server3和server4上同时添加解析 Docker --三剑客之三: docker-swarm构建docker集群_第12张图片

Docker --三剑客之三: docker-swarm构建docker集群_第13张图片

 此次拉取镜像会出现报错  harbor所有的数据都存在/data目录下 清除掉仓库的所有数据包括镜像

Docker --三剑客之三: docker-swarm构建docker集群_第14张图片Docker --三剑客之三: docker-swarm构建docker集群_第15张图片Docker --三剑客之三: docker-swarm构建docker集群_第16张图片重新上传镜性 此时sever4上拉取镜像成功 并从私有仓库拉取速度很快Docker --三剑客之三: docker-swarm构建docker集群_第17张图片Docker --三剑客之三: docker-swarm构建docker集群_第18张图片

 测试仓库与我们的集群节点连通性顺畅

Docker --三剑客之三: docker-swarm构建docker集群_第19张图片Docker --三剑客之三: docker-swarm构建docker集群_第20张图片

在管理端server2是检测集群节点状态是否ok

创建集群服务

命令行的方式进行部署

命令解释: docker service create 命令创建一个服务

                   --name 服务名称命名为 my_cluster

                   --network 指定服务使用的网络模型

                   --replicas 设置启动的示例数为3  副本数

Docker --三剑客之三: docker-swarm构建docker集群_第21张图片

设置副本数为3 server2 3 4 上边各分配一个容器

访问集群当中任何节点都可以访问并且实现负载均衡 Docker --三剑客之三: docker-swarm构建docker集群_第22张图片Docker --三剑客之三: docker-swarm构建docker集群_第23张图片Docker --三剑客之三: docker-swarm构建docker集群_第24张图片

为了能看出实验效果 为服务换个镜像 Docker --三剑客之三: docker-swarm构建docker集群_第25张图片

从外网上拉取镜像myapp1和2

Docker --三剑客之三: docker-swarm构建docker集群_第26张图片

将下载下来的镜像打标签扔到私有仓库  让整个集群下载镜像时从私有仓库下载 速度会加快Docker --三剑客之三: docker-swarm构建docker集群_第27张图片Docker --三剑客之三: docker-swarm构建docker集群_第28张图片

Docker --三剑客之三: docker-swarm构建docker集群_第29张图片访问集群当中的任何节点都可以实现负载均衡Docker --三剑客之三: docker-swarm构建docker集群_第30张图片

弹性伸缩

[root@server2 docker]# docker service scale webservice=6 拉伸服务的副本数  平均每个主机上开2个  Docker --三剑客之三: docker-swarm构建docker集群_第31张图片Docker --三剑客之三: docker-swarm构建docker集群_第32张图片Docker --三剑客之三: docker-swarm构建docker集群_第33张图片

[root@server2 docker]# docker service ps webservice 查看不同的容器运行在哪个节点上并且自动的实现负载均衡

Docker --三剑客之三: docker-swarm构建docker集群_第34张图片Docker --三剑客之三: docker-swarm构建docker集群_第35张图片

[root@server2 docker]# docker service scale webservice=3  缩减服务的副本数Docker --三剑客之三: docker-swarm构建docker集群_第36张图片

[root@server2 docker]# docker service rm webservice  删除集群服务

总结:docker swarm相比kubernetes、mesos项目,还是显得单薄,更加适合小wq规模docker集群。 

部署swarm监控:(各节点提前导入dockersamples/visualizer镜像) 集群配置图像化Docker --三剑客之三: docker-swarm构建docker集群_第37张图片

 从外网拉取镜像并上传到私有仓库Docker --三剑客之三: docker-swarm构建docker集群_第38张图片Docker --三剑客之三: docker-swarm构建docker集群_第39张图片

 docker service create 命令创建一个服务

Docker --三剑客之三: docker-swarm构建docker集群_第40张图片Docker --三剑客之三: docker-swarm构建docker集群_第41张图片

浏览器访问172.25.15.2 8080 端口

Docker --三剑客之三: docker-swarm构建docker集群_第42张图片

可以看到每个节点都有一个容器Docker --三剑客之三: docker-swarm构建docker集群_第43张图片

拉伸

Docker --三剑客之三: docker-swarm构建docker集群_第44张图片Docker --三剑客之三: docker-swarm构建docker集群_第45张图片

Docker --三剑客之三: docker-swarm构建docker集群_第46张图片Docker --三剑客之三: docker-swarm构建docker集群_第47张图片 

压缩 Docker --三剑客之三: docker-swarm构建docker集群_第48张图片Docker --三剑客之三: docker-swarm构建docker集群_第49张图片

滚动更新

docker service update --image myapp:v2 --update-parallelism 2 --update-delay 2s webservice

--image 指定要更新的镜像 --update-parallelism 指定最大同步更新的任务数 --update-delay     指定更新间隔   每次更新两个容器中间间隔两秒钟 Docker --三剑客之三: docker-swarm构建docker集群_第50张图片Docker --三剑客之三: docker-swarm构建docker集群_第51张图片

rollback 回滚  (一个一个在回滚)容器回滚

Docker --三剑客之三: docker-swarm构建docker集群_第52张图片假设server3上的docker引擎出问题 

Docker --三剑客之三: docker-swarm构建docker集群_第53张图片Docker --三剑客之三: docker-swarm构建docker集群_第54张图片

server3上的容器出现问题后 它的容器会均衡到其他的节点上  容器总数不变Docker --三剑客之三: docker-swarm构建docker集群_第55张图片Docker --三剑客之三: docker-swarm构建docker集群_第56张图片

恢复server3上的容器   查看容器并没有均衡到server3上

Docker --三剑客之三: docker-swarm构建docker集群_第57张图片

容器拉伸

当拉伸到20个时 会发现sever3上的容器均衡过来

Docker --三剑客之三: docker-swarm构建docker集群_第58张图片Docker --三剑客之三: docker-swarm构建docker集群_第59张图片

容器回缩

Docker --三剑客之三: docker-swarm构建docker集群_第60张图片

用文件的方式部署节点容器 Docker --三剑客之三: docker-swarm构建docker集群_第61张图片Docker --三剑客之三: docker-swarm构建docker集群_第62张图片Docker --三剑客之三: docker-swarm构建docker集群_第63张图片--deploy 部署参数 

 删除节点上的容器Docker --三剑客之三: docker-swarm构建docker集群_第64张图片 

节点的升降

将server3的节点作为一个master也就是leader  server3处于备份状态  Docker --三剑客之三: docker-swarm构建docker集群_第65张图片将server2将级  server3自动升级

集群如何删除

在server3leader可看到server2 4已经删除在server3上删掉离开的节点 Docker --三剑客之三: docker-swarm构建docker集群_第66张图片

你可能感兴趣的:(docker,运维,容器)