通过 playbook 安装

使用 bifrost-cli 快速入门 相比,这种安装方法允许完全控制所有参数,以及注入您自己的 ansible playbook。

安装分为四个部分

  • 安装 Ansible

  • 配置安装设置

  • 执行安装 playbook

安装 Ansible

可以使用位于 bifrost 仓库中的 scripts/env-setup.sh 提供的环境设置脚本来安装 Ansible。如果您已经安装了 ansible,也可以使用此脚本,因为它会将 ansible 和各种依赖项安装到虚拟环境中,以避免覆盖或与系统范围的 Ansible 安装冲突。

或者,如果您有一个可用的 Ansible 安装,在正常情况下可以执行安装 playbook,但您需要配置 虚拟环境

注意

所有测试均使用 scripts/env-setup.sh 脚本进行。如果您选择直接调用 playbook 而不使用 env-setup.sh,请随时提交 错误报告或补丁到 OpenStack Gerrit,以解决遇到的任何问题。

虚拟环境

为了避免源安装的 Python 包与系统包之间的冲突,Bifrost 默认将所有内容安装到虚拟环境中。 scripts/env-setup.sh 如果不存在,将自动在 /opt/stack/bifrost 中创建一个虚拟环境。

如果您想重新定位虚拟环境,请在调用 env-setup.sh 之前导出 VENV 变量

export VENV=/path/to/my/venv

如果您直接使用 ansible playbook(不使用辅助脚本),请相应地设置 bifrost_venv_dir 变量。

注意

由于 Ansible 依赖项,Bifrost 仅支持使用 --system-site-packages 创建的虚拟环境。

预安装设置

