第 4 章 嵌入红帽构建的 MicroShift 应用程序教程
以下教程提供了如何在 RHEL for Edge 镜像中嵌入应用程序以便在各种环境中在 MicroShift 集群中使用的详细示例。
4.1. 嵌入应用程序 RPM 指南
以下教程回顾 MicroShift 安装步骤,并添加用于嵌入应用程序的工作流的描述。如果您已经熟悉 rpm-ostree
系统,如 Red Hat Enterprise Linux for Edge (RHEL for Edge)和 MicroShift,您可以直接进入相关的操作。
4.1.1. 安装工作流查看
嵌入的应用程序需要类似的工作流将 MicroShift 嵌入到 RHEL for Edge 镜像中。
- 下图显示了系统工件(如 RPM、容器和文件)如何添加到蓝图中,并由镜像 composer 创建 ostree 提交。
- 然后,ostree 提交可以遵循 ISO 路径或边缘设备的存储库路径。
- ISO 路径可用于断开连接的环境,而存储库路径通常用于网络通常连接。
嵌入 MicroShift 工作流
查看这些步骤可帮助您了解嵌入应用程序所需的步骤:
- 要在 RHEL for Edge 上嵌入 MicroShift,您需要将 MicroShift 存储库添加到 Image Builder 中。
- 您创建了声明您所需的所有 RPM、容器镜像、文件和自定义的蓝图,包括添加 MicroShift。
-
您已将蓝图添加到镜像构建器,并使用 Image Builder CLI 工具(
composer-cli
)运行构建。此步骤创建rpm-ostree
提交,用于创建容器镜像。此镜像包含 RHEL for Edge。 -
将安装程序蓝图添加到镜像构建器中,以创建
rpm-ostree
镜像(ISO)来从其引导。此构建包含 RHEL for Edge 和 MicroShift。 - 下载了使用 MicroShift 嵌入的 ISO,准备好使用、置备它,然后将其安装到边缘设备中。
4.1.2. 嵌入应用程序 RPM 工作流
设置满足 Image Builder 要求的构建主机后,您可以将应用程序以清单目录的形式添加到镜像。这些步骤后,将应用程序或工作负载嵌入到新 ISO 中最简单的方法是创建自己的包含清单的 RPM。您的应用程序 RPM 包含描述部署的所有配置文件。
以下"嵌入的应用程序工作流"镜像演示了如何将 Kubernetes 应用程序清单和 RPM 规格文件合并到单个应用程序 RPM 构建中。此构建成为工作流中包含的 RPM 工件,用于将 MicroShift 嵌入到 ostree 提交中。
嵌入应用程序工作流
以下流程使用 rpmbuild
工具创建规格文件和本地存储库。规范文件定义了如何构建软件包,将应用程序清单移到 MicroShift 的 RPM 软件包中的正确位置,以便获取它们。然后,该 RPM 软件包被嵌入到 ISO 中。
4.1.3. 准备进行应用程序 RPM
要构建自己的 RPM,请选择您选择的工具,如 rpmbuild
工具,并在主目录中初始化 RPM 构建树。以下是示例步骤。只要您的 RPM 可以被镜像构建器访问,就可以使用您喜欢构建应用程序 RPM 的方法。
先决条件
- 您已设置了满足 Image Builder 系统要求的 Red Hat Enterprise Linux for Edge (RHEL for Edge) 9.2 构建主机。
- 有对主机的 root 访问权限。
流程
运行以下命令,安装
rpmbuild
工具并为其创建 yum 存储库:$ sudo dnf install rpmdevtools rpmlint yum-utils createrepo
运行以下命令,创建构建 RPM 软件包所需的文件树:
$ rpmdev-setuptree
验证
运行以下命令列出确认创建的目录:
$ ls ~/rpmbuild/
输出示例
BUILD RPMS SOURCES SPECS SRPMS
4.1.4. 为应用程序清单构建 RPM 软件包
要构建自己的 RPM,您必须创建一个 spec 文件,将应用程序清单添加到 RPM 软件包中。以下是示例步骤。只要应用程序 RPM 和其他镜像构建元素可供镜像构建器访问,您可以使用您喜欢的方法。
先决条件
- 您已设置了满足 Image Builder 系统要求的 Red Hat Enterprise Linux for Edge (RHEL for Edge) 9.2 构建主机。
- 有对主机的 root 访问权限。
- 构建 RPM 软件包所需的文件树已创建。
流程
在
~/rpmbuild/SPECS
目录中,使用以下模板创建一个文件,如 <application_workload_manifests.spec
> :spec 文件示例
Name: <application_workload_manifests> Version: 0.0.1 Release: 1%{?dist} Summary: Adds workload manifests to microshift BuildArch: noarch License: GPL Source0: %{name}-%{version}.tar.gz #Requires: microshift %description Adds workload manifests to microshift %prep %autosetup %install 1 rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{_prefix}/lib/microshift/manifests cp -pr ~/manifests $RPM_BUILD_ROOT/%{_prefix}/lib/microshift/ %clean rm -rf $RPM_BUILD_ROOT %files %{_prefix}/lib/microshift/manifests/** %changelog * <DDD MM DD YYYY username@domain - V major.minor.patch> - <your_change_log_comment>
- 1
%install
部分在 RPM 软件包/usr/lib/microshift/manifests/
中创建目标目录,并从源主目录~/manifests
复制清单。
重要所有必需的 YAML 文件都必须位于源主目录
~/manifests
中,如果您使用的是 kustomize,则包括kustomize.yaml
文件。运行以下命令,在
~/rpmbuild/RPMS
目录中构建 RPM 软件包:$ rpmbuild -bb ~/rpmbuild/SPECS/<application_workload_manifests.spec>
4.1.5. 在蓝图中添加应用程序 RPM
要将应用程序 RPM 添加到蓝图中,您必须创建一个本地仓库,供 Image Builder 用于创建 ISO。使用这个流程,您的工作负载所需的容器镜像可以通过网络拉取。
先决条件
- 有对主机的 root 访问权限。
-
工作负载或应用程序 RPM 存在于
~/rpmbuild/RPMS
目录中。
流程
运行以下命令来创建本地 RPM 存储库:
$ createrepo ~/rpmbuild/RPMS/
运行以下命令,为 Image Builder 授予对 RPM 存储库的访问权限:
$ sudo chmod a+rx ~
注意您必须确保 Image Builder 具有访问镜像构建所需的所有文件所需的权限,或者构建无法继续。
使用以下模板创建蓝图文件
repo-local-rpmbuild.toml
:id = "local-rpm-build" name = "RPMs build locally" type = "yum-baseurl" url = "file://<path>/rpmbuild/RPMS" 1 check_gpg = false check_ssl = false system = false
- 1
- 指定创建您选择的位置的路径部分。在后续命令中使用此路径来设置存储库并复制 RPM。
运行以下命令,将存储库添加为镜像构建器的源:
$ sudo composer-cli sources add repo-local-rpmbuild.toml
通过添加以下几行,将 RPM 添加到蓝图中:
… [[packages]] name = "<application_workload_manifests>" 1 version = "*" …
- 1
- 在此处添加工作负载的名称。
运行以下命令,将更新的蓝图推送到镜像构建器:
$ sudo composer-cli blueprints push repo-local-rpmbuild.toml
此时,您可以运行 Image Builder 来创建 ISO,或嵌入容器镜像供离线使用。
要创建 ISO,请运行以下命令启动镜像构建器:
$ sudo composer-cli compose start-ostree repo-local-rpmbuild edge-commit
在这种情况下,容器镜像在启动时由边缘设备通过网络拉取。