微信号:Gcloudyun

介绍:专注游戏运营十五年,提供的不止是技术服务 G云是以盛大游戏15年支撑经验为基础,经过几百款游戏锤炼打造而成的定制云平台; 拥有20个骨干机房、近万台各种配置的备用服务器,满足你不同的需求; 提供稳定、可靠、高效、灵活的服务。

Docker系列文章--Docker内置Swarm 模式介绍

2016-11-30 17:41 G云定制云

目录

1、创建Docker Swarm 集群

2、操作Docker Swarm 集群节点

3、在Docker Swarm 集群中部署业务

4、参考文档



7月29日,Docker发布了第一个集成了swarm mode的Docker 版本v1.12.0,时隔20天的8月19日又迅速跟进了小版本v1.12.1,前几天10月13日又推出了v1.12.2,相比于之前的Docker版本来说,v1.12最大的不同在于将swarm mode集成到了docker engine中,通过docker cli便可管理Docker swarm集群。


关于docker swarm的特性和亮点,在https://docs.docker.com/engine/swarm/ 中都有介绍。简单总结一下,其中最大的亮点:


1、docker 1.12在Docker Engine内部集成了Swarm集群功能,极大的简化了用户自己构建Swarm集群的难度;

2、提供了容器扩容和负载均衡;

3、故障自动恢复;

4、自动升级和升级回滚,目前可以定义在指定的时间完成业务自动升级,如果升级失败可以实现业务回滚;


对于在Docker v1.12版本之前就开始使用Docker的用户来说,可能会面临再次选择的问题,因为大多数早期使用Docker的公司,都投入了很大精力来做自己的Docker管理平台,目前的Docker容器管理平台主要分三类,第一类基于Kubernetes,第二类基于Swarm,第三类完全自研。现在Docker1.12集成了Swarm Mode来管理Docker集群,而且从目前听到的消息来说,v1.12只是一个开始,Docker公司后续还会在这点上继续发力,提供更多好的特性。


那是不是Docker Engine in swarm mode就是将来构建Docker集群的一个大趋势呢?


或许未必,因为前段时间,OpenStack也宣布了使用Kubernetes重写底层编排引擎,详细链接:


http://www.cww.net.cn/news/html/2016/8/22/201682285718394.htm ,


OpenStack的火热程度,在云计算的圈子里几乎无人不知。他们两者的结合意味着什么?强强联手,还是抱团取暖。因为毕竟OpenStack在容器管理这部分做的并不好,加上Docker 1.12内置的swarm mode又那么来势汹汹。


OpenStack不发力是不行的。对于公司,和最终用户来说,或许没有最优选,跟OpenStack还是Docker公司或者自成一派,完全取决于决策者的判断。


铺垫了那么多废话,接下来进入本篇的主题,Docker Engine in swarm mode集群应该如何管理。


一、创建Docker Swarm 集群


创建Docker Swarm集群之前,需要先完成以下准备工作:


1. 安装Docker v1.12或后续更新版本;

2. Docker宿主机推荐配置3个网卡,一个管理网络和两个工作网络;

3. 确保管理网络能连通所有的集群节点;

4. 确认防火墙允许无干扰策略;

5. 确定Docker宿主机中TCP 2377,TCP和UDP的7946,4789端口未被占用;


创建swarm集群非常简单,只需要docker swarm init 命令即可完成,用法如下:




创建swarm 集群时大部分参数都可以保持默认,如果需要更改的话,创建完成之后可以docker swarm update更改,详见:docker swarm update --help




在Docker宿主上运行上面命令创建swarm集群之后,其自身也将被以工作节点的角色添加到整个swarm 集群中。


二、操作Docker Swarm 集群节点


处于对传统集群的理解,一般都会有管理节点,和工作节点。在Docker Swarm集群也类似,它包括两种类型的节点work node和manager node。


work node直译就是工作节点,功能就是运行docker 容器;


manager node管理节点,同时也兼顾了work node的功能,但是可以通过配置使其只做为管理节点,manager node功能包括,管理swarm集群的状态,节点的状态监控,任务的调度,任务执行等等,在Swarm集群中非常重要,通常在实际部署过程中都会考虑故障冗余,避免单点。


添加删除work node


添加work node,首先在manager node上执行docker swarm join-token worker获取加入该集群的命令,如下。




同样,如果需要添加manager node的话,可以使用docker swarm join-token manager 获取命令;


删除work node,首先是在manager node 上执行,docker node rm docker-node-name ,删除work node,删除之前需要确保当前Docker宿主无docker运行中的容器,并使用systemctl stop docker.service停止Docker服务,否则需要指定强制参数--force。然后在worker  node上执行docker swarm leave;


注意  如果希望上一个token失效,可以使用docker swarm join-token --rotate worker ,--rotate参数用于生成一个新的token,这是出于安全考虑,防止用户使用之前的token随意的往docker swarm集群中添加worker node,针对manager node同样可以使用docker swarm join-token --rotate manager 来避免随意添加。


集群节点状态查看


使用docker node ls,查看集群节点状态




使用 docker node ps docker-node-name,查看某个节点上运行容器的状态




使用docker node inspect docker-node-name 查看节点明显信息


集群节点角色切换


将worker node 升级为manager node




将manager node 降级为worker node




三、在Docker Swarm 集群中部署业务


创建Swarm集群,添加节点之后,现在就要在集群中部署业务了。


在非集群情况下,使用docker run来启动一个容器,在docker run命令中,可以指定很多参数,包括端口映射,磁盘挂载,网络配置,启动参数等等。


那么在Swarm集群中,也提供了一个简单的命令,docker service 。使用它,就可以部署一个具备高可用特性业务。该命令同样可以指定一些参数,与docker run命令携带的参数比较类似,但也有一些特有的参数,比如--replicas,指定副本数量。也就是Swarm模式内置lvs的节点数量。详细可以使用docker service create --help 参考具体参数。


service 创建与状态查看


使用docker service create,部署一个web业务,对外暴露80端口;




查看集群中所有服务




查看某个服务,实际容器的具体分布





service 副本操作


使用docker service scale调整容器副本份数,可以扩容,或者缩容,注意不是加多少或者减多少,而是指定为多少副本数




服务的删除


docker service rm 用于删除service,删除之后,容器将被销毁。




四、参考文档


https://docs.docker.com/engine/swarm/


https://mmonit.com/monit/documentation/monit.html




 
G云定制云 更多文章 Docker系列文章--Docker内置Swarm 模式介绍 MySQL字符集介绍及乱码解决方法 Docker系列文章--基于Docker的高可用架构实践 Docker系列文章--Docker容器内多进程管理(二) 数据挖掘之用户画像实时更新流程
猜您喜欢 SegmentFault 高新无码 Leak No.1 携程App网络服务通道治理和性能优化@2016 手把手教你使用ggplot2绘制散点图 使用AndFix进行Hot fix JDK8在泛型类型推导上的变化