Bifrost - Standalone Ironic¶
- 来自
Bifrost开发者文档 Bifrost(发音为 bye-frost)是一组 Ansible playbook,可自动执行将基础镜像部署到一组已知硬件的任务,使用 Ironic。它为单次操作系统部署提供模块化实用工具,并尽可能减少运营要求。
Kolla 使用 bifrost 作为在一组裸机服务器上引导 OpenStack 控制平面的机制。Kolla 提供 bifrost 的容器镜像。Kolla-ansible 提供 playbook 来配置和部署 bifrost 容器,以及构建基础 OS 镜像并将其配置到裸机节点上。
系统中的主机¶
在由 bifrost 部署的系统中,我们定义了若干类主机。
- 控制主机
控制主机是安装 kolla 和 kolla-ansible 的主机,通常是管理云的地方。
- 部署主机
部署主机运行 bifrost 部署容器,用于配置云主机。
- 云主机
云主机运行 OpenStack 控制平面、计算和存储服务。
- 裸机计算主机
在通过 Ironic 向租户提供裸机计算服务的云中,这些主机将运行裸机租户的工作负载。在仅提供虚拟化计算的云中,这一类主机不存在。
注意
在许多情况下,控制主机和部署主机将是相同的,尽管这不是强制性的。
注意
Bifrost 支持裸机节点的配置。虽然 kolla-ansible 不关心主机 OS 是否在裸机上运行或是否被虚拟化,但在虚拟环境中,为云主机配置 VM 及其基础 OS 镜像目前不在范围内。
云部署流程¶
使用 kolla 和 bifrost 进行云部署遵循以下高级步骤
在控制主机上安装和配置 kolla 和 kolla-ansible。
在部署主机上部署 bifrost。
使用 bifrost 构建基础 OS 镜像并使用此镜像配置云主机。
在 bifrost 配置的云主机上部署 OpenStack 服务。
准备工作¶
准备控制主机¶
遵循 部署/评估的快速入门 指南的 安装依赖项 部分的说明来设置 kolla 和 kolla-ansible 依赖项。 遵循 为开发安装 kolla 部分或 为部署或评估安装 kolla 部分的说明来安装 kolla 和 kolla-ansible。
准备部署主机¶
RabbitMQ 要求系统的 hostname 解析为它配置使用的 IP 地址,对于 bifrost 来说将是 127.0.0.1。Bifrost 将尝试修改部署主机上的 /etc/hosts 以确保这一点。Docker 将 /etc/hosts 从 volume 绑定到容器中。这会阻止原子重命名,从而阻止 Ansible 自动修复 /etc/hosts 文件。
为了使 bifrost 能够正确引导,请将条目添加到 /etc/hosts 将部署主机的 hostname 解析为 127.0.0.1,例如
cat /etc/hosts
127.0.0.1 bifrost localhost
对于支持 IPv6 的主机,以下行是期望的
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
192.168.100.15 bifrost
构建 Bifrost 容器镜像¶
本节提供有关使用 kolla 构建 bifrost 容器镜像的说明。
目前 kolla 仅支持 bifrost 镜像的 source 安装类型。
生成 kolla-build.conf 配置文件
如果需要,生成 kolla-build 的默认配置文件
cd kolla tox -e genconfig
或者,可以使用 --type source 将 kolla-build.conf 替换,或者将 --type source 附加到 kolla-build 或 tools/build.py 命令以启用 source 构建。
构建镜像,用于开发
cd kolla tools/build.py bifrost-deploy
用于生产
kolla-build bifrost-deploy注意
默认情况下,kolla-build 将使用 CentOS 作为基础镜像构建所有容器。要更改此行为,请使用以下参数与 kolla-build 或
tools/build.py命令--base [centos|debian|rocky|ubuntu]
配置和部署 Bifrost 容器¶
本节提供有关如何配置和部署运行 bifrost 服务的容器的说明。
准备 Kolla Ansible 库存¶
Kolla-ansible 将在 bifrost Ansible 组中的主机上部署 bifrost。在 all-in-one 和 multinode 库存文件中,定义了一个 bifrost 组,其中包含 deployment 组中的所有主机。这个顶级 deployment 组旨在表示运行 bifrost_deploy 容器的主机。默认情况下,此组包含 localhost。有关如何在多节点部署中修改 Ansible 库存的详细信息,请参阅 Kolla 的多节点部署。
Bifrost 目前不支持在多个主机上运行,因此 bifrost 组应仅包含单个主机,但 kolla-ansible 不强制执行此操作。Bifrost 管理许多与 kolla 部署的服务冲突的服务,包括 OpenStack Ironic、MariaDB、RabbitMQ 和(可选)OpenStack Keystone。这些服务不应部署在部署 bifrost 的主机上。
准备 Kolla Ansible 配置¶
遵循 部署/评估的快速入门 中的说明来准备 kolla-ansible 的全局配置文件 globals.yml。对于 bifrost,如果与 network_interface 不同,则应将 bifrost_network_interface 变量设置为将用于配置裸机云主机的接口的名称。例如,要使用 eth1
bifrost_network_interface: eth1
请注意,此接口通常应与裸机云主机具有 L2 网络连接,以便提供带有 PXE 启动选项的 DHCP 租约。
准备 Bifrost 配置¶
Kolla ansible 自定义配置文件可以放置在由 node_custom_config 变量给出的目录中,默认值为 /etc/kolla/config。Bifrost 配置文件应放置在此目录或其 bifrost 子目录中(例如 /etc/kolla/config/bifrost)。在这些目录中,文件 bifrost.yml、servers.yml 和 dib.yml 可用于配置 Bifrost。
创建 Bifrost 库存¶
文件 servers.yml 定义了 bifrost 硬件库存,将用于填充 Ironic。有关更多详细信息,请参阅 bifrost 动态库存示例。
例如,以下库存定义了一个通过 Ironic ipmi 驱动程序管理的一个节点。库存包含访问节点 BMC 通过 IPMI 所需的凭据、节点 NIC 的 MAC 地址、要配置节点 configdrive 的 IP 地址、一组调度属性和逻辑名称。
---
cloud1:
uuid: "31303735-3934-4247-3830-333132535336"
driver_info:
power:
ipmi_username: "admin"
ipmi_address: "192.168.1.30"
ipmi_password: "root"
nics:
-
mac: "1c:c1:de:1c:aa:53"
-
mac: "1c:c1:de:1c:aa:52"
driver: "ipmi"
ipv4_address: "192.168.1.10"
properties:
cpu_arch: "x86_64"
ram: "24576"
disk_size: "120"
cpus: "16"
name: "cloud1"
所需的库存将取决于使用的硬件和环境。
创建 Bifrost 配置¶
文件 bifrost.yml 为 bifrost playbook 提供全局配置。默认情况下,kolla 大部分使用 bifrost 的默认变量值。有关 bifrost 的变量,请参阅 bifrost 文档。例如
mysql_service_name: mysql
ansible_python_interpreter: /var/lib/kolla/venv/bin/python
enabled_hardware_types: ipmi
# uncomment below if needed
# dhcp_pool_start: 192.168.2.200
# dhcp_pool_end: 192.168.2.250
# dhcp_lease_time: 12h
# dhcp_static_mask: 255.255.255.0
创建 Disk Image Builder 配置¶
文件 dib.yml 为 bifrost 的镜像构建 playbook 提供配置。默认情况下,kolla 大部分使用 bifrost 的默认变量值来构建裸机 OS 和部署镜像,并将构建一个基于 Ubuntu 的镜像以部署到节点。有关 bifrost 的变量,请参阅 bifrost 文档。
例如,要使用 debian Disk Image Builder OS 元素
dib_os_element: debian
有关更多详细信息,请参阅 diskimage-builder 文档。
部署 Bifrost¶
可以使用 kolla-ansible 或手动部署 bifrost 容器。
使用 Kolla Ansible 部署 Bifrost¶
用于开发
pip install -e ./kolla-ansible
kolla-ansible deploy-bifrost
用于生产
pip install -U ./kolla-ansible
kolla-ansible deploy-bifrost
手动部署 Bifrost¶
启动 Bifrost 容器
docker run -it --net=host -v /dev:/dev -d \ --privileged --name bifrost_deploy \ kolla/ubuntu-source-bifrost-deploy:3.0.1
复制配置文件
docker exec -it bifrost_deploy mkdir /etc/bifrost docker cp /etc/kolla/config/bifrost/servers.yml bifrost_deploy:/etc/bifrost/servers.yml docker cp /etc/kolla/config/bifrost/bifrost.yml bifrost_deploy:/etc/bifrost/bifrost.yml docker cp /etc/kolla/config/bifrost/dib.yml bifrost_deploy:/etc/bifrost/dib.yml
引导 Bifrost
docker exec -it bifrost_deploy bash生成 SSH 密钥
ssh-keygen引导并启动服务
cd /bifrost ./scripts/env-setup.sh export OS_CLOUD=bifrost cat > /etc/rabbitmq/rabbitmq-env.conf << EOF HOME=/var/lib/rabbitmq EOF ansible-playbook -vvvv \ -i /bifrost/playbooks/inventory/target \ /bifrost/playbooks/install.yaml \ -e @/etc/bifrost/bifrost.yml \ -e @/etc/bifrost/dib.yml \ -e skip_package_install=true
验证部署的容器¶
docker exec -it bifrost_deploy bash
cd /bifrost
export OS_CLOUD=bifrost
运行“ironic node-list”应该返回没有节点,例如
(bifrost-deploy)[root@bifrost bifrost]# ironic node-list
+------+------+---------------+-------------+--------------------+-------------+
| UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance |
+------+------+---------------+-------------+--------------------+-------------+
+------+------+---------------+-------------+--------------------+-------------+
注册和部署物理节点¶
一旦我们部署了 bifrost 容器,我们就可以使用它来配置库存文件中指定的裸机云主机。同样,这可以使用 kolla-ansible 或手动完成。
通过 Kolla Ansible¶
用于开发
pip install -e ./kolla-ansible
kolla-ansible deploy-servers
用于生产
pip install -U ./kolla-ansible
kolla-ansible deploy-servers
手动¶
docker exec -it bifrost_deploy bash
cd /bifrost
export OS_CLOUD=bifrost
export BIFROST_INVENTORY_SOURCE=/etc/bifrost/servers.yml
ansible-playbook -vvvv \
-i /bifrost/playbooks/inventory/bifrost_inventory.py \
/bifrost/playbooks/enroll-dynamic.yaml \
-e "ansible_python_interpreter=/var/lib/kolla/venv/bin/python" \
-e @/etc/bifrost/bifrost.yml
docker exec -it bifrost_deploy bash
cd /bifrost
export OS_CLOUD=bifrost
export BIFROST_INVENTORY_SOURCE=/etc/bifrost/servers.yml
ansible-playbook -vvvv \
-i /bifrost/playbooks/inventory/bifrost_inventory.py \
/bifrost/playbooks/deploy-dynamic.yaml \
-e "ansible_python_interpreter=/var/lib/kolla/venv/bin/python" \
-e @/etc/bifrost/bifrost.yml
此时,Ironic 应该清理节点并安装默认 OS 镜像。
高级配置¶
自带镜像¶
TODO
自带 SSH 密钥¶
要在生成 passwords.yml 文件后使用自己的 SSH 密钥,请更新 bifrost_ssh_key 下的私钥和公钥。
已知问题¶
SSH 守护进程未运行¶
默认情况下,sshd 安装在镜像中,但可能未启用。如果遇到此问题,您将必须在恢复模式下物理访问服务器以启用 sshd 服务。如果您的硬件支持,可以使用 ipmitool 和 Serial Over LAN 远程完成此操作。例如
ipmitool -I lanplus -H 192.168.1.30 -U admin -P root sol activate