配置

local.conf

DevStack 配置通过文件 local.conf 进行修改。它是一个修改后的 INI 格式文件,引入了一个元部分头,用于携带有关要更改的配置文件的一些附加信息。

示例文件位于 devstack/samples

新的标题类似于普通的 INI 部分标题,但使用双括号 ([[ ... ]]) 和两个内部字段,用竖线 (|) 分隔。请注意,双括号和内部字段之间没有空格。同样,竖线和内部字段之间也没有空格

'[[' <phase> '|' <config-file-name> ']]'

其中 <phase> 是由 stack.sh 定义的一组阶段名称之一,而 <config-file-name> 是配置文件名。文件名在 stack.sh 上下文中进行求值,因此所有环境变量都可用,并且可以使用。强烈建议在标题中使用项目配置文件变量(参见下面的 NOVA_CONF 示例)。如果配置文件路径不存在,则会被跳过。

定义的阶段是

  • local - 在 stackrc 被引用之前,从 local.conf 中提取 localrc

  • post-config - 在第二层服务配置完毕后,在启动服务之前运行

  • extra - 在启动服务后,在执行 extra.d 中的任何文件之前运行

  • post-extra - 在执行 extra.d 中的文件之后运行

  • test-config - 在配置 tempest(和插件)之后运行

文件按严格顺序处理;可以多次指定元部分,但如果任何设置重复出现,则文件中最后出现的内容将被使用。

[[post-config|$NOVA_CONF]]
[DEFAULT]
use_syslog = True

[osapi_v3]
enabled = False

特定的元部分 local|localrc 用于提供默认的 localrc 文件(实际上是 .localrc.auto)。这允许将 DevStack 的所有自定义设置包含在一个文件中。如果存在 localrc,则会使用它以保留向后兼容性。

[[local|localrc]]
IPV4_ADDRS_SAFE_TO_USE=10.254.1.0/24
ADMIN_PASSWORD=speciale
LOGFILE=$DEST/logs/stack.sh.log

请注意,Q_PLUGIN_CONF_FILE 的独特性在于,假定它/ (斜杠) 字符开头。需要添加一个斜杠

[[post-config|/$Q_PLUGIN_CONF_FILE]]

另请注意,localrc 部分被作为 shell 脚本片段引用,并且必须符合 shell 要求,特别是等号 (=) 周围没有空格。

openrc

openrc 配置适用于与 OpenStack 命令行工具一起使用的登录凭据。 openrc 在开头引用 stackrc(反过来引用 local.conflocalrc 部分),以便获取 HOST_IP 和/或 SERVICE_HOST 以在端点中使用。下面显示的值是默认值。

OS_PROJECT_NAME (OS_TENANT_NAME)

Keystone 已将术语项目标准化为拥有资源的实体。在某些地方仍然存在对先前术语租户的引用。此外,project_nameproject_id 更受青睐。为了与旧工具兼容,OS_TENANT_NAME 仍然受支持。

OS_PROJECT_NAME=demo
OS_USERNAME

除了拥有实体(项目)之外,OpenStack 还称执行操作的实体为用户

OS_USERNAME=demo
OS_PASSWORD

Keystone 的默认身份验证要求提供密码。关于将密码放在环境变量中的通常警告适用,对于大多数 DevStack 用例,这可能是一种可接受的权衡。

OS_PASSWORD=secret
HOST_IP, SERVICE_HOST

使用 HOST_IP 设置 API 端点主机。 SERVICE_HOST 也可以用来指定端点,这对于某些 local.conf 配置非常方便。通常,HOST_IPlocalrc 部分中设置。

HOST_IP=127.0.0.1
SERVICE_HOST=$HOST_IP
OS_AUTH_URL

使用 Keystone 身份验证对 OpenStack 云进行身份验证会返回一个TokenService Catalog。目录包含用户/租户有权访问的所有服务的端点 - 包括 Nova、Glance、Keystone 和 Swift。

OS_AUTH_URL=http://$SERVICE_HOST:5000/v3.0
KEYSTONECLIENT_DEBUG, NOVACLIENT_DEBUG

