本文来自网易云社区
作者:孙婷婷
背景
在前文《测试环境docker化—基于ndp部署模式的docker基础镜像制作》中已经详述了docker镜像制作及模块部署的过程,按照上述做法已可以搭建测试环境。但是在实践过程中发现存在很多问题:
在一台云主机上搭建多个模块,容易出现资源不足的情况(我们在实验过程中有台云主机好几次宕机,经常要删掉不用的镜像容器);
部分模块之间需要相互调用,为方便部署多套环境简化配置修改,部署时需要确定容器的ip地址;
手动敲命令一个个构建容器,n个模块就要敲n个构建指令,构建容易出错;
基于上述原因,同时参考组内大神倪子的实践《细说Mammut大数据系统测试环境Docker迁移之路》,我们也尝试了引入容器集群编排,来进一步优化测试环境docker化的过程。
容器集群搭建
为解决一台测试环境云主机可能支撑不了一套环境的问题,我们考虑使用多台云主机组成一个容器集群,将多个deploy容器负载均衡的部署到多台云主机上,来实现环境的稳定和资源的合理利用。
要实现多主机的容器部署和分配,需要引入集群调度工具。目前业界比较主流的调度管理工具有Docker Swarm、Google Kubernetes 和 Apache Mesos(基于Marathon框架),其中目前已占领上风的是Kubernetes,成为容器编排管理的最佳实践工具。但是参考倪子的文章和介绍,我最终决定继续选择Swarm来进行实践。在Swarm的学习调研过程中,我发现区别于倪子实践使用的Docker Swarm,docker1.12版本已经进一步推出了内置的简单易用的Swarm mode集群。老的Docker Swarm使用独立的外部KV存储(比如Consul、etcd、zookeeper),搭建独立运行的Docker主机集群,使用KV存储配置进行服务发现。新版的Swarm mode则将docker swarm包含到docker引擎中,并内置了服务发现工具,使得集群搭建进一步简化为直接使用docker swarm命令初始化一台主机作为manager,其他机器加入该swarm成为worker即可。具体命令如下(我们的测试环境共使用3台云主机):
#将一台主机指定为manager,该命令会返回唯一一个集群唯一token,且该节点会同时作为manager和worker运行sudo docker swarm init --listen-addr 10.165.148.87:2377 --advertise-addr 10.165.148.87#在另两台主机上运行上述命令返回的join命令,即可加入该swarm集群sudo docker swarm join \ --token SWMTKN-1-0cytn4js5b8jn0vibtk935y7jptqxv63ttiqui1qhi2uo07emx-cr80z41yz9v2tsn8vyxgy6