4.9. 使用 Image Mode (bootc)镜像部署数据平面节点


重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

您可以使用 Image Mode (bootc)将 data plane 镜像作为容器构建、部署和管理,作为基于 RPM 的方法的替代选择。

在决定将 Image Mode 镜像用于此目的时请考虑以下点:

  • 您必须始终重新引导节点以使用镜像模式镜像。
  • edpm_update_services 服务的版本依赖于 openstack_selinux。如果 edpm_update_services 需要新版本的 openstack-selinux,则构建更新的镜像模式镜像并切换到更新的镜像。
  • 您应该在计划的维护窗口期间执行系统更新,因为需要重新引导节点以使用更新的镜像。
  • 在开始更新前,请确保镜像模式镜像可从所有节点访问。
  • 使用 Image Mode 镜像的节点无法更新单个 RPM 软件包。所有更新都必须包含在更新的镜像模式镜像中。
  • 如果新镜像出现问题,镜像模式支持回滚到以前的镜像。
  • 更新的节点重启后,您应该始终验证新镜像是否活跃。

有关使用 Image Mode 镜像更新 data plane 节点的详情,请参考将 环境更新至最新维护版本 中的 更新 镜像模式 (bootc) data plane 节点

4.9.1. 准备构建主机

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

准备构建主机以构建镜像模式(bootc)镜像,并将镜像推送到容器注册表。

先决条件

  • 构建主机使用 Red Hat Enterprise Linux (RHEL) 9.4 或更高版本。
  • 构建主机至少有 10GB 可用磁盘空间。
  • 用户具有对特权容器操作的 sudo 访问权限。
  • 用户具有容器 registry push 权限。

流程

  1. 登录构建主机。
  2. 安装执行构建操作所需的软件包:

    $ sudo dnf install -y podman buildah osbuild-selinux
  3. 创建一个新文件,以存储构建环境的环境变量。
  4. 在您的文件中添加以下环境变量:

    # Container registry and image names
    export EDPM_BOOTC_REPO="<container_registry_url>"
    export EDPM_BOOTC_TAG="latest"
    export EDPM_BOOTC_IMAGE="${EDPM_BOOTC_REPO}:${EDPM_BOOTC_TAG}"
    export EDPM_QCOW2_IMAGE="${EDPM_BOOTC_REPO}:${EDPM_BOOTC_TAG}-qcow2"
    
    # Build configuration
    export EDPM_BASE_IMAGE="registry.redhat.io/rhel9/rhel-bootc:9.4"
    export EDPM_CONTAINERFILE="Containerfile"
    export RHSM_SCRIPT="<script_name>"
    export FIPS="<fips_setting>"
    export USER_PACKAGES="<additional_package_list>"
    • <container_registry_url > 替换为容器 registry 的 URL。
    • <script_name > 替换为 Red Hat Subscription Management (RHSM)脚本。如果您有 RHEL 订阅和 空.sh,请使用 rhsm.sh
    • <fips_setting& gt; 替换为 FIPS 模式值。使用 1 启用 FIPS 模式和 0 来禁用 FIPS 模式。
    • <additional_package_list > 替换为要安装的附加软件包列表。如果没有要安装的附加软件包,请为这个值使用一组空的引号("")。
  5. 使用您的构建环境变量保存文件。
  6. 使用构建环境变量提供该文件:

    $ source ~/<build_variable_file>
    • <build_variable_file > 替换为您创建的文件的名称,以包含您的环境文件。
  7. 进入 EDPM 镜像构建器目录:

    $ cd edpm-image-builder
  8. 下载必要的 edpm-image-builder 文件:

    $ mkdir -p bootc
    $ pushd bootc
    $ curl -O https://raw.githubusercontent.com/openstack-k8s-operators/edpm-image-builder/ee5219d7df4772586105649e03d1f545c9e4d653/bootc/Containerfile
    $ curl -O https://raw.githubusercontent.com/openstack-k8s-operators/edpm-image-builder/ee5219d7df4772586105649e03d1f545c9e4d653/bootc/rhsm.sh
    $ chmod +x rhsm.sh
    $ mkdir -p ansible-facts
    $ pushd ansible-facts
    $ curl -O https://raw.githubusercontent.com/openstack-k8s-operators/edpm-image-builder/ee5219d7df4772586105649e03d1f545c9e4d653/bootc/ansible-facts/bootc.fact
    $ popd
    $ popd
    $ curl -O https://raw.githubusercontent.com/openstack-k8s-operators/edpm-image-builder/ee5219d7df4772586105649e03d1f545c9e4d653/Containerfile.image
    $ curl -O https://raw.githubusercontent.com/openstack-k8s-operators/edpm-image-builder/ee5219d7df4772586105649e03d1f545c9e4d653/copy_out.sh
    $ chmod +x copy_out.sh
  9. 进入 bootc 目录:

    $ cd bootc
  10. 创建输出目录:

    $ mkdir -p output/yum.repos.d
  11. 执行以下步骤使用 Subscription Manager 修改基于 RHEL 的构建:

    1. 在文本编辑器中打开 rhsm.sh
    2. 编辑订阅变量:

      RHSM_USER=<rhsm_username>
      RHSM_PASSWORD=<rhsm_password>
      RHSM_POOL=<rhsm_pool_id>
      • <rhsm_username& gt; 替换为您的 Subscription Manager 用户名。
      • <rhsm_password& gt; 替换为您的 Subscription Manager 密码。
      • 如果禁用了 SCA,请将 < rhsm_pool_id > 替换为您的 Subscription Manager Pool ID。

        注意

        根据您的环境,可能需要对 rhsm.sh 进行额外的编辑。例如,这些可以包括运行带有激活码的 Subscription Manager 命令,或使用任何自定义脚本启用所需的存储库。

  12. 保存并关闭该文件。
  13. RHSM_SCRIPT 环境变量设置为您编辑的脚本文件:

    $ export RHSM_SCRIPT="rhsm.sh"

