设为首页 收藏本站
查看: 950|回复: 0

[经验分享] Docker + Rally 做Openstack 自动化测试

[复制链接]

尚未签到

发表于 2018-5-29 06:09:39 | 显示全部楼层 |阅读模式
随着我国计算机技术的蓬勃发展,特别是近几年互联网+行业的兴起,人们对计算、存储、网络的要求也越来越高,面对越来越复杂多变的需求,传统的物理机-应用服务器方式越来越难于招架,私有云平台作为一个崭新的模式应运而生,并为IT 业的发展指明了方向。私有云平台具有高扩展性、高融合性、高灵活性、低成本等特点。如今,越来越多的主流企业已经采用OpenStack 云平台作为私有云的第一解决方案。
OpenStack
OpenStack是一个美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权,并且是一个自由软件和开放源代码项目。 OpenStack是IaaS(基础设施即服务)组件,让任何人都可以自行建立和提供云端运算服务。作为一个大型的开源项目,其项目重点在于对各种不同组件的广泛支持和对各种功能的扩展完善上,但这在生产环境下,特别是在某些极端条件下的性能表现就存在着一定的缺陷,需要我们后期去完善补全。
如果你对OpenStack较为熟悉,你就会知道OpenStack其实是一个非常庞大的系统,非常多的相互配合的服务(service)运行其中。因此,利用通用性能测试软件(Loadrunner,Jmeter等)进行性能测试发压,脚本编写量巨大,实施复杂度高。而OpenStack社区推出的rally测试引擎,具有更高的针对性和可用性。
Rally
Rally 是一个基准测试工具,可以帮助我们判断出OpenStack表现如何,特别是在有负载的场景中。你可以使用Rally的各种场景测试脚本来对你的OpenStack环境进行性能测试,基准测试,功能验证。
DSC0000.png
DSC0001.png

组成

  • Deploy engine:可以与流行的部署器如DevStack、Fuel等结合使用,完成OpenStack测试环境部署或者独立完成已有测试环境注册的插件。
  • Verification:使用Tempset(OpenStack社区的接口自动化测试工具)来验证已部署的OpenStack云环境的功能性。
  • Benchmark engine:允许在云环境中制造并发负载,并进行基准测试。
  •   Generate report:报表生成器,负责读取rally的测试结果(存储于数据库),生成报表。
应用



  

工作中的实际使用场景

  •   研发人员:针对新代码通过rally发压,验证新代码对整个系统带来的性能影响;
  •   测试人员:针对新版本通过rally发压,评估新版本是否达到性能预期,进而产生调优需求;
  •   运维人员:针对新搭建的客户生产环境,通过rally发压,获取生产环境的性能阀值;
  •   销售人员:针对客户演示环境,通过rally发压,展示系统的性能表现;
问题
在公司实际使用中,研发、测试、运维、销售都需要经常使用rally来获取性能参数,这就存在着以下几个问题急需解决:

  •   重复安装:Rally安装虽然简单,但是需要让研发、测试、运营、销售等相关人员都熟练掌握,并繁琐而重复的使用,存在成本大效率低的缺点;
  •   Rally代码本地化:Rally安装虽然非常简单,但是在国内环境中,需要修改其报表调用的Google组件(具体方式在网络上已经有很多文件介绍),否则其报表无法正常显示;
  •   Rally代码定制:为了满足公司实际工作需要,对代码进行的进一步完善或者配置;如:加入公司LOGO、增加新的报表内容、测试场景的定制等;
  •   环境冲突:由于rally对主机性能消耗比较小,经常需要和别的应用共享一台物理服务器,这就容易产生环境冲突,如:宿主机需要A包的1.0版本,而rally需要A包的2.0版本,进而产生依赖矛盾,造成宿主机上多个程序不能共存;
针对以上问题,我们经过市场调研,确定Docker技术可以全面满足我们的需求。
Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何机器上。
特点:

  •   允许实例简单、快速地扩展
  •   创建应用镜像并进行复制
  •   创建容易分发的即启即用的应用
  •   隔离应用依赖
应用场景:

  •   标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
  •   快速部署和启动,docker容器启动是秒级;
  •   节约成本, docker容器对磁盘的使用可以减少到MB级;
  •   方便持续集成,通过与代码进行关联使持续集成非常方便;
可以看出docker可以全面满足我们的需求,但是同样也带来了新的问题:

  •   Docker image制作繁琐;
  •   对于研发、测试、运维、销售人员,学习docker的使用同样需要花费时间、精力;
  •   针对不同环境,安装docker,下载image,运行docker container等操作,同样复杂而繁琐;
