更新 Edge 带有 OSTree 和 Pulp 的设备

将工业机械连接到互联网带来了无限的机会,从性能改进和预测性维护到数据建模,可以带来新的解决方案和用例。 可能性是无止境。 以这种规模连接机器可以测试云连接的限制,具体取决于您的位置和网络限制。

边缘设备是位于两个网络边界的任何硬件。 当初始计算发生在边缘的服务器上时,它会加快用户与云的交互。 因此,添加边缘设备提供了优化性能、缩短旅程并减轻云连接负载的机会。

听起来很神奇,管理所有这些功能需要管理员持续关注。 从一开始就为边缘设备分配、部署和更新系统的可靠解决方案将帮助您将时间花在重要的事情上。

在本文中,我们将了解 OSTree 如何通过基于 Linux 的操作系统的版本更新来升级和更新边缘设备。 此外,我们将探讨 Pulp 如何促进 OSTree 内容的管理和准备更新,以及使其可用于边缘设备。 它们共同为管理边缘设备提供了强大的免费和开源解决方案。

OSTree 如何帮助管理 Edge 设备?

如果您需要将数百个操作系统部署到边缘设备,并且知道您可以轻松管理未来的更新和维护,那么 OSTree 的不可变和基于映像的操作系统已经为这项任务做好了准备。

OSTree 像 git 一样的功能,但用于操作系统二进制文件。 它具有类似 git 的内容寻址存储库。 提交和分支整个根文件系统树的能力类似于您在 git 中提交更改的方式。 使用 OSTree,您可以使用预安装的软件包(称为操作系统映像)构建操作系统。 构建操作系统映像后,可以对其进行跟踪、签名、测试和部署。 这些图像用作不可变的文件系统树。 当需要更改或更新时,您只需构建一个新映像并部署它。 通过在不同版本的图像之间自动切换,您完全替换了文件系统树。

OSTree 还有一个简单的 CLI,您可以使用它来管理简单的工作流,例如 example,用于在不同版本的图像/文件系统树之间切换。

在哪里 Fedora-物联网图像功能?

作为一个独立的工具,基本的 OSTree CLI 并不是用于管理存储库内容的功能最丰富的实用程序。 为了让生活更轻松,在下面的演示中,我们将使用 rpm-ostree. rpm-ostree 是一个混合映像/包系统,它结合了标准 OSTree 技术作为基本映像格式,并在客户端和服务器端都接受 RPM。

rpm-ostree 与 Fedora 物联网。 与其他生态系统相比,不是通过 DNF 安装包,而是使用 rpm-ostree 安装包。 重新启动后,所有更改都将应用于映像的新版本。

您还可以升级或安装新的 Fedora 带有 rpm-ostree 实用程序的 IoT 映像。

纸浆在哪里以及如何进入这个领域?

纸浆 是一个处理内容管理工作流程的平台。 使用 Pulp,您可以从远程存储库(例如 RPM 服务器、PyPI、Docker Hub、Ansible Galaxy 等)同步包。 您可以在 Pulp 服务器内的存储库中托管和修改同步包。 您可以发布包含可用于部署到生产环境的包的存储库。

在我们的场景中,Pulp 提供了一个平台,用于存储特定版本的 OSTree 内容,通过内容管理生命周期推广已批准的内容,用于 example 从开发到测试,从测试到产品。 Pulp 还提供了一种发布边缘设备使用的内容的方法。 使用 Pulp,您可以仅在安全的情况下提取最新的包、测试和发布。 Pulp 确保您的内容供应链的安全性、保障性和可重复性。

下图提供了 Pulp 的简化概述。 左侧显示了从远程源镜像到 Pulp 的不同内容类型。 然后将这些存储库提供给不同的 CI/CD 或生产环境。

纸浆的简化概述。 内容从远程存储库镜像,并可用于不同类型的环境。

Pulp 在更新或删除存储库中的包时会自动创建一个新的存储库版本。 您可以独立分发每个存储库版本。

Pulp 具有基于插件的架构,这意味着您必须为要使用的每种内容类型添加一个插件。 要管理 OSTree 内容,您需要 OSTree 插件. 然后,您可以从远程存储库镜像内容,从本地 tarball 导入内容,并在 Pulp 存储库中修改内容,同时保留原始内容的完整性。 您可以将提交和引用从一个存储库移动到另一个存储库或删除它们。 Pulp 确保您可以安全地进行试验,同时您的生产环境仍然固定在特定版本上。

把它们放在一起

在本节中,让我们看看如何使用 OSTree 提交构建映像。

建立一个定制 Fedora-物联网图像

我们首先启动一个新的虚拟机 (VM),该虚拟机将安装 Fedora-物联网操作系统。 为此目的 example,最好安装与运行的边缘设备相同版本的操作系统。

本节中的所有命令都在 main 上执行 admin 虚拟机 (Fedora 物联网 35 操作系统)。 在这 admin VM,我们将构建映像,然后分发到边缘设备。