4.9.2. 构建镜像模式(bootc)容器镜像

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

构建镜像模式(bootc)镜像,以便它可以推送到容器 registry。

先决条件

流程

  1. 登录构建主机。
  2. 进入 bootc 目录:

    $ cd bootc
  3. 登录到 registry.redhat.io

    $ sudo podman login registry.redhat.io
  4. 构建镜像模式容器镜像:

    $ sudo buildah bud \
        --build-arg EDPM_BASE_IMAGE=${EDPM_BASE_IMAGE} \
        --build-arg RHSM_SCRIPT=${RHSM_SCRIPT} \
        --build-arg FIPS=${FIPS} \
        --build-arg USER_PACKAGES="${USER_PACKAGES}" \
        --volume /etc/pki/ca-trust:/etc/pki/ca-trust:ro,Z \
        --volume $(pwd)/output/yum.repos.d:/etc/yum.repos.d:rw,Z \
        -f ${EDPM_CONTAINERFILE} \
        -t ${EDPM_BOOTC_IMAGE} \
        .
  5. 验证容器镜像是否已成功构建:

    $ sudo podman images | grep ${EDPM_BOOTC_REPO}
  6. 将容器镜像推送到容器 registry:

    $ sudo podman push ${EDPM_BOOTC_IMAGE}
重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

构建 QCOW2 镜像模式(bootc)镜像,以便它可用于裸机部署。这是所有部署不需要的可选流程。

先决条件

流程

  1. 登录构建主机。
  2. 进入 bootc 目录:

    $ cd bootc
  3. BUILDER_IMAGE 环境变量设置为使用 RHEL。以下是执行此任务的示例:

    $ export BUILDER_IMAGE="registry.redhat.io/rhel9/bootc-image-builder:latest"
  4. 生成 QCOW2 磁盘镜像:

    $ sudo podman run \
        --rm \
        -it \
        --privileged \
        --security-opt label=type:unconfined_t \
        -v ./output:/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        ${BUILDER_IMAGE} \
        --type qcow2 \
        --local \
        ${EDPM_BOOTC_IMAGE}
  5. 将 QCOW2 镜像移到构建目录中,并确认镜像校验和值:

    $ pushd output
    $ sudo mv qcow2/disk.qcow2 edpm-bootc.qcow2
    $ sudo sha256sum edpm-bootc.qcow2 > edpm-bootc.qcow2.sha256
    $ popd
  6. 准备打包文件:

    $ cp ../copy_out.sh output/
    $ cp ../Containerfile.image output/
  7. BASE_IMAGE 环境变量设置为使用 RHEL。以下是执行此任务的示例:

    $ export BASE_IMAGE=registry.redhat.io/rhel9-4-els/rhel:9.4
  8. 构建 QCOW2 容器镜像:

    $ pushd output
    $ sudo buildah bud \
        --build-arg IMAGE_NAME=edpm-bootc \
        --build-arg BASE_IMAGE=${BASE_IMAGE} \
        -f ./Containerfile.image \
        -t ${EDPM_QCOW2_IMAGE} \
        .
    $ popd
  9. 将 QCOW2 容器镜像推送到容器 registry:

    $ sudo podman push ${EDPM_QCOW2_IMAGE}
重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

