部署

本节描述了使用 Kayobe 将 OpenStack 云安装到一组裸机服务器上的方法。我们假设可以访问一个节点,该节点将作为虚拟机的主机来承载种子节点。我们还假设此种子主机可以访问将构成 OpenStack 控制平面的裸机节点。最后,我们假设控制平面节点可以访问将构成工作负载节点池的裸机节点。

参见

有关 Kayobe 环境配置的信息,请参见 此处

Ansible 控制主机

在开始部署之前,我们必须引导 Ansible 控制主机。此处执行的任务包括

  • 从 Ansible Galaxy 安装所需的 Ansible 角色。

  • 如果需要,生成 SSH 密钥并将其添加到当前用户的授权密钥中。

  • 在配置的版本下本地安装 Kolla Ansible。

要引导 Ansible 控制主机

(kayobe) $ kayobe control host bootstrap

物理网络

Kayobe 可以管理物理网络,它使用 Ansible 的网络模块。目前支持最流行的云基础设施交换机,但可以轻松扩展。要配置物理网络

(kayobe) $ kayobe physical network configure --group <group> [--enable-discovery]

使用 --group 参数指定包含要配置的交换机的 Ansible 组。

使用 --enable-discovery 参数启用对连接到裸机计算节点的端口的一次性配置,以支持通过 ironic inspector 进行硬件发现。

可以限制将要配置的交换机接口,无论是通过接口名称还是接口描述。

(kayobe) $ kayobe physical network configure --group <group> --interface-limit <interface names>
(kayobe) $ kayobe physical network configure --group <group> --interface-description-limit <interface descriptions>

名称或描述应由逗号分隔。当将计算节点添加到现有部署中时,这可能很有用,以避免更改活动节点正在使用的配置接口。

使用 --display 参数将显示候选交换机配置,而无需实际应用它。

参见

有关物理网络设备配置的信息,请参见 此处

种子主机

注意

不必在虚拟机中运行种子服务。要使用现有的裸机主机或在 Kayobe 外部配置的虚拟机,可以跳过此部分。

主机配置

要配置种子主机的宿主操作系统以及 Libvirt/KVM 虚拟化支持

(kayobe) $ kayobe seed hypervisor host configure

参见

有关主机配置的信息,请参见 此处

种子

虚拟机配置

注意

不必在虚拟机中运行种子服务。要使用现有的裸机主机或在 Kayobe 外部配置的虚拟机,可以跳过此步骤。确保 Ansible 库存包含种子主机。

种子主机应安装 CentOS 或 Rocky 或 Ubuntu 以及 libvirt。它应该为种子虚拟机需要访问的所有网络配置 libvirt 网络,并为种子虚拟机的卷提供可用的 libvirt 存储池。要配置种子虚拟机

(kayobe) $ kayobe seed vm provision

完成此命令后,种子虚拟机应处于活动状态并可通过 SSH 访问。Kayobe 将使用虚拟机的 IP 地址更新 Ansible 库存。

主机配置

要配置种子主机操作系统

(kayobe) $ kayobe seed host configure

注意

如果种子主机使用在先前安装中使用的磁盘,则可能需要擦除这些磁盘上的分区和 LVM 数据。要擦除主机配置期间未挂载的所有磁盘

(kayobe) $ kayobe seed host configure --wipe-disks

参见

有关主机配置的信息,请参见 此处

构建容器镜像

注意

可以使用来自像 Quay.io 这样的镜像仓库的预构建容器镜像。在这种情况下,可以跳过此步骤。

可以使用来自像 Quay.io 这样的镜像仓库的预构建容器镜像。在某些情况下,可能需要本地构建镜像,以应用本地镜像自定义或使用 kolla 的下游版本。镜像由 container-image-builders 组中的主机构建,默认情况下包括 seed

要构建容器镜像

(kayobe) $ kayobe seed container image build

可以通过提供一个或多个镜像名称正则表达式来构建特定的镜像集

(kayobe) $ kayobe seed container image build bifrost-deploy

为了在构建后将镜像推送到仓库,添加 --push 参数。

参见

有关配置 Kolla 以构建容器镜像的信息,请参见 此处

部署容器化服务

此时需要在种子虚拟机上部署种子服务。这些服务在 bifrost_deploy 容器中部署。

此命令还会构建将用于使用磁盘镜像生成器 (DIB) 部署 overcloud 节点的操作系统镜像,如果 overcloud_dib_build_host_images 设置为 False

注意

如果您使用的是 Rocky Linux - 操作系统镜像的构建需要使用 kayobe overcloud host image build 来完成。

要在容器中部署种子服务

