常见问题解答

通用问题

我能将 DevStack 用于生产环境吗?

DevStack 针对开发者和 CI 系统使用原始的上游代码。它做出了许多不适合生产系统的选择。

您最好的选择可能是选择一个 OpenStack 发行版

我能将 DevStack 作为开发环境使用吗?

当然可以。不过,在这样做之前,您应该注意几点

  • DevStack 会对您的系统进行大量配置更改,不应在您的主要开发环境上运行。

  • DevStack 在部署时克隆的所有仓库默认都被认为是易变的,因此可能会受到硬重置的影响。这对于让您与最新的上游保持同步是必要的,这正是您在 CI 环境中想要的,但它可能会导致分支被覆盖和文件被删除。

    由此可知,如果您正在处理一个特定项目,将 DevStack 项目仓库(默认位于 /opt/stack/<project>)用作存储所有工作的唯一主仓库是不推荐的。可以通过将 RECLONE 配置选项设置为 no 来覆盖此行为。或者,您可以避免通过手动重新启动服务来重新部署 stack.sh。无论如何,您通常应该确保正在进行中的工作在运行 stack.sh 之前推送到 Gerrit 或以其他方式备份。

  • 如果您在 VM 中使用 DevStack,您可能希望挂载一个本地 OpenStack 目录,例如 ~/src/openstack,到 VM 内部,并配置 DevStack 使用此目录作为克隆位置,使用 {PROJECT}_REPO 配置变量。例如,假设您正在使用 Vagrant 并共享您的主目录,您应该将以下内容放在 local.conf

    NEUTRON_REPO=/home/vagrant/src/neutron
    NOVA_REPO=/home/vagrant/src/nova
    KEYSTONE_REPO=/home/vagrant/src/keystone
    GLANCE_REPO=/home/vagrant/src/glance
    SWIFT_REPO=/home/vagrant/src/swift
    HORIZON_REPO=/home/vagrant/src/horizon
    CINDER_REPO=/home/vagrant/src/cinder
    HEAT_REPO=/home/vagrant/src/heat
    TEMPEST_REPO=/home/vagrant/src/tempest
    HEATCLIENT_REPO=/home/vagrant/src/python-heatclient
    GLANCECLIENT_REPO=/home/vagrant/src/python-glanceclient
    NOVACLIENT_REPO=/home/vagrant/src/python-novaclient
    NEUTRONCLIENT_REPO=/home/vagrant/src/python-neutronclient
    OPENSTACKCLIENT_REPO=/home/vagrant/src/python-openstackclient
    HEAT_CFNTOOLS_REPO=/home/vagrant/src/heat-cfntools
    HEAT_TEMPLATES_REPO=/home/vagrant/src/heat-templates
    NEUTRON_FWAAS_REPO=/home/vagrant/src/neutron-fwaas
    # ...
    

为什么使用 shell 脚本,而不是 chef/puppet/…

该脚本旨在让人类阅读(以及被计算机运行);毕竟,它是主要的文档。使用配方系统需要每个人都同意并理解 chef 或 puppet。

我想提供帮助!

这不是一个问题,但请这样做!DevStack 的源代码位于 opendev.org,错误报告发送到 LaunchPad。贡献遵循 开发者指南 中描述的常用流程。此 Sphinx 文档位于 doc 目录中。

为什么不使用软件包?

与软件包不同,DevStack 会让您的云准备好进行开发 - 签出代码并在系统下以 systemd 运行服务,使其易于修改和测试新补丁。但是,许多人正在努力为生产部署进行打包和配方工作。

为什么不支持 $MY_FAVORITE_DISTRO?

DevStack 适用于开发者和想要了解 OpenStack 实际工作方式的人。DevStack 已知可在 README.md 中列出的 distro/release 组合上运行。DevStack 仅在 README.md 中记录的发行版之外的发行版上以尽力为基础的方式支持。

Ubuntu 和 CentOS/Fedora 支持之间有什么区别吗?

两者都应该可以正常工作,并由 DevStack CI 进行测试。

为什么我不能使用其他 shell?

DevStack 现在使用一些特定的 bash-ism,需要 Bash 4,例如关联数组。过去,简单的兼容性补丁已被接受,只要它们不复杂。目前,除非 shell 匹配数组功能,否则将不会考虑任何其他兼容性补丁,因为它已经深深地嵌入到 repo 和项目管理中。

我能在 OS/X 上测试吗?

有些人通过安装 homebrew 来运行 bash 4,从而成功在 OS/X 上运行测试。

我至少能用 openrc 配合 zsh 吗?

有人报告说,有一个特殊的函数可以将 openrc 通过 bash 运行以实现此目的

function sourceopenrc {
    pushd ~/devstack >/dev/null
    eval $(bash -c ". openrc $1 $2 >/dev/null;env|sed -n '/OS_/ { s/^/export /;p}'")
    popd >/dev/null
}

操作和配置

DevStack 能处理多节点安装吗?

是的,请参阅 多节点实验室指南

如何记录 DevStack 使用的环境?

DevStack 包含一个脚本 (tools/info.sh),该脚本会收集相关已安装 apt 包、pip 包和 git 仓库的版本。这是验证已安装哪些 Python 模块的好方法。

如何关闭默认启用的服务?

可以通过将 disable_service xxx 添加到 local.conf(使用 c-vol 作为示例)来关闭服务

disable_service c-vol

启用默认关闭的服务是否使用上述操作的反向操作?

当然!

enable_service q-svc

如何运行特定的 OpenStack 版本?

DevStack master 跟踪所有项目的上游 master。如果您想运行 OpenStack 的稳定分支,您应该使用 DevStack 的相应稳定分支。例如,stable/ocata 版本的 DevStack 已经默认将所有项目运行在 stable/ocata 级别。

请注意:您还可以手动调整 *_BRANCH 变量,以测试特定的里程碑,甚至自定义的树外分支。这可以通过在您的 local.conf 中进行如下条目来完成

[[local|localrc]]
GLANCE_BRANCH=11.0.0.0rc1
NOVA_BRANCH=12.0.0.0.rc1

上游 DevStack 仅使用 master 和 stable 分支进行测试。设置自定义 BRANCH 定义不能保证产生有效结果。

如果 RabbitMQ 不想在新虚拟机上启动,我该怎么办?

这通常是由于 erlang 对主机名解析为可访问的 IP 地址不满意所致。确保您的主机名解析为有效的 IP 地址;在 /etc/hosts 中将其设置为 127.0.0.1 通常足以用于单节点安装。并且在极端情况下,使用 clean.sh 来清除它并再次尝试。

为什么我的配置更改被忽略了?

您可能遇到了软件包先决条件安装超时。 tools/install_prereqs.sh 有一个计时器,如果它在过去 PREREQ_RERUN_HOURS 小时内(默认值为 2)运行,则会跳过软件包安装检查。要覆盖此设置,请设置 FORCE_PREREQ=1,软件包检查将永远不会被跳过。

其他

tools/fixup_stuff.sh 损坏了,不应该只“修复”一个版本的软件包。

其中的内容是为了纠正环境中需要通过其他方式修复或可能/将在未来版本中修复的问题。在 httplib2prettytable 的情况下,正在解决特定版本的特定问题。如果后续版本出现这些问题,我们将将其添加到脚本中。了解损坏的未来版本很有价值,而不是轮询以查看它是否已修复。