引言
五阿哥钢铁电商平台(www.wuage.com)是由钢铁行业第一的中国五矿与互联网第一的阿里巴巴联手打造,并充分运用双方股东优势资源,即:阿里巴巴在大数据、电商运营、互联网产品技术上的巨大优势,尤其是在B2B
终端买家上的独有市场基础,以及中国五矿67年的行业经验,和遍布全球的200多个营销和物流网点,致力于为钢铁行业带来全新而持续的发展。
Docker容器云平台是五阿哥运维技术团队为内部服务整合、开发的一套容器管理平台,支持基础设施私有云和公有云对接,实现云上和云下实例使用一套平台进行管理,业务实例按需弹性扩容和缩容,规范化的
项目管理流程、测试、上线流程,旨在将开发、测试人员从基础环境的配置与管理中解放出来,使其更聚焦于自己的业务开发。
本文主要结合在五阿哥业务场景情况,从以下三个部分讲解:
1、为什么使用Docker技术
2、Docker容器云架构方案
3、技术的选型和实践
为什么使用Docker技术
1、硬件资源利用率问题造成部分成本浪费
在网站功能中不同的业务场景有计算型的,有IO读写型的,有网络型,有内存型的,集中部署应用就会导致资源利用率不合理的问题。比如,一个机器上部署的服务都是内存密集型,那么CPU资源就都很容易浪费了。
2、单物理机多应用无法对无法进行有效的隔离,导致应用对资源的抢占和相互影响
一个物理机器跑多个应用,无法进行所使用的CPU,内存,进程进行限制,如果一个应用出现对资源的抢占问题,就会引起连锁反应,最终导致网站部分功能不可用。
3、环境、版本管理复杂,上线部署流程缺乏,增加问题排查的复杂度
由于内部开发流程的不规范,代码在测试或者上线过程中,对一些配置项和系统参数进行随意的调整,在发布时进行增量发布,一旦出现问题,就会导致测试的代码和线上运行的代码是不一致的,增加了服务上线的风险,也增加了线上服务故障排查的难度。
4、环境不稳定,迁移成本高,增加上线风险
在开发过程中存在多个项目并行开发和服务的依赖问题,由于环境和版本的复杂性很高,不能快速搭建和迁移一个环境,导致无法在测试环境中无法模拟出线上的流程进行测试,很多同学在线上环境进行测试,这里有很高的潜在风险,同时导致开发效率降低。
5、传统虚拟机和物理机占用空间大,启动慢,管理复杂等问题
传统虚拟机和物理机在启动过程进行加载内核,执行内核和init进行,导致在启动过程占用很长时间,而且在管理过程中会遇到各种各样的管理问题。
Docker容器云架构方案
基于Docker容器技术,运维技术团队开发了五阿哥网站的容器云平台。整体架构图如下:
私有云(VMware)和公有云(aliyun)进行统一托管,包含网络区域配置,VM实例开通及Docker的环境初始化配置等。
Docker容器云平台集群节点管理,Saltstack进行配置管理,镜像中心管理业务镜像,统一监控,统一日志管理,定时任务管理。
服务注册,服务发现,容器节点在线的扩容和缩容,服务优雅上线,回滚降级,规范Java,Node,Python,iOS,Android等规范化的上线。
规范化整个业务流程,简洁的用户流程,可动态管理整个云环境的所有资源。
技术选型及实践
镜像标准
众所周知,Docker的镜像是分层的。对镜像分层进行约定:
第一层是操作系统层,由CentOS/Alpine等基础镜像构成,安装一些通用的基础组件;
第二层是
中间件层,根据不同的应用程序,安装它们运行时需要使用到的各种中间件和依赖软件包,如,nginx、tomcat等;
第三层是应用层,这层仅包含已经打好包的各应用程序代码。
经验总结:如何让自己的镜像变的更小,PUSH的更快?
- dockerfile构建应用镜像,在中间件层遇到一些需要安装的软件包时,尽可能的使用包管理工具(如yum)或以git clone方式下载源码包进行安装,目的是将软件包的copy和安装控制在同一层,软件部署成功后清除一些无用的rpm包或源码包,让基础镜像的尺寸更小。
- Java应用镜像中并没有将jdk软件包打入镜像,将jdk部署在每台宿主上,在运行镜像时,通过挂载目录的方式将宿主机上的java家目录挂载至容器指定目录下。因为它会把基础镜像撑得非常大;
- 在构建应用镜像时,docker会对这两层进行缓存并直接使用,仅会重新创建代码出现变动的应用层,这样就提高了应用镜像的构建速度和构建成功后向镜像仓库推送的速度,从整体流程上提升了应用的部署效率。
编排工具
Rancher图形化管理界面,部署简单、方便, 可以与AD、LDAP、GITHUB集成,基于用户或用户组进行访问控制,快速将系统的编排工具升级至kubernetes或者swarm,同时有专业的技术团队进行支持,降低容器技术入门的难度。
基于以上优点我们选择Rancher作为我们容器云平台的编排工具,在对应用的容器实例进行统一的编排调度时,配合Docker-Compose组件,可以在同一时间对多台宿主机执行调度操作。同时,在服务访问出现峰值和低谷时,利用特有的rancher-compose.yml文件调用“SCALE”特性,对应用集群执行动态扩容和缩容,让应用按需求处理不同的请求。
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。