(kayobe) $ kayobe seed service deploy

完成此命令后,种子服务将处于活动状态。

注意

Bifrost 部署行为在 Kayobe 和 Kolla-Ansible 之间拆分。因此,如果您只想限制为 Bifrost 部署,则应同时使用 --tags kolla-bifrost--kolla-tags bifrost

参见

有关配置 Kolla Ansible 的信息,请参见 此处。有关配置 Bifrost 的信息,请参见 此处Overcloud 根磁盘镜像配置 提供有关配置根磁盘镜像构建过程的信息。有关在种子节点上部署其他自定义服务(容器)的信息,请参见 此处

构建部署镜像

注意

可以使用预构建的部署镜像。在这种情况下,可以跳过此步骤。

可以使用来自 OpenStack 托管的 tarballs 或另一个来源的预构建部署镜像。在某些情况下,可能需要本地构建镜像,以应用本地镜像自定义或使用 Ironic Python Agent (IPA) 的下游版本。为了构建 IPA 镜像,应将 ipa_build_images 变量设置为 True

要本地构建镜像

(kayobe) $ kayobe seed deployment image build

如果之前已构建了镜像,则不会重新构建它们。要强制重新构建镜像,请使用 --force-rebuild 参数。

参见

有关如何配置 IPA 镜像构建过程的信息,请参见 此处

构建 Overcloud 主机磁盘镜像

注意

只有当 overcloud_dib_build_host_images 设置为 True 时,此步骤才相关,自 Zed 版本以来,这是默认设置。

主机磁盘镜像在配置期间部署到 overcloud 主机。要构建主机磁盘镜像

(kayobe) $ kayobe overcloud host image build

如果之前已构建了镜像,则不会重新构建它们。要强制重新构建镜像,请使用 --force-rebuild 参数。

参见

有关如何配置 overcloud 主机磁盘镜像构建过程的信息,请参见 此处

通过 SSH 访问种子(可选)

要通过 SSH 访问种子,首先确定种子的 IP 地址。我们可以使用 kayobe configuration dump 命令来检查种子的 IP 地址

(kayobe) $ kayobe configuration dump --host seed --var-name ansible_host

变量 kayobe_ansible_user 确定 Kayobe 在通过 SSH 访问机器时将使用的用户帐户。默认情况下,这是 stack。使用此用户访问种子

$ ssh <kayobe ansible user>@<seed VM IP>

要查看活动的容器

注意

示例显示在使用 Docker 作为容器引擎时的命令。如果使用 Podman,只需将命令中的 docker 替换为 sudo podman 即可。

$ docker ps

离开种子虚拟机并返回到 Ansible 控制主机上的 shell

$ exit

基础设施虚拟机

警告

对基础设施虚拟机的支持被认为是实验性的:其设计在未来版本中可能会发生变化,而无需弃用期。

注意

在遵循这些步骤之前,有必要进行一些配置。请参见 基础设施虚拟机

虚拟机配置

用于托管虚拟机的超visor 由 infra_vm_hypervisor 变量控制。它默认使用种子超visor。所有超visor 都应安装 CentOS 或 Ubuntu 以及 libvirt。它应该为虚拟机需要访问的所有网络配置 libvirt 网络,并为虚拟机的卷提供可用的 libvirt 存储池。有关 种子种子超visor 所需步骤可以在上面找到。

要配置基础设施虚拟机

(kayobe) $ kayobe infra vm provision

完成此命令后,基础设施虚拟机应处于活动状态并可通过 SSH 访问。Kayobe 将使用虚拟机的 IP 地址更新 Ansible 库存。

主机配置

要配置基础设施虚拟机主机操作系统

(kayobe) $ kayobe infra vm host configure

注意

如果基础设施虚拟机主机使用在先前安装中使用的磁盘,则可能需要擦除这些磁盘上的分区和 LVM 数据。要擦除主机配置期间未挂载的所有磁盘

(kayobe) $ kayobe infra vm host configure --wipe-disks

参见

有关主机配置的信息,请参见 此处

使用挂钩在虚拟机上部署服务

提供了一个无操作的服务部署命令来执行其他配置。其目的是让用户定义 挂钩到自定义 playbook,这些 playbook 定义了必要的任何进一步的配置或服务部署。

要触发挂钩

(kayobe) $ kayobe infra vm service deploy

示例

在此示例中,我们有一个名为 dns01 的基础设施虚拟机主机,它提供 DNS 服务。可以将该主机添加到库存中的 dns-servers

$KAYOBE_CONFIG_PATH/inventory/infra-vms
[dns-servers]
an-example-vm