在执行安装之前,强烈建议您编辑 ./playbooks/inventory/group_vars/* 以匹配您的环境。此文件夹中包含多个文件,您可能希望查看并编辑跨多个文件的设置

  • target 文件由在您安装 ironic 和所有必需服务的目标节点上执行角色的角色使用。

  • baremetal 文件适用于在裸机节点上执行的角色。如果您正在自动化涉及通过相同角色部署和配置节点等多个步骤,这可能会很有用。

  • localhost 文件与 target 文件类似,可能包含相同的设置。如果没有定义明确的目标,则引用此文件,因为它默认为 localhost。

这些文件中的变量名之间存在重复,因为变量是角色执行的组独有的。

  • 如果已经安装了 MySQL,请更新 mysql_password 以匹配您的本地安装。

  • network_interface 更改为需要服务 DHCP 请求的接口。

  • 设置 service_password,该密码用于服务之间的通信。如果未设置,将在初始安装期间生成一个随机密码,并存储在控制器的 ~/.config/bifrost/service_password 中。

执行安装过程时,将下载或构建用于部署节点的磁盘镜像,并将其部署到节点。

如果您希望基于设置构建镜像,您需要将 create_image_via_dib 设置为 true

如果您在代理服务器后运行安装,请导出环境变量 http_proxyhttps_proxyno_proxy,以便 ansible 使用这些代理设置。

TLS 支持

Bifrost 支持 API 服务的 TLS,具有两种选项

  • 可以自动生成自签名证书。将 enable_tls=truegenerate_tls=true

    注意

    这等效于 bifrost-cli--enable-tls 标志。

  • 可以通过以下方式提供证书路径:

    tls_certificate_path

    TLS 证书的路径(必须可被全局读取)。

    tls_private_key_path

    私钥的路径(不能受密码保护)。

    tls_csr_path

    证书签名请求文件的路径。

    enable_tls=true 设置为 true,并且不要设置 generate_tls 以使用此选项。

警告

如果使用 Keystone,请参阅 TLS 说明 以获取重要说明。

依赖项

为了真正开始,您必须安装依赖项。

随着 ansible collections 的添加,env-setup.sh 将在默认 ansible collections_paths(根据您的 ansible.cfg)中安装 collections,或者您可以指定位置设置 ANSIBLE_COLLECTIONS_PATH

$ export ANSIBLE_COLLECTIONS_PATH=/mydir/collections

注意

如果您正在使用虚拟环境,ANSIBLE_COLLECTIONS_PATH 会自动设置。安装 Ansible Collections 后,将在 bifrost playbook 目录中创建指向安装的符号链接。

env-setup.sh 脚本会自动调用 install-deps.sh 并为您创建一个虚拟环境

$ bash ./scripts/env-setup.sh
$ source /opt/stack/bifrost/bin/activate
$ cd playbooks

一旦依赖项到位,您就可以执行 ansible playbook 来执行实际安装。该 playbook 将以独立的方式安装和配置 ironic。

一些重要说明

  • OpenStack Identity 服务 (keystone) 默认情况下未安装,ironic 的 API 可以在没有身份验证的情况下访问。可以通过相应地更改 nginx 配置,在 ironic 的 API 上放置基本的密码身份验证。

注意

Bifrost playbook 可以利用并选择性地安装 keystone。请参阅 Keystone 安装详情

  • OpenStack Networking 服务 (neutron) 未安装。Ironic 通过 config-drive 或 DHCP 预留执行静态 IP 注入。

  • 部署由 ironic python agent (IPA) 执行。

  • dnsmasq 被静态配置,并通过链式加载到 iPXE 回复所有 PXE 启动请求,然后从 nginx 获取 Ironic Python Agent ramdisk。

  • 默认情况下,安装将构建基于 Ubuntu 的镜像以部署到节点。如果需要,可以轻松自定义此镜像。

重新执行 playbook 将导致重新断言状态。如果尚未存在,许多软件包(包括 MySQL)将在主机上安装。无论代码是否已更改,Python 代码都将被重新安装。

Playbook 执行

基于 playbook 的安装提供了对过程的更大可见性和控制,适用于高级安装场景。

示例

首先,确保虚拟环境处于活动状态(下面的示例假定 bifrost venv 安装到默认路径 /opt/stack/bifrost)。

$ . /opt/stack/bifrost/bin/activate
(bifrost)$

验证 ansible-playbook 可执行文件是否指向虚拟环境中安装的那个

(bifrost)$ which ansible-playbook
/opt/stack/bifrost/bin/ansible-playbook
(bifrost)$

更改到克隆的 bifrost 仓库的 playbooks 子目录

$ cd playbooks

如果您启用了无密码 sudo,请运行

$ ansible-playbook -vvvv -i inventory/target install.yaml

否则,将 -K 添加到 ansible 命令行,以触发 ansible 提示输入 sudo 密码

$ ansible-playbook -K -vvvv -i inventory/target install.yaml

关于测试,ironic 的节点清理功能默认启用,但仅启用元数据清理,因为对于新用户来说,他们的测试节点在磁盘擦除完成之前无法使用,这可能会令人惊讶。

如果您希望启用完全清理,可以通过将选项 -e cleaning_disk_erase=true 传递到命令行或执行以下命令来实现

$ ansible-playbook -K -vvvv -i inventory/target install.yaml -e cleaning_disk_erase=true

如果您正在安装稳定版本,则需要设置另外两个参数,例如:

-e git_branch=stable/train -e ipa_upstream_release=stable-train

注意

请注意格式的区别:git 分支使用斜杠,IPA 版本使用破折号。

执行安装后,您可以编辑 /etc/ironic/ironic.conf 以启用或禁用清理,如您所愿。强烈建议在任何生产环境中利用清理。

其他 ironic 驱动程序

额外的驱动程序集合维护在 ironic 源代码仓库之外,因为它们没有持续集成 (CI) 测试。

这些驱动程序及其信息可以在 ironic-staging-drivers 文档 中找到。如果您想安装 ironic 暂存驱动程序,只需传递 -e staging_drivers_include=true 在执行安装 playbook 时

$ ansible-playbook -K -vvvv -i inventory/target install.yaml -e staging_drivers_include=true