以下示例配置演示了如何在 OpenStackDataPlaneNodeSet CR 中使用 QCOW2 容器镜像:

apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneNodeSet
metadata:
  name: edpm-compute-bootc
  namespace: openstack
spec:
  preProvisioned: False
  baremetalSetTemplate:
    osImage: <qcow2_image_filename>
    osContainerImageUrl: <qcow2_image_url>
  • <qcow2_image_filename > 替换为从容器提取的 QCOW2 镜像的文件名。这应该与 QCOW2 容器镜像中的文件名匹配。例如: edpm-bootc.qcow2
  • <qcow2_image_url > 替换为 QCOW2 容器镜像的完整 URL。此镜像具有 a -qcow2 后缀。例如: your-registry.example.com/edpm-bootc:latest-qcow2

有关配置和部署 OpenStackDataPlaneNodeSet CR 的更多信息,请参阅在 OpenShift 上部署 Red Hat OpenStack Services 中的 创建 数据平面

4.9.5. 镜像构建自定义

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

镜像构建过程可以通过多种方式自定义,具体取决于您的环境和需求。以下自定义可用于修改镜像构建过程:

联邦信息处理标准(FIPS)配置

通过将 FIPS 环境变量设置为 0 来禁用 FIPS 模式:

$ export FIPS="0"
软件包自定义

容器文件定义了几个软件包环境变量,您可以通过修改构建参数来自定义它们。关键软件包类别包括:

  • BOOTSTRAP_PACKAGES: Core system packages
  • OVS_PACKAGES: Open vSwitch 软件包
  • PODMAN_PACKAGES: 容器运行时软件包
  • LIBVIRT_PACKAGES: 虚拟化软件包
  • CEPH_PACKAGES: Ceph 存储软件包
  • USER_PACKAGES: 用户定义的软件包以获取额外的功能

    USER_PACKAGES 环境变量允许您在构建期间将其他软件包注入镜像模式(bootc)镜像。这可用于添加未包含在默认软件包集中的特定于站点工具、驱动程序或实用程序。

    在构建镜像前,定义 USER_PACKAGES 的值,以便将其他软件包注入已完成的镜像。

    以下示例将 USER_PACKAGES 的值设置为在构建期间添加自定义软件包,然后使用包含的自定义执行 buildah 命令:

    $ export USER_PACKAGES="vim htop strace tcpdump"
    
    $ sudo buildah bud \
        --build-arg EDPM_BASE_IMAGE=${EDPM_BASE_IMAGE} \
        --build-arg RHSM_SCRIPT=${RHSM_SCRIPT} \
        --build-arg FIPS=${FIPS} \
        --build-arg USER_PACKAGES="${USER_PACKAGES}" \
        --volume /etc/pki/ca-trust:/etc/pki/ca-trust:ro,Z \
        --volume $(pwd)/output/yum.repos.d:/etc/yum.repos.d:rw,Z \
        -f ${EDPM_CONTAINERFILE} \
        -t ${EDPM_BOOTC_IMAGE} \
        .

    以下是 USER_PACKAGES 的一些额外示例值:

  • 添加调试和监控工具:

    $ export USER_PACKAGES="vim htop strace tcpdump iperf3 curl wget"
  • 添加与存储相关的工具:

    $ export USER_PACKAGES="lvm2 multipath-tools sg3_utils"
  • 添加网络调试工具:

    export USER_PACKAGES="nmap netcat-openbsd traceroute mtr"
  • 添加开发工具:

    export USER_PACKAGES="git gcc make python3-pip"
    注意
    • 软件包名称必须对基础镜像操作系统存储库有效。
    • 软件包必须在配置的存储库中可用。
    • 附加软件包会增加镜像大小。

4.9.6. 镜像构建过程故障排除

重要

该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息

以下是您在镜像构建过程中遇到的错误以及相关的故障排除信息:

构建失败并显示权限错误
如果构建失败并显示权限错误,请确保使用带有 buildahpodman 命令的 sudo 进行特权操作。
软件包安装错误

如果软件包安装失败,请验证您的存储库配置:

$ ls -la output/yum.repos.d/
容器 registry 身份验证错误

如果容器 registry 身份验证失败,请确保您登录到容器 registry:

$ sudo podman login <registry_url>
  • <registry_url > 替换为容器 registry 的 URL。
存储空间错误

如果您收到存储空间错误,请删除任何未使用的镜像:

$ sudo podman system prune -a
注意

镜像模式(bootc)镜像可能会占用比其他镜像更多的存储空间。您应该在发生错误前主动确保未使用的镜像文件不会占用存储空间。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部