[infra-vms:children]
dns-servers

我们有一个针对 dns-servers 组的自定义 playbook,用于设置 DNS 服务器

$KAYOBE_CONFIG_PATH/ansible/dns-server.yml
---
- name: Deploy DNS servers
  hosts: dns-servers
  tasks:
    - name: Install bind packages
      package:
        name:
          - bind
          - bind-utils
      become: true

最后,我们添加一个符号链接来将 playbook 设置为 kayobe infra vm service deploy 命令的挂钩

(kayobe) $ mkdir -p ${KAYOBE_CONFIG_PATH}/hooks/infra-vm-host-configure/post.d
(kayobe) $ cd ${KAYOBE_CONFIG_PATH}/hooks/infra-vm-host-configure/post.d
(kayobe) $ ln -s ../../../ansible/dns-server.yml 50-dns-server.yml

Overcloud

发现

注意

如果无法发现 overcloud,可以使用 bifrost 文件格式的服务器静态清单文件 servers.yml 进行配置,方法是在 ${KAYOBE_CONFIG_PATH}/bifrost.yml 中使用 kolla_bifrost_servers 变量。

overcloud 的发现由在 seed 上的 bifrost_deploy 容器中运行的 ironic inspector 服务支持。该服务配置为使用 IPA ramdisk 进行自省,对未识别的 MAC 地址进行 PXE 启动。如果自省节点在 ironic 清单中不存在,ironic inspector 将为其创建一个新条目。

通过使节点使用连接到 overcloud 置备网络的 NIC 进行 PXE 启动来触发 overcloud 的发现。对于许多服务器来说,这将是出厂默认设置,只需打开电源即可实现。

在发现过程完成后,overcloud 节点应在 seed 主机 bifrost_deploy 容器中运行的 ironic 服务中注册。可以通过在 seed 上执行以下命令来查看节点清单

注意

示例显示在使用 Docker 作为容器引擎时的命令。如果使用 Podman,只需将命令中的 docker 更改为 sudo podman 即可。

$ docker exec -it bifrost_deploy bash
(bifrost_deploy) $ export OS_CLOUD=bifrost
(bifrost_deploy) $ baremetal node list

为了使用 Kayobe 与这些节点交互,请运行以下命令将它们添加到 Kayobe 和 Kolla-Ansible 清单

(kayobe) $ kayobe overcloud inventory discover

参见

这篇 博客文章 提供了一个发现过程的案例研究,包括通过交换机端口描述自动命名 Ironic 节点、Ironic Inspector 和 LLDP。

保存硬件自省数据

如果 ironic inspector 在 seed 主机上使用,自省数据将存储在本地 nginx 服务中。可以将此数据保存到控制主机

(kayobe) $ kayobe overcloud introspection data save

--output-dir 可用于指定保存自省数据文件的目录。 --output-format 可用于设置文件格式。

BIOS 和 RAID 配置

注意

BIOS 和 RAID 配置可能需要硬件进行一次或多次电源循环才能完成操作。这些操作将自动执行。

注意

目前,仅支持 Dell 服务器的 overcloud 主机的 BIOS 和 RAID 配置。

BIOS 设置和 RAID 卷的配置当前作为硬件置备之外的单独任务执行。要配置 BIOS 和 RAID

(kayobe) $ kayobe overcloud bios raid configure

在配置节点的 RAID 卷后,可能需要对节点进行硬件检查,以重新配置 ironic 节点的调度属性和根设备提示。要执行手动硬件检查

(kayobe) $ kayobe overcloud hardware inspect

目前,配置 BIOS 和 RAID 存在一些限制

  • Ansible 控制主机必须能够访问正在配置的服务器的 BMC。

  • Ansible 控制主机必须在 Ansible 使用的 Python 解释器中提供 python-dracclient Python 模块。Python 解释器的路径通过 ansible_python_interpreter 进行配置。

置备

注意

有一个 cloud-init 问题,该问题阻止在置备后通过 SSH 访问没有名称的 Ironic 节点。为了避免此问题,请确保 Bifrost 清单中的所有 Ironic 节点都已命名。这可以通过 自动发现 或手动实现,例如从 seed

注意

示例显示在使用 Docker 作为容器引擎时的命令。如果使用 Podman,只需将命令中的 docker 更改为 sudo podman 即可。

$ docker exec -it bifrost_deploy bash
(bifrost_deploy) $ export OS_CLOUD=bifrost
(bifrost_deploy) $ baremetal node set ee77b4ca-8860-4003-a18f-b00d01295bda --name controller0

overcloud 的置备由在 seed 上的 bifrost 容器中运行的 ironic 服务执行。要置备 overcloud 节点

