作者:董春明 来源:DockOne.io 原文链接:http://www.dockone.io/article/2019 随着公司业务规模的逐渐扩大,传统的基于机器层面的部署系统在面对服务扩缩容、故障迁移、成本控制等方面已经越来越力不从心,于是,我们开始将容器技术与当前公司内部已有的自动化运维体系相结合,来实现一套艺龙的容器云平台,以期解决上述问题。 原有部署平台的架构设计 在讲解部署系统之前,我先给大家讲一下目前艺龙自动化运维的业务模型。早期艺龙的运维,因为规模较小,通常人工处理,当规模大了以后,就开始尝试基于Puppet等脚本的方式操作。随着规模的进一步扩大,逻辑需求的增加,使得原有的这种基于行为的模型很难更高效的进行管理。
控制系统图 我们基于控制系统开发了一个部署插件,用户将已经打好等待部署的代码上传到FTP上固定的位置,然后调用部署API对某个服务触发一次该版本的部署操作,控制系统就会根据用户定义的控制策略下发给相应的服务器上的客户端,客户端执行部署插件,由插件进行包下载、解压、部署、启停等操作,完成整个上线。 上线图 我们的整个部署架构如下: 部署架构图 基于容器化的部署平台架构设计 当前的自动化部署体系已经能够实现系统的快速部署,但是,由于公司规模的发展,服务的规模越来越大,硬件设备购买和运维的成本也都越来越高。同时,对于电商网站,经常会遇到比如黄金周,双11,抢红包这种请求量的突增的情况,对于系统能够随时快速的扩展,以及过后机器快速回收就提出了要求,因此,为了更进一步,我们要解决两个问题:
部署架构图 2 从图中我们可以看到,我们的改造很简单,在原有体系的基础上,增加了三个主要部分: 服务发现与名字服务 对于服务发现层面,我们总结了几种常用的手段:
遇到的问题以及解决方案 因为我们对Docker层面的依赖较少,所以就使得我们在这一层面遇到的问题也较少,我整理了两个大家可能都遇到过的问题: 1. 容器rootfs文件系统问题 我们最开始采用的是默认的device-mapper方式作为容器的rootfs,如果应用没有大量的IO操作还好,但是毕竟不是每个用户都能按照最佳实践去做,因此早期经常由于某个服务大量占用IO资源而导致整个宿主机的容器都被影响。 2. 网络问题 我们早期使用了默认的基于NAT的方式,结果遇到了非常多的问题,比如我们在做HTTP的压测时,发现性能无论如何都上不去,看了内核的日志,发现大量的 NAT ip_conntrack: table full,才发现是TCP的Established Connection记录满了。 TO DO
以上就是我今天分享的全部内容,谢谢大家,大家有自动化运维层面的相关问题,都可以和我交流交流哈~ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|