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 权限。
流程
- 登录构建主机。
安装执行构建操作所需的软件包:
$ sudo dnf install -y podman buildah osbuild-selinux- 创建一个新文件,以存储构建环境的环境变量。
在您的文件中添加以下环境变量:
# 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> 替换为 FIPS 模式值。使用1启用 FIPS 模式和0来禁用 FIPS 模式。 -
将
<additional_package_list> 替换为要安装的附加软件包列表。如果没有要安装的附加软件包,请为这个值使用一组空的引号("")。
-
将
- 使用您的构建环境变量保存文件。
使用构建环境变量提供该文件:
$ source ~/<build_variable_file>-
将
<build_variable_file> 替换为您创建的文件的名称,以包含您的环境文件。
-
将
进入 EDPM 镜像构建器目录:
$ cd edpm-image-builder下载必要的
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进入
bootc目录:$ cd bootc创建输出目录:
$ mkdir -p output/yum.repos.d执行以下步骤使用 Subscription
Manager修改基于 RHEL 的构建:-
在文本编辑器中打开
rhsm.sh。 编辑订阅变量:
RHSM_USER=<rhsm_username> RHSM_PASSWORD=<rhsm_password> RHSM_POOL=<rhsm_pool_id>-
将
<rhsm_username> 替换为您的 Subscription Manager 用户名。 -
将
<rhsm_password> 替换为您的 Subscription Manager 密码。 如果禁用了 SCA,请将 <
rhsm_pool_id> 替换为您的 Subscription Manager Pool ID。注意根据您的环境,可能需要对
rhsm.sh进行额外的编辑。例如,这些可以包括运行带有激活码的 Subscription Manager 命令,或使用任何自定义脚本启用所需的存储库。
-
将
-
在文本编辑器中打开
- 保存并关闭该文件。
将
RHSM_SCRIPT环境变量设置为您编辑的脚本文件:$ export RHSM_SCRIPT="rhsm.sh"
4.9.2. 构建镜像模式(bootc)容器镜像 复制链接链接已复制到粘贴板!
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
构建镜像模式(bootc)镜像,以便它可以推送到容器 registry。
先决条件
- 您已完成了 准备构建主机以准备构建主机 的步骤。
流程
- 登录构建主机。
进入
bootc目录:$ cd bootc登录到
registry.redhat.io:$ sudo podman login registry.redhat.io构建镜像模式容器镜像:
$ 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} \ .验证容器镜像是否已成功构建:
$ sudo podman images | grep ${EDPM_BOOTC_REPO}将容器镜像推送到容器 registry:
$ sudo podman push ${EDPM_BOOTC_IMAGE}
4.9.3. 可选:构建镜像模式(bootc) QCOW2 容器镜像 复制链接链接已复制到粘贴板!
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
构建 QCOW2 镜像模式(bootc)镜像,以便它可用于裸机部署。这是所有部署不需要的可选流程。
先决条件
- 您已完成了 准备构建主机以准备构建主机 的步骤。
流程
- 登录构建主机。
进入
bootc目录:$ cd bootc将
BUILDER_IMAGE环境变量设置为使用 RHEL。以下是执行此任务的示例:$ export BUILDER_IMAGE="registry.redhat.io/rhel9/bootc-image-builder:latest"生成 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}将 QCOW2 镜像移到构建目录中,并确认镜像校验和值:
$ pushd output $ sudo mv qcow2/disk.qcow2 edpm-bootc.qcow2 $ sudo sha256sum edpm-bootc.qcow2 > edpm-bootc.qcow2.sha256 $ popd准备打包文件:
$ cp ../copy_out.sh output/ $ cp ../Containerfile.image output/将
BASE_IMAGE环境变量设置为使用 RHEL。以下是执行此任务的示例:$ export BASE_IMAGE=registry.redhat.io/rhel9-4-els/rhel:9.4构建 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将 QCOW2 容器镜像推送到容器 registry:
$ sudo podman push ${EDPM_QCOW2_IMAGE}
4.9.4. QCOW2 容器镜像的 OpenStackDataPlaneNodeSet CR 配置示例 复制链接链接已复制到粘贴板!
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
以下示例配置演示了如何在 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. 镜像构建过程故障排除 复制链接链接已复制到粘贴板!
该功能在此发行版本中作为技术预览提供,因此不享有红帽的全面支持。它只应用于测试,不应部署在生产环境中。有关技术预览功能的更多信息,请参阅覆盖范围详细信息。
以下是您在镜像构建过程中遇到的错误以及相关的故障排除信息:
- 构建失败并显示权限错误
-
如果构建失败并显示权限错误,请确保使用带有
buildah和podman命令的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)镜像可能会占用比其他镜像更多的存储空间。您应该在发生错误前主动确保未使用的镜像文件不会占用存储空间。