(kayobe) $ kayobe overcloud provision

完成此命令后,overcloud 节点应已置备了 OS 镜像。该命令将等待节点在 ironic 中变为 active 状态并通过 SSH 可访问。

主机配置

要配置 overcloud 主机的 OS

(kayobe) $ kayobe overcloud host configure

注意

如果控制器主机使用在先前安装中使用的磁盘,则可能需要擦除这些磁盘上的分区和 LVM 数据。要擦除主机配置期间未挂载的所有磁盘

(kayobe) $ kayobe overcloud host configure --wipe-disks

参见

有关主机配置的信息,请参见 此处

构建容器镜像

注意

可以使用来自像 Quay.io 这样的镜像仓库的预构建容器镜像。在这种情况下,可以跳过此步骤。

在某些情况下,可能需要本地构建镜像,以应用本地镜像自定义或使用 kolla 的下游版本。镜像由 container-image-builders 组中的主机构建,默认情况下包括 seed。如果未使用 seed 主机,例如在全包控制器开发环境中,可以修改此组以导致容器在控制器上构建。

要构建容器镜像

(kayobe) $ kayobe overcloud container image build

可以通过提供一个或多个镜像名称正则表达式来构建特定的镜像集

(kayobe) $ kayobe overcloud container image build ironic- nova-api

当您的环境使用 OVN 时,将不会构建 OVS 镜像。如果您想同时构建所有 Neutron 镜像,则需要将额外的变量 kolla_build_neutron_ovs 设置为 true

(kayobe) $ kayobe overcloud container image build -e kolla_build_neutron_ovs=true

为了在构建后将镜像推送到仓库,添加 --push 参数。

参见

有关配置 Kolla 以构建容器镜像的信息,请参见 此处

拉取容器镜像

注意

可以本地构建容器镜像,从而避免使用像 Quay.io 这样的镜像注册表。在这种情况下,可以跳过此步骤。

在大多数情况下,在 Quay.io 上提供合适的预构建 kolla 镜像。 openstack.kolla 组织 提供适合与 kayobe 配合使用的镜像仓库,默认情况下将使用它们。要从配置的镜像注册表拉取镜像

(kayobe) $ kayobe overcloud container image pull

构建部署镜像

注意

可以使用预构建的部署镜像。在这种情况下,可以跳过此步骤。

注意

仅当使用 Ironic 时,才需要部署镜像。否则,可以跳过此步骤。

可以使用来自 OpenStack 托管的 tarballs 或另一个来源的预构建部署镜像。在某些情况下,可能需要本地构建镜像,以应用本地镜像自定义或使用 Ironic Python Agent (IPA) 的下游版本。为了构建 IPA 镜像,应将 ipa_build_images 变量设置为 True

要本地构建镜像

(kayobe) $ kayobe overcloud deployment image build

如果之前已构建了镜像,则不会重新构建它们。要强制重新构建镜像,请使用 --force-rebuild 参数。

参见

有关如何配置 IPA 镜像构建过程的信息,请参见 此处

构建 Swift 环

注意

如果未使用 Swift,则可以跳过此部分。

Swift 使用环文件来控制集群中数据的位置。可以使用以下命令自动生成这些文件

(kayobe) $ kayobe overcloud swift rings generate

部署容器化服务

要部署 overcloud 中的容器化服务

(kayobe) $ kayobe overcloud service deploy

完成此命令后,overcloud 节点应在 Docker 容器中运行 OpenStack 服务。

参见

有关 Kolla Ansible 配置的信息,请参见 此处

与控制平面交互

Kolla-ansible 会输出一个环境变量文件,可用于以管理员用户身份访问 OpenStack 管理端点

$ source ${KOLLA_CONFIG_PATH:-/etc/kolla}/admin-openrc.sh

Kayobe 还会生成一个环境变量文件,可用于以管理员用户身份访问 OpenStack 公共端点,如果管理员端点无法从 Ansible 控制主机访问,则可能需要此文件

$ source ${KOLLA_CONFIG_PATH:-/etc/kolla}/public-openrc.sh

执行部署后配置

要执行 overcloud 服务的部署后配置

(kayobe) $ source ${KOLLA_CONFIG_PATH:-/etc/kolla}/admin-openrc.sh
(kayobe) $ kayobe overcloud post configure

这将执行以下任务

  • 将 Ironic Python Agent (IPA) 镜像注册到 glance

  • 将自省规则注册到 ironic inspector

  • 使用 neutron 注册置备网络和子网

  • 配置 Grafana 组织、仪表板和数据源