在你开始之前:

  • 首先,确保可以通过 SSH 访问 VM。 要进行测试,请从目标操作系统中输入以下命令:
$ systemctl is-active sshd
  • 接下来,确保安装了以下用于编写操作系统映像的工具:
$ sudo rpm-ostree install osbuild-composer composer-cli
$ sudo systemctl enable --now osbuild-composer.socket
  • 现在,通过重新启动系统来应用已安装的软件包。

在这个 example 所有边缘设备上都安装了一个 nano 编辑器包。 我们需要使用包构建一个包含提交的图像。

创建一个蓝图文件,描述您要对图像进行的更改,如下所示:

$ cat install-nano.toml

name = "nano-commit"
description = "Installing nano"
version = "0.0.1"

[[packages]]
name = "nano"
version = "*"

将此蓝图推送到 os build composer 实用程序,这是一个用于编写操作系统映像的工具。 composer-cli 通过 CLI 与 osbuild composer 通信:

$ composer-cli blueprints push install-nano.toml

建立一个新的形象:

$ composer-cli compose start-ostree nano-commit fedora-iot-commit --ref fedora/stable/x86_64/iot

作曲家将使用您当前操作系统中可用的资源(例如默认操作系统版本)。

定期检查构建状态:

$ composer-cli compose status

构建完成后,下载镜像:

$ composer-cli compose image ${IMAGE_UUID}

下载的图像基本上是一个打包到 tarball 中的 OSTree 存储库。 当您提取归档内容时,您会注意到一个 ref 引用了提交的校验和。 您可以在 refs/heads/ 目录中找到它。

使用 Pulp 发布自定义图像

本节中显示的所有命令都在 main 上执行 admin 虚拟机 (Fedora 物联网 35 操作系统)。

在你开始之前:

  • 确保您已安装 Pulp 和用于管理 OSTree 存储库的 Pulp CLI:
$ python3 -m venv venv && source venv/bin/activate
$ pip install pulp-cli-ostree
  • 然后 配置 对 Pulp 服务器的引用:
$ pulp config create && pulp status

现在配置代理服务器或 SSH 端口转发以启用 VM 和 Pulp 之间的网络通信。 确保您可以从 VM ping Pulp 服务器。

首先,创建一个新的 OSTree 存储库:

$ pulp ostree repository create --name fedora-iot

以下命令会将上一节中创建的 tarball 导入 Pulp:

$ pulp ostree repository import-commits --name fedora-iot --file ${IMAGE_TARBALL_C1} --repository_name repo

将解析后的提交发布为 Pulp 托管的远程 OSTree 存储库:

$ pulp ostree distribution create --name fedora-iot --base-path fedora-iot --repository fedora-iot

尝试从 ref 中获取提交校验和:

$ curl https://${PULP_BASE_ADDR}/pulp/content/pulp-fedora-iot/refs/heads/fedora/stable/x86_64/iot

将自定义图像分发到 Edge 设备

这 Edge 设备可以是另一个虚拟机或正在运行的真实设备 Fedora 物联网。

本节中显示的所有命令都在一个 Edge 设备 (Fedora 物联网 35 操作系统)。

在你开始之前:

  • 配置代理服务器或 SSH 端口转发以启用服务器之间的网络通信 Edge 设备和纸浆。 确保您可以从 Edge 设备。
  • 确保 Edge 设备可通过 SSH 访问:
$ systemctl is-active sshd

nano 软件包不应与官方裸机一起预装 Fedora 物联网 35 图像。 通过尝试在终端内运行 nano 来验证这一点。

在 Fedora IoT,从定义的 URL 检索更新 /etc/ostree/remotes.d/fedora-iot.conf. 可以手动修改此文件,也可以通过添加新的远程存储库来修改此文件。 了解更多信息 添加和删​​除远程存储库.

您可以使用将在部署开始时配置的升级策略自动执行升级过程。 这是通过编写一个将边缘设备启动到无头状态的 kickstart 文件来完成的。 但是,为了演示的目的,让我们像个反派一样,手动更新上述配置文件,使其具有以下内容:

[remote "fedora-iot"]
url=https://${PULP_BASE_ADDR}/pulp/content/pulp-fedora-iot/refs/heads/fedora/stable/x86_64/iot
gpg-verify=false
ref=fedora/stable/x86_64/iot

不要忘记将变量 ${PULP_BASE_ADDR} 替换为到纸浆服务器的有效基本路径。

以下命令显示将要安装一些软件包:

$ rpm-ostree upgrade

重启边缘设备:

$ systemctl reboot

…重新启动…

通过 ssh 登录到边缘 VM,并检查是否存在来自 Pulp 的 nano 包:

$ nano

完毕! 您已成功分发定制的 Fedora 通过 Pulp 的物联网图像!

如有任何问题,请随时与我们联系 https://pulpproject.org/help.