Overcloud 主机磁盘镜像构建

本节涵盖使用 Diskimage builder (DIB) 构建 overcloud 主机磁盘镜像的配置,该构建器从 Yoga 12.0.0 版本开始可用。此配置应用于 ${KAYOBE_CONFIG_PATH}/overcloud-dib.yml

启用主机磁盘镜像构建

从 Yoga 版本开始,可以使用 Diskimage builder 直接构建 overcloud 主机的磁盘镜像,而不是通过 Bifrost。通过以下选项启用此功能

overcloud_dib_build_host_images

是否使用 DIB 直接构建主机磁盘镜像,而不是通过 Bifrost。将其设置为 true 会禁用 Bifrost 镜像构建,并允许使用 kayobe overcloud host image build 命令构建镜像。自 Zed 版本以来,默认值为 true。

启用此选项后,Bifrost 将配置为停止构建根磁盘镜像。这将在未来的版本中成为默认行为。

Overcloud 根磁盘镜像配置

Kayobe 使用 Diskimage builder (DIB) 构建根磁盘镜像,这些镜像将在主机被配置时部署到 overcloud 主机。以下选项配置如何构建这些镜像。有关构建磁盘镜像的更多信息,请参阅 Diskimage-builder 文档

默认配置使用所选的 OS 分发版(默认情况下为 Rocky Linux 10)构建整个磁盘(分区)镜像,并启用串行控制台,如果使用 CentOS Stream 或 Rocky Linux,则禁用 SELinux。 Cloud-init 用于处理 Bifrost 在配置期间构建的配置驱动。

overcloud_dib_host_packages_extra

要安装的额外主机软件包列表。默认情况下为空列表。

overcloud_dib_host_images

要构建的 overcloud 主机磁盘镜像列表。每个元素都是一个字典,定义了 stackhpc.openstack.os_images 角色接受格式的镜像。默认情况下,将构建一个名为 deployment_image 的镜像,该镜像使用以下 overcloud_dib_* 变量进行配置:{"name": "deployment_image", "elements": "{{ overcloud_dib_elements }}", "env": "{{ overcloud_dib_env_vars }}", "packages": "{{ overcloud_dib_packages }}"}

overcloud_dib_os_element

DIB 基本 OS 元素。默认值为 {{ 'rocky-container' if os_distribution == 'rocky' else os_distribution }}

overcloud_dib_os_release

DIB 镜像 OS 发布版本。默认值为 {{ os_release }}

overcloud_dib_elements_default

默认 DIB 元素列表。默认值为 ["{{ overcloud_dib_os_element }}", "cloud-init-datasources", "enable-serial-console", "vm"]vm 元素命名不佳,会导致 DIB 构建整个磁盘镜像,而不是单个分区。

overcloud_dib_elements_extra

额外的 DIB 元素列表。默认情况下为空。

overcloud_dib_elements

DIB 元素列表。默认值是 overcloud_dib_elements_defaultovercloud_dib_elements_extra 的组合。

overcloud_dib_env_vars_default

