Docker + Rally 做Openstack 自动化测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介:

随着我国计算机技术的蓬勃发展,特别是近几年互联网+行业的兴起,人们对计算、存储、网络的要求也越来越高,面对越来越复杂多变的需求,传统的物理机-应用服务器方式越来越难于招架,私有云平台作为一个崭新的模式应运而生,并为IT 业的发展指明了方向。私有云平台具有高扩展性、高融合性、高灵活性、低成本等特点。如今,越来越多的主流企业已经采用OpenStack 云平台作为私有云的第一解决方案。

OpenStack

OpenStack是一个美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权,并且是一个自由软件和开放源代码项目。 OpenStack是IaaS(基础设施即服务)组件,让任何人都可以自行建立和提供云端运算服务。作为一个大型的开源项目,其项目重点在于对各种不同组件的广泛支持和对各种功能的扩展完善上,但这在生产环境下,特别是在某些极端条件下的性能表现就存在着一定的缺陷,需要我们后期去完善补全。

如果你对OpenStack较为熟悉,你就会知道OpenStack其实是一个非常庞大的系统,非常多的相互配合的服务(service)运行其中。因此,利用通用性能测试软件(Loadrunner,Jmeter等)进行性能测试发压,脚本编写量巨大,实施复杂度高。而OpenStack社区推出的rally测试引擎,具有更高的针对性和可用性。

Rally

Rally 是一个基准测试工具,可以帮助我们判断出OpenStack表现如何,特别是在有负载的场景中。你可以使用Rally的各种场景测试脚本来对你的OpenStack环境进行性能测试,基准测试,功能验证。

图片描述

wKiom1gENjqiC2fLAAGWRypUWbs100.png-wh_50

组成

  • Deploy engine:可以与流行的部署器如DevStack、Fuel等结合使用,完成OpenStack测试环境部署或者独立完成已有测试环境注册的插件。

  • Verification:使用Tempset(OpenStack社区的接口自动化测试工具)来验证已部署的OpenStack云环境的功能性。

  • Benchmark engine:允许在云环境中制造并发负载,并进行基准测试。

  • Generate report:报表生成器,负责读取rally的测试结果(存储于数据库),生成报表。

应用

wKioL1gENjvQcWGxAAHWj150j9o605.png-wh_50



图片描述图片描述工作中的实际使用场景

  • 研发人员:针对新代码通过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可以全面满足我们的需求,但是同样也带来了新的问题:

  1. Docker image制作繁琐;

  2. 对于研发、测试、运维、销售人员,学习docker的使用同样需要花费时间、精力;

  3. 针对不同环境,安装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                 #上传镜像到Hub

Docker交付系统

其实,以上整个流程,不仅仅是Rally性能测试应用程序的交付系统,也同样是Docker实际应用的经典场景的自动化实现。我们可以按照此设计思路稍加修改,就可以实现接口自动化测试的自动交付系统、存储系统的性能测试自动交付系统、演示环境的自动交付系统等等。

通过对Docker命令的封装,使用户既享受到Docker带来的便利,又可以忽略Docker操作上的不便,使Docker透明化。



本文转自 OpenStack2015 51CTO博客,原文链接:http://blog.51cto.com/andyliu/1862552,如需转载请自行联系原作者
相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
65 9
|
2月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
3月前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
122 2
|
3月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
50 3
|
5月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
45 1
|
5月前
|
消息中间件 测试技术 RocketMQ
docker部署RockerMQ单机测试环境
docker部署RockerMQ单机测试环境
|
5月前
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
65 0
|
6月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
5月前
|
分布式计算 大数据 Hadoop
最快方式搭建docker大数据 测试集群
【8月更文挑战第5天】快速搭建Docker大数据测试集群可采用预构建镜像与Compose文件、利用云服务如AWS的ECS、自动化工具如Ansible或参考在线教程。只需简单配置如内存分配及路径,运行`docker-compose up`即可启动含NameNode、DataNode等组件的Hadoop集群。根据需求与资源选择合适方法。
|
8月前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
181 1
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像