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/24libvirt firewalld 区域。

参数

network_interface

用于配置节点的网络接口。建议为此目的使用隔离网络。

internal_ip

Bifrost 节点在配置接口上的 IPv4 地址。通常自动派生。您可以使用以下命令检测它

$ sudo awk '/^tftp_server =/ { print $3 }' /etc/ironic/ironic.conf
192.168.122.1

此 IP 地址用于所有配置流量:TFTP、iPXE、回调到 Ironic 和 Inspector。它也用于服务之间的流量。

public_ip

Bifrost 节点在配置环境之外可访问的 IPv4 地址。例如,用于在启用 Keystone 支持时提供服务目录的公共 URL。

注意

Bifrost 目前不支持 IPv6,欢迎贡献。

位置

注意

许多位置对于普通用户来说是不可写入甚至不可读的(即使是启动安装的用户)。您需要使用 sudo 或将用户添加到 ironicnginx 组。

安装位置

/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-public systemd 单元的日志。

运行时位置

/var/lib/ironic/httpboot

HTTP 根目录。包含 iPXE 脚本和镜像,包括在 Bifrost 安装期间构建或下载的 deployment_image.qcow2

您可以使用以下命令检测根 URL

$ sudo awk '/^http_url =/ { print $3 }' /etc/ironic/ironic.conf
http://192.168.122.1:8080/
/var/lib/tftpboot

TFTP 根目录。通常仅包含在没有内置 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 使用这些套接字传递请求。