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 进行云部署遵循以下高级步骤

  1. 在控制主机上安装和配置 kolla 和 kolla-ansible。

  2. 在部署主机上部署 bifrost。

  3. 使用 bifrost 构建基础 OS 镜像并使用此镜像配置云主机。

  4. 在 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 安装类型。

  1. 生成 kolla-build.conf 配置文件

    • 如果需要,生成 kolla-build 的默认配置文件

      cd kolla
      tox -e genconfig
      

或者,可以使用 --type sourcekolla-build.conf 替换,或者将 --type source 附加到 kolla-buildtools/build.py 命令以启用 source 构建。

  1. 构建镜像,用于开发

    cd kolla
    tools/build.py bifrost-deploy
    

    用于生产

    kolla-build bifrost-deploy
    

    注意

    默认情况下,kolla-build 将使用 CentOS 作为基础镜像构建所有容器。要更改此行为,请使用以下参数与 kolla-buildtools/build.py 命令

    --base [centos|debian|rocky|ubuntu]
    

配置和部署 Bifrost 容器

本节提供有关如何配置和部署运行 bifrost 服务的容器的说明。

准备 Kolla Ansible 库存

Kolla-ansible 将在 bifrost Ansible 组中的主机上部署 bifrost。在 all-in-onemultinode 库存文件中,定义了一个 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.ymlservers.ymldib.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

  1. 启动 Bifrost 容器

    docker run -it --net=host -v /dev:/dev -d \
    --privileged --name bifrost_deploy \
    kolla/ubuntu-source-bifrost-deploy:3.0.1
    
  2. 复制配置文件

    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
    
  3. 引导 Bifrost

    docker exec -it bifrost_deploy bash
    
  4. 生成 SSH 密钥

    ssh-keygen
    
  5. 引导并启动服务

    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

参考