将命令行客户端日志级别设置为 DEBUG。默认情况下这些被注释掉了。

# export KEYSTONECLIENT_DEBUG=1
# export NOVACLIENT_DEBUG=1

最小配置

虽然 stack.sh 可以在没有 local.conflocalrc 部分的情况下运行,但当设置了几个最小变量时,devlife 会更好。这是一个最小配置示例,它涉及最常需要设置的值。

  • 不记录日志

  • 预设密码以防止交互式提示

  • 将网络范围移开本地网络 (IPV4_ADDRS_SAFE_TO_USEFLOATING_RANGE,下面注释掉了)

  • 如果检测不可靠,则设置主机 IP (HOST_IP,下面注释掉了)

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
#IPV4_ADDRS_SAFE_TO_USE=172.31.1.0/24
#FLOATING_RANGE=192.168.20.0/25
#HOST_IP=10.3.4.5

如果未在此处设置 *_PASSWORD 变量,stack.sh 将提示您输入这些值。

警告

在密码中使用字母数字字符,因为使用特殊字符可能会导致某些服务无法正常工作。

网络范围不得与主机上使用的任何网络重叠。重叠并不常见,因为 RFC-1918“私有”范围通常同时用于本地网络和 Nova 的固定和浮动范围。

HOST_IP 通常在首次运行 stack.sh 时被检测到,但由于 IP 从以太网接口移动到主机上的桥接,因此在后续运行中通常是不确定的。在此处设置它也使其可用于 openrc 设置 OS_AUTH_URL。默认情况下未设置 HOST_IP

HOST_IPV6 通常在首次运行 stack.sh 时被检测到,但如果没有默认以太网接口上的 IPv6 地址,则不会设置。在此处设置它也使其可用于 openrc 设置 OS_AUTH_URL。默认情况下未设置 HOST_IPV6

对于与 x86 默认值不同的架构特定配置,请参阅 arch-configuration

历史说明

历史上,DevStack 从 localrc 文件获取所有本地配置和自定义。2013 年 10 月,引入了 local.conf 配置方法(在 review 46768 中),以简化此过程。

配置说明

服务仓库

用于检出每个服务的源代码的 Git 仓库由为每个服务设置的一对变量控制。 *_REPO 指向仓库,*_BRANCH 选择要检出的分支。这些可以在 local.conf 中覆盖,以从不同的仓库进行源代码提取,例如 Gerrit 分支提案。GIT_BASE 指向主仓库服务器。

NOVA_REPO=$GIT_BASE/openstack/nova.git
NOVA_BRANCH=master

要直接从 Gerrit 拉取分支,请从 Gerrit 审查页面获取仓库和分支

git fetch https://review.opendev.org/openstack/nova \
    refs/changes/50/5050/1 && git checkout FETCH_HEAD

仓库是“fetch”后面的段落,分支是其后的段落

NOVA_REPO=https://review.opendev.org/openstack/nova
NOVA_BRANCH=refs/changes/50/5050/1

安装目录

DevStack 安装目录由 DEST 变量设置。默认情况下是 /opt/stack

通过在 localrc 部分中早期设置它,可以在后续变量中引用它。即使未更改默认值,设置它也很有用。

DEST=/opt/stack

日志记录

启用日志记录

默认情况下,stack.sh 输出仅写入运行它的控制台。可以通过将 LOGFILE 设置为目标日志文件的完整限定名称,将其发送到文件以及控制台。对于每次运行 stack.sh,都会将时间戳附加到给定的文件名。

LOGFILE=$DEST/logs/stack.sh.log

如果设置了 LOGDAYS 为要保留的旧日志文件天数,则会自动清理旧日志文件。

LOGDAYS=2

在 DevStack 运行期间使用一些颜色来更容易地查看正在发生的事情。可以使用以下命令禁用此功能

LOG_COLOR=False

在使用日志文件时,默认情况下日志会发送到控制台和文件。您可以将 VERBOSE 设置为 false,如果您只想将日志发送到文件(这可能避免在捕获脚本输出和日志文件时出现双重日志记录)。如果 VERBOSEtrue,您可以将 VERBOSE_NO_TIMESTAMP 设置为避免将时间戳添加到发送到控制台的每个输出行。这在某些情况下很有用,例如,当控制台输出被运行程序或框架(例如 Ansible)捕获并添加自己的时间戳时。请注意,发送到 LOGFILE 的日志行仍然会以时间戳为前缀。