DIB 默认环境变量。默认值为 {"DIB_BOOTLOADER_DEFAULT_CMDLINE": "nofb nomodeset gfxpayload=text net.ifnames=1", "DIB_CLOUD_INIT_DATASOURCES": "ConfigDrive", "DIB_CONTAINERFILE_RUNTIME": "docker", "DIB_CONTAINERFILE_NETWORK_DRIVER": "host", DIB_RELEASE": "{{ overcloud_dib_os_release }}"}

overcloud_dib_env_vars_extra

DIB 额外的环境变量。默认情况下为空。

overcloud_dib_env_vars

DIB 环境变量。默认值是 overcloud_dib_env_vars_defaultovercloud_dib_env_vars_extra 的组合。

overcloud_dib_packages

要安装的 DIB 软件包列表。默认情况下不安装额外的软件包。

overcloud_dib_git_elements_default

包含 Diskimage Builder (DIB) 元素的 git 仓库列表。有关用法,请参阅 stackhpc.openstack.os_images 角色。默认情况下为空。

overcloud_dib_git_elements_extra

包含 Diskimage Builder (DIB) 元素的额外 git 仓库列表。有关用法,请参阅 stackhpc.openstack.os_images 角色。默认情况下为空。

overcloud_dib_git_elements

包含 Diskimage Builder (DIB) 元素的 git 仓库列表。有关用法,请参阅 stackhpc.openstack.os_images 角色。默认值是 overcloud_dib_git_elements_defaultovercloud_dib_git_elements_extra 的组合。

overcloud_dib_upper_constraints_file

用于安装用于构建 overcloud 主机磁盘镜像的虚拟环境中的软件包的上层约束文件。默认值为 {{ pip_upper_constraints_file }}

overcloud_dib_dib_upper_constraints_file

用于安装 DIB 以构建 overcloud 主机磁盘镜像的上层约束文件。默认情况下为空字符串。

磁盘镜像使用以下命令构建

(kayobe) $ kayobe overcloud host image build

值得注意的是,如果镜像已经存在,则不会重新构建它们。要强制重新构建镜像,必须使用 --force-rebuild 参数。

(kayobe) $ kayobe overcloud host image build --force-rebuild

示例:添加一个元素

在以下示例中,我们扩展了 DIB 元素列表,以添加 growpart 元素

dib.yml
overcloud_dib_elements_extra:
  - "growpart"

示例:构建 XFS 根文件系统镜像

默认情况下,DIB 将以 ext4 格式格式化镜像。在某些情况下,使用 XFS 可能很有用,例如在使用 overlay Docker 存储驱动程序时,该驱动程序可能会达到 ext4 允许的最大硬链接数。

在 DIB 中,我们通过将 FS_TYPE 环境变量设置为 xfs 来实现这一点。

dib.yml
overcloud_dib_env_vars_extra:
  FS_TYPE: "xfs"

示例:配置开发用户帐户

警告

不应在生产环境中使用开发用户帐户。

在调试失败的部署时,有时需要允许通过预配置的用户帐户访问镜像,该帐户具有已知密码。这可以通过 devuser 元素来实现。

本示例演示如何添加 devuser 元素,并配置具有无密码 sudo 权限的用户名和密码

dib.yml
overcloud_dib_elements_extra:
  - "devuser"

overcloud_dib_env_vars_extra:
  DIB_DEV_USER_USERNAME: "devuser"
  DIB_DEV_USER_PASSWORD: "correct horse battery staple"
  DIB_DEV_USER_PWDLESS_SUDO: "yes"

或者,可以使用 dynamic-login 元素 通过将它们附加到内核参数来授权 SSH 密钥。

示例:配置自定义 DIB 元素

有时使用 DIB 本身未提供的自定义 DIB 元素很有用。这可以通过在 git 仓库中共享它们来完成。

overcloud-dib.yml
overcloud_dib_elements_extra:
  - "my-element"

overcloud_dib_git_elements:
  - repo: "https://git.example.com/custom-dib-elements"
    local: "{{ source_checkout_path }}/custom-dib-elements"
    version: "master"
    elements_path: "elements"

在此示例中,https://git.example.com/custom-dib-elementsmaster 分支将具有一个顶级 elements 目录,其中包含 my-element 目录,用于该元素。

示例:安装软件包

有时需要在根磁盘镜像中安装额外的软件包。为了避免编写自定义 DIB 元素,我们可以使用 overcloud_dib_packages 变量。例如,要安装 biosdevname 软件包

dib.yml
overcloud_dib_packages:
  - "biosdevname"

示例:构建多个镜像

可能需要构建多个镜像来支持部署中存在的各种硬件或 overcloud 主机执行的不同功能。可以使用 overcloud_dib_host_images 变量进行配置,使用 stackhpc.openstack.os_images 角色接受的格式。请注意,镜像名称不应包含文件扩展名。例如,要构建第二个镜像,该镜像具有开发用户帐户和 biosdevname 软件包

dib.yml
overcloud_dib_host_images:
  - name: "deployment_image"
    elements: "{{ overcloud_dib_elements }}"
    env: "{{ overcloud_dib_env_vars }}"
    packages: "{{ overcloud_dib_packages }}"
  - name: "debug_deployment_image"
    elements: "{{ overcloud_dib_elements + ['devuser'] }}"
    env: "{{ overcloud_dib_env_vars | combine(devuser_env_vars) }}"
    packages: "{{ overcloud_dib_packages + ['biosdevname'] }}"

devuser_env_vars:
  DIB_DEV_USER_USERNAME: "devuser"
  DIB_DEV_USER_PASSWORD: "correct horse battery staple"
  DIB_DEV_USER_PWDLESS_SUDO: "yes"

使用此配置运行 kayobe overcloud host image build 命令将创建两个镜像:deployment_image.qcow2debug_deployment_image.qcow2

磁盘镜像部署配置

有关如何配置用于配置每个主机的根磁盘镜像,请参阅 Bifrost 中的磁盘镜像部署配置