本次分享从以下三方面进行:使用Docker对OpenStack平台压力测试实践、使用Docker加速Sahara-Hadoop、Docker在 Nova项目的使用和实践。
无Docker不OpenStack,当前讨论OpenStack总是离不开Docker。这里我先嚼一下剩饭,下面是OpenStack上Docker技术分布的老图。
我们包括生产化/测试/调研阶段的Docker化项目包括了:Heat、Magnum、Sahara、Nova、以及OpenStack平台本身的自动打包和平台稳定性测试方面。
1. Docker OpenStack平台稳定性测试
OpenStack平台本身是一个SOA的项目,具体服务的参数设置需要依据集群规模,服务搭建架构等进行相关测试和调优。Fake是OpenStack Nova Compute下的一个Driver,绝大多数Compute API走到这里简单处理后返回成功。
我们使用Docker来封装Nova Compute,并在Nova 配置中使用Fake。这样每个Docker Container便成为一个虚拟的Nova Hypervisor Node, 便可以模拟Controller集群管理超大量Compute节点的状况;同时Fake Driver 收到请求直接返回成功的特性,让我们可以测试超大量的VM同时创建和同时销毁时给控制节点和MQ带来的压力状况。
这里Docker模拟了物理服务器,解决了测试服务器不足的状况。这只是一个测试例子,由于测试的不同需求,可能 Nova Fake需要频繁的变更配置,Docker 的快速启动和快速销毁也提供了变更测试环境的便利,Dockerfile的定制化需求不仅为镜像频繁变更带来方便也让测试环境本身更易追溯。
2. OpenStack 自动打包
个人认为私有云平台压力通常没有公有云高,但是个性化定制更强。我们内部的定制化需求也很高(例如集群中计算资源的主机级别和机架级别的反亲和等等)。OpenStack的平台的组件需要频繁更新。
我们内部使用的是Puppet推送RPM更新的方式进行,且维护了两个OpenStack的版本,大量编译的依赖和依赖的冲突以及编译后的脏数据成为我们的痛点。于是我们将OpenStack所涉及的包括Nova、Neutron、Glance、Cinder、Trove、Sahara等等项目的编译依赖环境统统放进一个Docker Image中。
我们维护了一个脚本,通过参数来指定要编译的OpenStack的版本和组件。该脚本会自动从Docker Registry服务器中pull一个指定版本的的编译环境镜像。并将GIT服务器其中指定版本的分支代码clone到容器中,通过挂卷的方式将编译后的 RPM包输出到外部打包服务器上。编译结束后输出编译的状态结果。
这样我们便不需要再维护一个编译环境了,只需要维护编译镜像和GIT库内部源码。可以在任意笔记本环境来生成打包环境。