记录服务输出

默认情况下,服务在 systemd 下运行,并原生记录到 systemd 日志。

要查询日志,请使用 journalctl 命令,例如

sudo journalctl --unit devstack@*

更多示例请参见 查询日志

示例日志配置

例如,非交互式安装可能希望将输出保存到文件,保留服务日志并在存储的文件中禁用颜色。

[[local|localrc]]
DEST=/opt/stack/
LOGFILE=$DEST/stack.sh.log
LOG_COLOR=False

数据库后端

支持多种数据库后端。lib/databases 目录中定义的可用数据库是 mysql。可以通过在 localrc 部分中放置以下内容来选择不同的数据库

disable_service mysql
enable_service postgresql

mysql 是默认数据库。

RPC 后端

包含对 RabbitMQ RPC 后端的支持。可以通过外部插件提供其他 RPC 后端。通过通常的服务功能和 ENABLED_SERVICES 启用或禁用 RabbitMQ。

示例在 local.conf 中禁用 RabbitMQ

disable_service rabbit

Apache 前端

Apache Web 服务器已为支持通过 WSGI 的服务启用。今天,这意味着 HTTPD 和 uWSGI,但历史上这意味着 HTTPD + mod_wsgi。许多变量捕获了这种历史遗留,包括 MOD_WSGI 而不是 UWSGI

某些服务支持替代部署策略(例如 eventlet)。您可以将 ENABLE_HTTPD_MOD_WSGI_SERVICES 设置为 False 在您的 local.conf 中。此外,每个可以运行在 HTTPD + mod_wsgi 下的服务都有一个覆盖开关,可以在您的 local.conf 中设置。但是,随着服务采用标准化的部署机制并普遍远离 eventlet,这些开关正在逐渐删除。

示例(Swift)

SWIFT_USE_MOD_WSGI="True"

示例(Heat)

HEAT_USE_MOD_WSGI="True"

来自 Git 的库

默认情况下,devstack 从 git 安装 OpenStack 服务器组件,但从 pypi 上的发布版本安装客户端库。 如果您正在进行服务器开发,这很合适,但如果您想查看未发布版本的客户端如何影响系统,可以通过在 LIBS_FROM_GIT 中指定它,从上游或本地 git 树安装它。 多个库可以指定为逗号分隔的列表。

LIBS_FROM_GIT=python-keystoneclient,oslo.config

将变量设置为 ALL 将激活所有库的下载。

虚拟环境

通过将 USE_VENV 设置为 True 来启用 Python 虚拟环境的使用。 这将为在 PROJECT_VENV 数组中定义​​的每个项目启用 venvs 的创建。

PROJECT_VENV 数组中的每个条目包含要用于该项目的 venv 的目录名称。 数组索引是项目名称。 多个项目可以使用相同的 venv(如果需要)。

PROJECT_VENV["glance"]=${GLANCE_DIR}.venv

ADDITIONAL_VENV_PACKAGES 是一个逗号分隔的列表,包含要安装到每个 venv 的其他软件包。 通常,项目不会在其 requirements.txt 文件中列出某些软件包,因为它们是“可选”要求,即仅在某些配置中需要。 默认情况下,启用的数据库将在启用时添加其 Python 绑定。

ADDITIONAL_VENV_PACKAGES="python-foo, python-bar"

每次进行全新安装

默认情况下,stack.sh 仅在项目仓库在 $DEST 中不存在时才克隆项目仓库。 如果将 RECLONE 设置为 yesstack.sh 将在每次运行时刷新每个仓库。 这避免了为了从 $GIT_BASE 获取当前分支而手动删除仓库。

RECLONE=yes

升级通过 pip 安装的软件包

默认情况下,stack.sh 仅在当前未安装任何版本或当前版本与指定的依赖项不匹配时才安装 Python 软件包。 如果将 PIP_UPGRADE 设置为 True,则现有的必需 Python 软件包将被升级到与依赖项匹配的最新版本。

