Grenade¶
Grenade 是一个 OpenStack 测试框架,用于测试不同版本之间的升级过程。它使用 DevStack 执行初始的 OpenStack 安装,并将其作为最终配置的参考。目前,Grenade 可以升级 Keystone、Glance、Nova、Neutron、Cinder、Swift 和 Ceilometer,这些组件都采用默认的 DevStack 配置。
目标¶
Grenade 的目标如下
阻止可能破坏升级理论的意外项目更改。大多数 Grenade 失败的情况都是这种性质。
确保升级云不会执行一些愚蠢的操作,例如删除并重新创建所有服务器/卷/网络。
能够扩展以支持其他升级场景(例如从一种配置到另一种等效配置的横向迁移)。
升级理论¶
Grenade 基于以下升级理论运行。
新代码应该能够与旧配置一起工作
升级过程不应需要更改配置才能运行新版本。所有配置行为都应该在一个发布周期内被弃用,以便在发布时,新代码可以使用上一个版本的配置。这些配置可能会创建弃用警告,需要在下一个版本之前解决,但它们仍然应该可以工作,并且在很大程度上具有相同的行为。
新代码只需要‘数据库迁移’
显然,新代码的发布可能包括新的数据库模型。标准的升级过程是关闭所有访问数据库的服务,运行数据库迁移脚本,然后启动新代码。
升级前由服务创建的资源,升级后仍然应该存在
升级 Nova 时,您期望所有虚拟机在整个升级过程中仍然能够正常运行(无论 Nova 服务是否启动)。关闭控制平面不应导致虚拟机停止运行。
升级所需的任何其他更改都是例外,必须在发布说明中明确指出。
Grenade 支持特定版本升级脚本(from-juno、from-kilo)。这些脚本旨在支持需要特定升级的额外手动步骤的升级(例如从 juno 到 kilo)。这些脚本应谨慎使用。
Grenade 核心团队在着陆这些更改之前需要以下内容
发布说明中明确指定了需要这些手动升级步骤的版本。
相关项目的 PTL 已经批准了此更改。
注意
虽然我们期望 OpenStack 生态系统中的各种部署项目,例如 TripleO、Kolla 等,阅读每个项目的发布说明,但将对 Grenade 进行的任何异常升级更改直接或至少通过 openstack-discuss 邮件列表告知这些团队仍然是一种良好的做法。
状态¶
Grenade 现在正在运行支持升级的每个补丁的项目中。OpenStack 的 CI 系统中存在以下 Grenade 配置门控(这不是一个详尽的列表)
一个在版本之间升级了 neutron 的云
一个升级了所有服务(nova-compute 除外)的 neutron 云,从而测试滚动升级的 RPC 反向兼容性。
基本流程¶
grenade.sh 脚本试图做到合理易读,因此值得查看那里以了解实际发生的情况。这是该脚本执行的超级高级版本。
获取 2 个 devstack(基础 & 目标)
安装基础 devstack
执行一些健全性检查(当前是 tempest smoke)以确保正确
允许项目创建应该在升级过程中幸存的资源 - 请参阅 projects/*/resources.sh
关闭所有服务
验证在关闭期间资源是否仍然有效
升级并重新启动所有服务
验证升级后资源是否仍然有效
执行一些健全性检查(当前是 tempest smoke)以确保一切看起来都很好。
当 GRENADE_USE_EXTERNAL_DEVSTACK 的值设置为 True 时,该脚本会跳过前两个步骤(负责设置 2 个 devstack 环境和安装基础环境)。
术语¶
Grenade 具有两个 DevStack 安装,它们之间被区分开来,分别称为‘base’和‘target’。
Base:将被升级的初始安装。
Target:目标 OpenStack 的参考安装(可能是 DevStack)。
目录结构¶
Grenade 为基础和目标 OpenStack 安装源以及 DevStack 创建一组目录
$STACK_ROOT
|- logs # Grenade logs
|- save # Grenade state logs
|- <base>
| |- data # base data
| |- logs # base DevStack logs
| |- devstack
| |- images # cache of downloaded images
| |- cinder
| |- ...
| |- swift
|- <target>
| |- data # target data
| |- logs # target DevStack logs
| |- devstack
| |- cinder
| |- ...
| |- swift
依赖项¶
这是一个非详尽的依赖项列表
git
tox
安装 Grenade¶
以通常的方式从 GitHub 获取 Grenade
git clone https://opendev.org/openstack/grenade
可选:在远程目标上运行 grenade¶
有一个可选的 setup-grenade 脚本,如果您正在从本地笔记本电脑在远程 VM 上运行 Grenade,它会很有用。
Grenade 知道如何使用包含的 setup-grenade 脚本安装当前主分支。参数是运行升级测试的目标系统的 hostname 和目标系统的用户
./setup-grenade [testbox [testuser]]
如果您在克隆到的同一台机器上运行 Grenade,则不需要执行此操作。
配置¶
可以通过将类似以下内容添加到 localrc 来更改使用的 Grenade 仓库和分支
GRENADE_REPO=git@github.com:dtroyer/grenade.git
GRENADE_BRANCH=dt-test
如果您需要为您的特定环境配置本地 devstack,可以通过创建 devstack.localrc 来实现。这将附加到 BASE 和 TARGET 的 stub devstack 配置。
例如,指定 Nova 的接口是 devstack.localrc 的常见用法
FLAT_INTERFACE=eth1
VLAN_INTERFACE=eth1
运行升级测试¶
./grenade.sh
阅读 grenade.sh 以获取有关从这里开始发生的步骤的更多详细信息。