那么针对以上问题,有没有一种简化方式,可以让使用者不用关心docker命令,不再执行重复的指令呢?答案是肯定的,这就是被我们称为docker持续交付系统的一套实现方法。
Docker-Rally持续交付系统
此系统主要包括2个方面:
Docker Image交付模块:此脚本为交付给用户使用的脚本,用户使用此脚本只需要了解基本的命令,就可以自动化的完成Docker环境的搭建,Rally环境的搭建、注册设置等操作;
Docker Image制作模块:此操作需要对Docker、Rally(应用系统)等熟悉的操作者,一般为应用服务的开发者或维护者;
Docker Image交付模块
此模块主要实现自动搭建rally环境,封装docker指令实现Docker透明化和环境卸载几个子模块。
自动搭建Rally环境

  •   模块判断系统是否安装docker,如果没有安装则自动安装docker,则自动安装;核心代码:
yum -y install docker                           #安装docker

  •   自动登录指定的docker账号,下载最新版本的rally-image到本地环境;核心代码:
docker login                                    #登录dockerdocker pull t2clouddocker/rally                     #下载image

  •   创建容器,映射端口22到host的33333端口,用于ssh服务;把host的/home/rally_json和/home/rally_result文件夹挂载到容器中,用于存放配置文件及测试结果;核心代码:
docker run -i -t -d -p 33333:22 -v /home/rally_result/:/home/rally_result/ -v /home/rally_json/:/home/rally_json/ --privileged=true t2clouddocker/rally                     #启动容器

  •   把预存的rally配置信息拷贝到/home/rally_json中。
  •   提供rally注册功能,通过读取OpenStack环境配置文件,把已有的OpenStack环境注册到rally系统中;
  •   提供rally备份功能,对rally的数据库进行备份;
封装Docker指令
此操作是简化用户操作的重点,通过对docker命令的封装,使用户感觉不到docker容器的存在,进而直接在宿主机上执行容器内的rally指令,完成docker的透明化。创建rally.sh文件,用于在宿主机中操作docker中的rally程序。核心代码:
rally="#!/bin/bash \n \[ \"\$*\"x = x -o \"\$1\"x = \"help\"x ] && { echo \"******************使用说明*******************\"; \n \                                              echo \"all   :运行所有场景(python /home/rally_json/run_rally.py)\"; \n \                                              echo \"bash  :运行bash命令\"; \n \                                              echo \"backup:备份rally数据库到rally_result路径\"; \n \                                              echo \"help  :显示帮助信息\"; \n \                                              echo \"其他  :执行rally命令\"; exit; } \n \[ \"\$1\"x = \"all\"x ] && { docker exec -i $ids python /home/rally_json/run_rally.py;exit; } \n \[ \"\$1\"x = \"bash\"x ] && { docker exec -i $ids \$2;exit; } \n \[ \"\$1\"x = \"backup\"x ] && { docker exec -i $ids cp /var/lib/rally/database/rally.sqlite /home/rally_result/;exit; } \n \ docker exec -i $ids rally \$*"创建的rally.sh会通过软连接(ln -s)为rally,这样在宿主机执行rally命令,实际上是调用rally.sh脚本,通过rally.sh脚本完成了指令从宿主机到Docker Container的穿透。使用户忽略了docker的存在,做到“就像是在本机运行rally一样”。
环境卸载
此子模块实现了rally环境的卸载,包括:备份rally数据库、删除Docker Container、删除Docker image、删除rally.sh脚本等
Docker Image制作模块
模块主要实现自动安装docker环境、自动拉取最新代码、自动生成Docker Image,并把制作的image上传到Docker Hub中。代码核心:

  •   从git服务器拉取rally代码;核心命令:
yum -y install git docker                           #安装工具git clone git://git.openstack.org/openstack/rally       #拉取代码

  •   运行rally代码中的Dockerfile生成docker image;核心命令:
docker build -t DockerHubId/rally:x .                   #生成imagedocker push DockerHubId/rally:x                 #上传镜像到HubDocker交付系统
其实,以上整个流程,不仅仅是Rally性能测试应用程序的交付系统,也同样是Docker实际应用的经典场景的自动化实现。我们可以按照此设计思路稍加修改,就可以实现接口自动化测试的自动交付系统、存储系统的性能测试自动交付系统、演示环境的自动交付系统等等。
通过对Docker命令的封装,使用户既享受到Docker带来的便利,又可以忽略Docker操作上的不便,使Docker透明化。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-482305-1-1.html 上篇帖子: 删除docker私有仓库中的镜像 下篇帖子: docker 容器中时间的设置(跟系统同步)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表