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私有仓库和集群相结合)

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

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

创建 Swarm 集群

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

根据提示在其他docker节点server3 server4上执行命令:

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

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

此次报错是由于重启电脑之后原来配置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数 此次解决需要修改内核参数

[root@server3 sysctl.d]# sysctl -a|grep bridge-nf-call-iptables 过滤内核选项

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

[root@server3 sysctl.d]# sysctl --system 使之生效[root@server3 sysctl.d]# docker info 查看docker的详细信息  没有报错

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

server3和server4上同时添加解析

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

重新上传镜性 此时sever4上拉取镜像成功 并从私有仓库拉取速度很快

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

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

创建集群服务

命令行的方式进行部署

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

                   --name 服务名称命名为 my_cluster

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

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

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

访问集群当中任何节点都可以访问并且实现负载均衡

为了能看出实验效果 为服务换个镜像

从外网上拉取镜像myapp1和2

将下载下来的镜像打标签扔到私有仓库  让整个集群下载镜像时从私有仓库下载 速度会加快

访问集群当中的任何节点都可以实现负载均衡

弹性伸缩

[root@server2 docker]# docker service scale webservice=6 拉伸服务的副本数  平均每个主机上开2个 

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

[root@server2 docker]# docker service scale webservice=3  缩减服务的副本数

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

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

部署swarm监控:(各节点提前导入dockersamples/visualizer镜像) 集群配置图像化

 从外网拉取镜像并上传到私有仓库

 docker service create 命令创建一个服务

浏览器访问172.25.15.2 8080 端口

可以看到每个节点都有一个容器

拉伸

 

压缩

滚动更新

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

--image 指定要更新的镜像 --update-parallelism 指定最大同步更新的任务数 --update-delay     指定更新间隔   每次更新两个容器中间间隔两秒钟

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

假设server3上的docker引擎出问题 

server3上的容器出现问题后 它的容器会均衡到其他的节点上  容器总数不变

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

容器拉伸

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

容器回缩

用文件的方式部署节点容器--deploy 部署参数 

 删除节点上的容器 

节点的升降

将server3的节点作为一个master也就是leader  server3处于备份状态 将server2将级  server3自动升级

集群如何删除

在server3leader可看到server2 4已经删除在server3上删掉离开的节点


版权声明:本文为ly660402原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。