[ English | 한국어 (대한민국) | Indonesia | 中文 (简体, 中国) | español (México) | English (United Kingdom) | Deutsch ]

使用 DevStack 测试更改

开发的重要组成部分是能够测试您开发的更改,并确保它们正常工作。在像 OpenStack 这样复杂的生态系统中,还需要能够验证您的代码的互操作性。您可能对 Cinder 进行更改,但该更改也会影响 Nova 与 Cinder API 的交互方式。

开发人员需要一种简单的方法来部署 OpenStack 云,以便对更改进行功能和互操作性测试。DevStack 的目的就是为此。

什么是 DevStack

DevStack 是一组模块化的脚本,可以运行以部署基本的 OpenStack 云,用作演示或测试环境。这些脚本可以在单个裸机节点或虚拟机上运行。它也可以配置为部署到多个节点。DevStack 部署会处理配置数据库和消息队列系统等繁琐的任务,使开发人员能够快速轻松地部署 OpenStack 云。

默认情况下,将安装 OpenStack 的核心服务,但用户可以配置要部署的附加服务。所有服务都从源代码安装。DevStack 将从 git master 拉取服务,除非配置为从稳定分支(例如 stable/pike)克隆。

注意

DevStack 的完整文档可以在 此处 找到。

获取和配置 DevStack

要获取 DevStack,您需要从 devstack 仓库下的 openstack 克隆它。

git clone https://opendev.org/openstack/devstack

在继续操作之前,建议为 DevStack 运行的环境设置密码和 IP 地址。这可以通过配置 DevStack 中的 local.conf 文件来完成。

cd ./devstack
cp ./samples/local.conf local.conf
vi ./local.conf

为了简化您与部署的未来交互,您需要设置以下变量

  • ADMIN_PASSWORD

  • DATABASE_PASSWORD

  • RABBIT_PASSWORD

在某些发行版上,您可能还需要设置 HOST_IP。是否需要这样做取决于您的操作系统中网络接口使用的命名约定。

在文件下方是 使用 milestone-proposed 分支 部分。如果希望为一个或多个项目克隆 master 分支以外的分支,可以更改这些变量。

将更改保存到 local.conf 后,您就可以使用 DevStack 部署 OpenStack 云了。

部署 DevStack

配置好 local.conf 文件后,执行 DevStack 非常容易。

注意

以下命令需要以具有 sudo 访问权限和 NOPASSWD 配置的用户身份运行。

./stack.sh

注意

上述命令和后续命令示例假定您仍然位于 DevStack 克隆的根目录中。

此时,DevStack 会接管,准备您的节点以充当 OpenStack 云。将执行以下操作

  • 安装所需的软件包(如 mysql 和 rabbitmq)

  • 配置 mysql 和 rabbitmq

  • 将 OpenStack 项目克隆到 /opt/stack/

  • 在 /opt/stack/data 中创建任何必要的临时备份文件来模拟系统

  • 创建并填充每个项目的数据库

  • 注册并启动 OpenStack 服务

stack.sh 运行的日志保存在 /opt/stack/logs/stack.sh.log 中。

验证您的 DevStack 部署

如果 DevStack 成功部署了 OpenStack,您应该能够将 Web 浏览器指向 local.confHOST_IP 指定的 IP,并访问 Horizon。

../_images/horizon-login.png

注意

密码 admin 将设置为您在 local.conf 文件中为 ADMIN_PASSWORD 设置的值

项目服务都已使用 systemd 注册。每个服务都以 devstack@ 为前缀。因此,您可以通过 systemd 验证 Cinder Volume 进程是否正常工作,例如使用以下命令

systemctl status devstack@c-vol.service

由于 systemd 接受通配符,因此可以使用以下命令显示与 DevStack 关联的所有服务的状态

systemctl status devstack@*

还可以通过 systemd 查看正在运行的服务的日志。要显示 Cinder Volume 服务的日志,可以使用以下命令

journalctl -u devstack@c-vol.service

有关使用 systemd 与 DevStack 交互的更完整参考,请参阅 DevStack 中的使用 Systemd 页面。

使用 DevStack 测试更改

使用 DevStack 进行开发和测试更改非常容易。开发可以在 /opt/stack/<项目 名称> 下的项目克隆中完成。由于项目是项目 git 仓库的克隆,因此可以创建一个分支并进行开发。

DevStack 使用这些目录中的代码来运行 OpenStack 服务,因此可以通过在项目目录中进行代码更改,然后通过 systemd 重新启动项目的服务来测试任何更改。

这是一个展示该过程的示例。在此示例中,对 Cinder 的 LVM 驱动程序进行了更改

cd /opt/stack/cinder/cinder/volume/drivers
vi lvm.py
*Brilliant Code Improvement Implemented*
sudo systemctl restart devstack@c-vol.service

完成代码更改的测试和开发后,您需要将代码更改推送到 Gerrit 进行审核。由于 /opt/stack 中的项目已经与各自的 git 仓库同步,因此您可以配置 git review,提交您的更改并将更改上传到 Gerrit。

停止 DevStack

要关闭在节点上运行的 DevStack 实例,应使用以下命令

./unstack.sh

此命令会清理在节点上执行的 OpenStack 安装。这包括

  • 停止项目服务、mysql 和 rabbitmq

  • 清理 iSCSI 卷

  • 清除临时 LVM 挂载

如果 DevStack 运行失败,首先尝试运行 unstack.sh。如果后续运行失败,可以使用以下命令对 DevStack 组件进行更彻底的删除

./clean.sh

clean.sh 运行执行 unstack.sh 的步骤,再加上额外的清理

  • 删除 /etc 中的项目配置文件

  • 删除日志文件

  • Hypervisor 清理

  • 删除 .pyc 文件

  • 数据库清理