PIP_UPGRADE=True

Guest 镜像

通过逗号分隔的 IMAGE_URLS 变量提供的 URL 中的镜像将被 DevStack 下载并上传到 glance。

默认的 guest 镜像为每种 hypervisor 类型及其测试要求预定义在 stack.sh 中。 将 DOWNLOAD_DEFAULT_IMAGES=False 设置为 false 将阻止 DevStack 下载这些默认镜像;在这种情况下,您需要用足够的镜像填充 IMAGE_URLS 以满足测试要求。

DOWNLOAD_DEFAULT_IMAGES=False
IMAGE_URLS="http://foo.bar.com/image.qcow,"
IMAGE_URLS+="http://foo.bar.com/image2.qcow"

实例类型

DEFAULT_INSTANCE_TYPE 可用于配置默认实例类型。 如果未指定此参数,DevStack 将创建额外的 micro 和 nano flavor,用于运行 Tempest 测试的实例。

对于具有较大内存需求的 guest,应在配置文件中指定 DEFAULT_INSTANCE_TYPE,以便 Tempest 选择默认 flavor。

KVM 在 Power 上使用 QEMU 2.4 需要 512 MB 才能加载固件 - QEMU 2.4 - PowerPC 因此在 ppc64/ppc64le 上运行实例的用户可以选择以下默认创建的 flavor

DEFAULT_INSTANCE_TYPE=m1.tiny

IP 版本

IP_VERSION 可用于配置 Neutron 以创建 IPv4、IPv6 或双栈自服务项目数据网络,分别使用 IP_VERSION=4IP_VERSION=6IP_VERSION=4+6

IP_VERSION=4+6

以下可选变量可用于更改默认 IPv6 行为

IPV6_RA_MODE=slaac
IPV6_ADDRESS_MODE=slaac
IPV6_ADDRS_SAFE_TO_USE=fd$IPV6_GLOBAL_ID::/56
IPV6_PRIVATE_NETWORK_GATEWAY=fd$IPV6_GLOBAL_ID::1

注意IPV6_ADDRS_SAFE_TO_USEIPV6_PRIVATE_NETWORK_GATEWAY 可以配置为任何有效的 IPv6 前缀。 默认值使用自动生成的 IPV6_GLOBAL_ID 以符合 RFC4193。

服务 IP 版本

DevStack 可以通过将 SERVICE_IP_VERSION 设置为 SERVICE_IP_VERSION=4SERVICE_IP_VERSION=6 来启用服务在 IPv4 或 IPv6 上运行。

当设置为 4 时,devstack 服务将在 0.0.0.0 上打开侦听套接字,并且服务端点将使用 HOST_IP 作为地址进行注册。

当设置为 6 时,devstack 服务将在 :: 上打开侦听套接字,并且服务端点将使用 HOST_IPV6 作为地址进行注册。

此设置的默认值为 4。 目前不支持双模式支持,例如 4+6HOST_IPV6 可选地用于更改默认 IPv6 地址

HOST_IPV6=${some_local_ipv6_address}

隧道 IP 版本

DevStack 可以通过将 TUNNEL_IP_VERSION 设置为 TUNNEL_IP_VERSION=4TUNNEL_IP_VERSION=6 来启用隧道在 IPv4 或 IPv6 上运行。

当设置为 4 时,Neutron 将为隧道端点使用 IPv4 地址,例如 HOST_IP

当设置为 6 时,Neutron 将为隧道端点使用 IPv6 地址,例如 HOST_IPV6

此设置的默认值为 4。 不支持双模式支持,例如 4+6,因为此值必须与本地隧道端点 IP(v6) 地址的地址族匹配。

TUNNEL_IP_VERSION 的值与 TUNNEL_ENDPOINT_IP 的设置有直接关系,当设置为 4 时,它将默认为 HOST_IP,当设置为 6 时,它将默认为 HOST_IPV6

多节点设置

请参阅 多节点实验室指南

项目

Neutron

请参阅 neutron 配置指南,了解 Neutron 配置的详细信息

