通过 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_proxy、https_proxy 和 no_proxy,以便 ansible 使用这些代理设置。
TLS 支持¶
Bifrost 支持 API 服务的 TLS,具有两种选项
可以自动生成自签名证书。将
enable_tls=true和generate_tls=true。注意
这等效于
bifrost-cli的--enable-tls标志。可以通过以下方式提供证书路径:
tls_certificate_pathTLS 证书的路径(必须可被全局读取)。
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