Bifrost 架构¶
本文档描述了 Bifrost 在默认设置中安装的内容和方式(例如,通过 ./bifrost-cli install 创建的设置)。
组件¶
Bifrost 安装以下主要组件
- ironic
Ironic 是提供裸机功能的主要服务。它的 裸机 API 在 TCP 6385 端口上提供。
- ironic-inspector
Inspector 是一个辅助服务,提供 带内检查。它的 内省 API 在 TCP 5050 端口上提供。
Inspector 已被弃用,可以通过设置
enable_inspector=true来启用。否则,将使用 Ironic 的 原生带内检查。- mariadb
MariaDB 用作数据库,以持久存储信息。
- nginx
Nginx 用作 Web 服务器,用于三个主要目的
在通过网络启动节点时提供 iPXE 配置文件,
在通过虚拟 CD 启动节点时提供虚拟媒体 ISO 镜像给 BMC,
在部署节点时提供实例镜像给 ramdisk。
默认使用 HTTP 8080 端口(可以通过
file_url_port参数更改)。当启用 TLS 时,Nginx 作为 Ironic 和 Inspector 的 TLS 代理。它监听 6385 和 5050 端口,并通过 unix 套接字将请求传递给服务。
- dnsmasq
Dnsmasq 用作 DHCP 和 TFTP 服务器(默认情况下不用于 DNS),在通过网络启动节点时。它也可以用于为已部署的节点提供 DHCP。
可以通过设置
enable_dhcp=false或将--disable-dhcp传递给bifrost-cli来禁用 Dnsmasq。
如果需要,可以启用以下组件
- keystone
Keystone 是 OpenStack Identity 服务。它可以用于为 Ironic 和 Inspector 提供比 HTTP 基本身份验证更复杂的身份验证。它的 身份 API 使用 uWSGI 和 Nginx 在 5000 端口上提供,systemd 服务名为
uwsgi@keystone-public。有关详细信息,请参阅 使用 Keystone。
- ironic-prometheus-exporter
一个导出器,它公开来自节点 BMC 的硬件指标(使用 IPMI 或 Redfish),供 Prometheus 使用。
可以通过设置
enable_prometheus_exporter=true或将--enable-prometheus-exporter传递给bifrost-cli来启用导出器。
网络¶
Bifrost 安装 需要指定将用于与节点通信的网络接口。在系统中使用 firewalld 的情况下,将使用此接口创建一个新的区域 bifrost,并调整防火墙设置以允许通过此接口进行引导流量(DHCP、TFTP 等)。
虚拟测试环境默认使用网络接口 virbr0、IP 子网 192.168.122.1/24 和 libvirt firewalld 区域。
参数¶
network_interface用于配置节点的网络接口。建议为此目的使用隔离网络。
internal_ipBifrost 节点在配置接口上的 IPv4 地址。通常自动派生。您可以使用以下命令检测它
$ sudo awk '/^tftp_server =/ { print $3 }' /etc/ironic/ironic.conf 192.168.122.1
此 IP 地址用于所有配置流量:TFTP、iPXE、回调到 Ironic 和 Inspector。它也用于服务之间的流量。
public_ipBifrost 节点在配置环境之外可访问的 IPv4 地址。例如,用于在启用 Keystone 支持时提供服务目录的公共 URL。
注意
Bifrost 目前不支持 IPv6,欢迎贡献。
位置¶
注意
许多位置对于普通用户来说是不可写入甚至不可读的(即使是启动安装的用户)。您需要使用 sudo 或将用户添加到 ironic 和 nginx 组。
安装位置¶
/opt/stack/bifrost是一个 Python 虚拟环境,所有 Python 包都安装在此处。
/opt/stack/<reponame>是项目
<reponame>(例如ironic)的源目录,从源代码安装。服务以这种方式安装,而库大多作为包安装。与大多数其他位置不同,这些路径将由安装 Bifrost 的用户拥有(即您的普通用户)。
日志位置¶
- journald
用于大多数服务的日志记录。例如,要获取 Inspector 日志
$ sudo journalctl -u ironic-inspector
/var/log/ironic/deploy包含来自部署或清理的 ramdisk 日志的 tarball。文件名格式为
<node UUID>-<node name>-[cleaning-]<datatime>.tar.gz。您可以这样访问主日志$ cd $(mktemp -d) $ sudo tar -xzf \ /var/log/ironic/deploy/493aacf2-90ec-5e3d-9ce5-ea496f12e2a5_testvm3_2021-11-08-17-34-18.tar.gz $ less journal # for ramdisks that use systemd, e.g. DIB-built $ less var/log/ironic-python-agent.log # for tinyIPA and similar
/var/log/ironic-inspector/ramdisk包含来自检查的 ramdisk 日志的 tarball。它们与来自部署和清理的 ramdisk 日志非常相似。
/var/log/nginx/包含提供文件(iPXE 脚本、镜像、虚拟媒体 ISO)的日志。
/var/log/nginx/keystone包含 Keystone API 的 HTTP 日志,补充了
uwsgi@keystone-publicsystemd 单元的日志。
运行时位置¶
/var/lib/ironic/httpbootHTTP 根目录。包含 iPXE 脚本和镜像,包括在 Bifrost 安装期间构建或下载的
deployment_image.qcow2。您可以使用以下命令检测根 URL
$ sudo awk '/^http_url =/ { print $3 }' /etc/ironic/ironic.conf http://192.168.122.1:8080/
/var/lib/tftpbootTFTP 根目录。通常仅包含在没有内置 iPXE 固件的系统上运行 iPXE 的二进制文件。当使用
pxe引导接口时,可以包含镜像。/var/lib/ironic/master_images实例镜像的缓存。
/var/lib/ironic/master_iso_images虚拟媒体 ISO 镜像的缓存。
/var/lib/ironic/certificates用于在清理或部署时与节点上的 ramdisk 通信的 TLS 证书。
/run/ironic当启用 TLS 时,此目录包含 Ironic 和 Inspector 的 unix 套接字,Nginx 使用这些套接字传递请求。