Swift

Swift 默认情况下被禁用。 启用后,它配置为只有一个副本,以避免在小型 VM 上占用过多的 IO/内存。

如果您想启用 Swift,可以将以下内容添加到您的 localrc 部分

enable_service s-proxy s-object s-container s-account

如果您想要一个仅包含 Swift 和 Keystone 的最小 Swift 安装,可以在您的 localrc 部分中添加以下内容

disable_all_services
enable_service key mysql s-proxy s-object s-container s-account

如果您只想进行真实的 Swift 集群测试,其中包含多个副本,可以通过在您的 localrc 部分中自定义变量 SWIFT_REPLICAS(通常设置为 3)来执行此操作。

您可以手动覆盖环构建以使用特定的存储节点,例如,当您想测试多节点环境时。 在这种情况下,您必须在您的 localrc 部分中设置一个以空格分隔的 IP 列表 SWIFT_STORAGE_IPS,这些 IP 应该用作 Swift 存储节点。 请注意,这不会创建一个多节点设置,它仅用于将节点添加到 Swift 环。

SWIFT_STORAGE_IPS="192.168.1.10 192.168.1.11 192.168.1.12"
Swift S3

如果您在 ENABLED_SERVICES 中启用 s3api,DevStack 将安装 s3api 中间件模拟。 Swift 将配置为充当 Keystone 的 S3 端点,从而有效地替换 nova-objectstore

仅在 systemd 系统中启动 Swift 代理服务器,所有其他服务都在后台启动并由 swift-init 工具管理。

Tempest

如果 Tempest 已成功配置,可以按如下方式运行一组基本的烟雾测试

$ cd /opt/stack/tempest
$ tox -e smoke

默认情况下,Tempest 会被下载并生成配置文件,但 Tempest 包不会安装在系统的全局 site-packages 中(软件包安装包括安装依赖项)。 因此,Tempest 无法在 tox 之外运行。 如果您想安装它,请将以下内容添加到您的 localrc 部分

INSTALL_TEMPEST=True

Cinder

用于保存 Cinder 管理卷的逻辑卷组由 VOLUME_GROUP_NAME 设置,逻辑卷名称前缀使用 VOLUME_NAME_PREFIX 设置,卷 backing 文件的尺寸使用 VOLUME_BACKING_FILE_SIZE 设置。

VOLUME_GROUP_NAME="stack-volumes"
VOLUME_NAME_PREFIX="volume-"
VOLUME_BACKING_FILE_SIZE=24G

在运行高度并发测试时,每个项目的卷、备份或快照的默认配额可能太小。 可以通过将 CINDER_QUOTA_VOLUMESCINDER_QUOTA_BACKUPSCINDER_QUOTA_SNAPSHOTS 设置为所需值来调整这些配额。(每个默认值为 10。)

DevStack 的 Cinder LVM 配置模块当前支持 iSCSI 和 NVMe 连接,我们可以使用选项 CINDER_TARGET_HELPERCINDER_TARGET_PROTOCOLCINDER_TARGET_PREFIXCINDER_TARGET_PORT 选择使用哪一个。

默认使用 LIO 目标管理器的 iSCSI

CINDER_TARGET_HELPER="lioadm"
CINDER_TARGET_PROTOCOL="iscsi"
CINDER_TARGET_PREFIX="iqn.2010-10.org.openstack:"
CINDER_TARGET_PORT=3260

此外,NVMe 支持 3 种传输协议,nvmet_rdmanvmet_tcpnvmet_fc,当选择 nvmet 目标时,协议、前缀和端口默认值将更改为更合理的 NVMe 默认值

CINDER_TARGET_HELPER="nvmet"
CINDER_TARGET_PROTOCOL="nvmet_rdma"
CINDER_TARGET_PREFIX="nvme-subsystem-1"
CINDER_TARGET_PORT=4420

当选择 RDMA 传输协议时,DevStack 将在 Cinder 节点上创建一个基于 HOST_IP_IFACE 的软件 RoCE 设备,如果未定义,则基于 IP 地址 HOST_IPHOST_IPV6

