Bootstrap

如何使用Rally+Docker测试OpenStack

一.为什么要用Rally Docker

1.为什么要通过Docker使用Rally

众所周知,软件产品部署环境的变化(譬如,从A环境到B环境等),会导致测试环境响应的变化。那么,有没有一种办法,可以更好的解决这种环境迁移导致的诸多问题。即让测试环境更加自主、可控和轻量。

Docker时代的来临,无疑,为我们提供了一把新的钥匙。

通常,为了构建这样的一个测试平台,即便是熟练者往往也需要花费30分钟以上的时间。通过使用Docker容器化,将Rally独立于宿主机OS,而单独运行在容器中,可以做到系统隔离,平台复用和分布式测试等高效用途。

社区对OpenStack的集成测试工具采用Tempest,性能测试采用Rally。众所周知,性能测试一般是在一个软件产品在某个迭代内开发完毕,上线部署之前执行。

作为OpenStack测试领域内的急先锋,Rally当然也不例外。典型的应用场景:一是对内部基于OpenStack开发的产品做性能测试;二是做服务实施时,给客户做的POC以及上线之前的性能测试等。需要尤为注意的是,由于性能测试依赖于硬件物理资源配置,所以应当根据实际情况出发,甄别出不同环境下的性能测试差异。

2.什么是Rally

Rally 常用于模拟高并发场景的压力测试。比如OpenStack API在并发下的响应时间和请求成功率,从而测试出OpenStack的规模和性能。Rally特性如下:

  • Rally 会自动部署一个OpenStack的环境, 并运行tempest来验证环境;
  • Rally会模拟生成用户负载,以提供性能测试问题;
  • Rally通过Ceilomter来收集 Hypervisor 和VM的数据,并放在Rally的数据库中;
  • Rally 最终会生成可读性极佳的性能测试报告;

图片描述

  • Deploy engine:并不是一个OpenStack的部署器(deployer),而是一个类似于插件的结构(pluggable mechanism),可以很好的与流行的部署器如DevStack、Fuel等结合使用;
  • Verification:使用Tempset来验证已部署的OpenStack云环境的功能性;
  • Benchmark engine:允许在云环境中制造并发负载,进行压力测试;

目前,有如下一些公司但不限于在社区贡献Rally:

图片描述

使用Rally的三个高水平案例

图片描述

从上图可以知道,Rally典型的作用有:

  • 自动化测试和分析,了解新并入的代码对OpenStack的影响;
  • 使用Rally profiler来检测性能问题;
  • 测试不同部署方式对于操作系统性能的影响;
  • 创建针对不同规模的负载压力;
  • 检测不同负载下,基本云主机操作的性能情况;
  • 测试涉及到OpenStack的几乎所有使用场景;
  • 最核心的是,Rally可以是QA测试、DevOps、CI/CD中不可或缺的重要组成部分;

二.安装和使用Docker

备注:
这里,我的操作环境是Rally docker和由DevStack安装的OpenStack环境均构建在同一个CentOS 7虚拟机中。

1)Docker软件包已经包含在默认的CentOS-Extras软件源里,安装命令如下:

# yum -y install epel-release
# yum install docker -y

2)当Docker安装完成之后,你需要启动docker进程:

# systemctl restart docker

3)如果我们希望Docker默认开机启动,如下操作:

# systemctl enable docker

4)配置Docker加速器。这里我们使用daocloud提供的docker镜像加速服务:

#sed -i 's|other_args="|other_args="--registry-mirror=http://768e1313.m.daocloud.io |g' /etc/sysconfig/docker

#sed -i "s|OPTIONS='|OPTIONS='--registry-mirror=http://768e1313.m.daocloud.io |g" /etc/sysconfig/docker

#sed -i 'N;s|\[Service\]\n|\[Service\]\nEnvironmentFile=-/etc/sysconfig/docker\n|g' /usr/lib/systemd/system/docker.service

# sed -i 's|fd://|fd:// $other_args |g' /usr/lib/systemd/system/docker.service

5)重启服务:

# systemctl daemon-reload
# systemctl restart docker

6)现在,我们来验证 Docker 是否正常工作以及为下一步安装Rally做足准备。为此,我们需要下载centos 7镜像。

# docker pull centos:7

7)下一步,我们运行下边的命令来查看镜像,确认镜像是否存在:

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED                  VIRTUAL SIZE
docker.io/centos    7                   eeb3a076a0be        Less than a second ago   196.7 MB
;