由于我们无法提前知道是否会有 RDMA 连接,因此此 Soft-RoCE 设备始终会在 Nova 计算端创建。

Keystone

多区域设置

我们希望设置两个 devstack(RegionOne 和 RegionTwo),共享 keystone(相同的用户和服务)和 horizon。 Keystone 和 Horizon 将位于 RegionOne。 完整的规范可在以下网址找到:https://wiki.openstack.org/wiki/Heat/Blueprints/Multi_Region_Support_for_Heat

在 RegionOne

REGION_NAME=RegionOne

在 RegionTwo

disable_service horizon
KEYSTONE_SERVICE_HOST=<KEYSTONE_IP_ADDRESS_FROM_REGION_ONE>
REGION_NAME=RegionTwo
KEYSTONE_REGION_NAME=RegionOne

在 RegionOne 的 devstack 中,我们将 REGION_NAME 设置为 RegionOne,因此在此 devstack 中启动的服务将注册为 RegionOne。在 RegionTwo 的 devstack 中,类似地,我们将 REGION_NAME 设置为 RegionTwo,因为我们希望在此 devstack 中启动的服务在 RegionTwo 中注册。但是 Keystone 服务启动并注册在 RegionOne 中,而不是 RegionTwo,因此我们使用 KEYSTONE_REGION_NAME 来指定 Keystone 服务的区域。KEYSTONE_REGION_NAME 具有与 REGION_NAME 相同的默认值,因此我们在 RegionOne 的配置中省略了它。

Glance

默认镜像大小配额为 1GiB,如果使用更大的镜像,可能会太小。在设置时使用以下命令更改默认值:

GLANCE_LIMIT_IMAGE_SIZE_TOTAL=5000

或者在运行时通过:

openstack --os-cloud devstack-system-admin registered limit set \
  --service glance --default-limit 5000 --region RegionOne image_size_total

Architectures

上游 CI 仅在具有 x86 架构的节点上运行,但 OpenStack 支持更多架构。其中一些架构需要以某种方式配置 Devstack。

KVM on s390x (IBM z Systems)

KVM 在 s390x (IBM z Systems) 上从 *Kilo* 版本开始支持。对于一体化设置,需要在 local.conf 文件中进行以下最小设置:

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

DOWNLOAD_DEFAULT_IMAGES=False
IMAGE_URLS="https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-s390x-disk1.img"

# Provide a custom etcd3 binary download URL and ints sha256.
# The binary must be located under '/<etcd version>/etcd-<etcd-version>-linux-s390x.tar.gz'
# on this URL.
# Build instructions for etcd3: https://github.com/linux-on-ibm-z/docs/wiki/Building-etcd
ETCD_DOWNLOAD_URL=<your-etcd-download-url>
ETCD_SHA256=<your-etcd3-sha256>

enable_service n-sproxy
disable_service n-novnc

[[post-config|$NOVA_CONF]]

[serial_console]
base_url=ws://$HOST_IP:6083/  # optional

原因

  • Devstack 的默认镜像仅支持 x86,因此我们使用 DOWNLOAD_DEFAULT_IMAGES 禁用下载。上述代码中引用的 guest 镜像 (IMAGE_URLS) 仅作为示例。可能的 s390x guest 镜像列表不限于此。

  • 此平台不支持像 VNC 或 SPICE 这样的图形控制台。技术原因是平台缺少 framebuffer。这意味着我们依赖于替代功能 *串行控制台*,它需要代理服务 n-sproxy。因此,我们还禁用了 VNC 的代理 n-novnc。如果在一体化设置之外要使用 *串行控制台*,则只需要 post-config 部分中的配置。

  • 需要提供 etcd3 二进制文件及其 sha256,因为 s390x 的二进制文件不像其他架构那样托管在 github 上。有关更多详细信息,请参阅 https://bugs.launchpad.net/devstack/+bug/1693192。Etcd3 可以沿着 https://github.com/linux-on-ibm-z/docs/wiki/Building-etcd 轻松构建。

注意

要针对此 *Devstack* 一体化运行 *Tempest*,您需要使用解压缩后小于 1GB 的 guest 镜像。上面的示例镜像大于这个尺寸!