基于镜像的 Linux 部署:rpm - ostree 与 bootc 深度解析
1. 技术要求
要顺利进行相关操作,你需要满足以下条件:
- 两台裸机或虚拟机,可对其操作系统进行修改或重新安装。
- 具备 root 访问权限、互联网访问权限,采用 DHCP 方式分配 IP 地址。
- 能够下载 ISO 镜像,拥有一个 16GB 或更大容量的 USB 拇指驱动器。
- 拥有一个免费的 Red Hat Developer 账户,并可访问自己的 Quay 注册表(同样免费)。
本文以 CentOS Streams 9 作为构建机器的操作系统,并将创建一个 CentOS Streams 9 可引导容器镜像。
2. 基于镜像的 Linux 部署简介
基于镜像的 Linux 部署技术对于嵌入式 Linux 系统设备及其构建和支持生态系统而言,是非常合适的选择。采用这项新技术的最大原因是简化生命周期管理。接下来将介绍两种部署方法:rpm - ostree 和 bootc 可引导容器镜像。
3. rpm - ostree 和原子镜像
- 定义与特点 :rpm - ostree 这种部署方式有时也被称为原子部署,因其具有不可变性。一些厂商有自己的营销名称,如 Red Hat 称其为 RHEL for Edge。近年来,许多发行版都增加了 rpm - ostree 部署选项,像 Fedora Silverblue、NixOS 等都是纯原子发行版。基于镜像的部署能为 Linux 的各种用例提供更高的安全性和稳定性,可在裸机、虚拟机或云实例上轻松运行。
- OSTree 包 :OSTree 包是核心,用于组合、构建、部署和更新基于镜像的操作系统,类似于与版本控制系统结合的文件系统树。它支持两个持久且可写的目录 /etc 和 /var,这使得传统的分区方法基本不再适用。
-
文件系统映射与权限 :
| 原目录 | 映射目录 | 权限 |
| ---- | ---- | ---- |
| /home | /var/home | RW |
| /srv | /var/srv | RW |
| /root | /var/roothome | RW |
| /opt | /var/opt | RW |
| /mnt | /var/mnt | RW |
| /sysroot | - | RO |
| /boot 和 /boot/efi | - | RW | -
rpm - ostree 分层方法 :
- 可以通过 flatpacks 部署完全自包含的应用程序,或在镜像外部部署运行的容器镜像来进行分层。
- 也可以在镜像上安装 RPM 包,但建议将其作为镜像的一部分,通过包含额外 RPM 包的最新镜像来更新系统。
-
支持 rpm - ostree 的发行版 :Red Hat Enterprise Linux、Fedora(常见如 Silverblue)、Vanilla OS 等。更多详细信息可查看 libostree 文档:https://ostreedev.github.io/ostree/ 。
4. rpm - ostree 开源工具
- Composer - cli :命令行工具,用于定义 Linux 镜像的复杂内容,并将镜像渲染为多种格式。
- Osbuild :命令行工具,用于构建 Linux 镜像。
- Composer(部分发行版称为 Image Builder) :图形化的基于 Web 的工具,用于定义、构建和更新 Linux 镜像。
- Cockpit - composer :Linux 机器 Web 控制台的插件,使用户能在 cockpit/web 控制台 Web UI 中使用 Composer。
- Toolbox :交互式命令行工具,协助操作系统的故障排除。
5. bootc 和可引导容器镜像
- bootc 定义 :简单来说,bootc 是一种将 Linux 内核层叠到容器镜像中的工具,使容器镜像无需外部操作系统托管即可自行启动。
- 技术现状 :bootc 是前沿技术,Red Hat 认为其处于技术预览状态,在工具和支持基础设施完善之前,不会将其视为完全可支持的技术。预计到 2025 年 5 月 RHEL 10 和 RHEL 9.6 发布时,该技术才会达到通用可用性(GA)并适用于生产工作负载。不过,建议现在就进行全面测试,看其是否能为产品带来价值。
- 与 rpm - ostree 的区别 :两者都是基于镜像的部署方法,都有一定程度的不可变性。但 bootc 的独特之处在于它能以容器为基础创建不可变镜像,且有庞大的开发者和工具生态系统支持容器构建。
6. bootc 可引导容器镜像工具
- 文本编辑器 :如 vi、emacs、nano 等,用于编辑文本。
- Podman :容器管理工具,用于在 Linux 上构建、运行和管理容器。
- IDE :如 Podman - Desktop、Eclipse、Visual Studio 等图形化综合开发工具。
- Image Builder :图形化的基于 Web 的工具,用于定义、构建和更新 Linux 镜像。
- Cockpit - composer :同 rpm - ostree 工具中的介绍。
- Console.redhat.com :Red Hat 提供的综合服务,可协助系统的构建、维护和检查。
- Registries :如 Quay、Amazon Elastic Container Registry(ECR)等,用于托管容器镜像并提供更新分发的中心位置。
以下是 rpm - ostree 和 bootc 部署流程的 mermaid 流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B{选择部署方法}:::decision
B -->|rpm - ostree| C(准备 OSTree 环境):::process
B -->|bootc| D(准备容器镜像环境):::process
C --> E(构建 rpm - ostree 镜像):::process
D --> F(使用 bootc 层叠内核到容器镜像):::process
E --> G(部署 rpm - ostree 镜像):::process
F --> H(部署 bootc 可引导容器镜像):::process
G --> I([结束]):::startend
H --> I
7. 基于镜像的部署的局限性
基于镜像的部署虽然是一种在创建和维护解决方案方面的范式转变,但它也有一些标准基于包的部署所没有的特性。
7.1 通用局限性
- 更新速度与不可写文件系统 :基于镜像的系统更新速度与重启速度相关,而基于包的系统更新操作可能需要数小时且需要多次重启,同时还要确保依赖关系不被破坏。此外,文件系统被定义为不可写,如果要将第三方解决方案安装到镜像中,而该解决方案期望安装在特定的可读可写位置,但实际位置是只读的,就会立即出现问题。不过,通过创造性地使用符号链接,这个问题很可能可以轻易解决。
- 灵活性与定制性的误解 :对于不熟悉该生态系统的人来说,这些部署有时可能会被错误分类或认为缺乏灵活性,难以轻松定制解决方案。通常需要将必要的软件层叠到非标准文件系统位置,以便应用程序能以读写模式运行。虽然这部分情况存在一定误解,但也并非完全错误。
7.2 rpm - ostree 镜像的局限性
- 内核定制挑战 :目前工具在帮助进行内核定制方面存在不足。如果需要对最终状态进行定制,团队应该为其创建自定义 RPM 包,这也要求对计划用作设备基线的硬件有深入了解。
- 用户账户管理难题 :管理操作系统级别的用户账户是一个重大挑战。部署后添加的任何更改,如密码或组关联,都有可能在下一次镜像更新部署时被覆盖。在企业环境中,这可能被视为一个重大问题,但在安全设备中,这是否算一个问题值得探讨。
- 读写数据位置的额外工作 :数据实际具有读写能力的位置在设计和支持过程中会增加额外的工作。用户数据、应用程序数据等是这种部署方法的一些复杂性所在。规划、测试以及创造性地使用符号链接到可写位置将是帮助克服这些问题的关键概念。
7.3 bootc 可引导容器镜像的局限性
由于 bootc 技术尚未达到 1.0 版本,它仍在不断发展,潜力巨大。目前,bootc 可引导容器镜像存在以下局限性:
-
依赖在线注册表
:对于嵌入式设备来说,稳定和安全的更新方法是一个重要的设计点。目前,bootc 镜像最容易通过创建它们的在线注册表来支持。如果解决方案在客户环境中无法访问互联网,这可能会成为一个问题。
以下是对 rpm - ostree 和 bootc 局限性的对比表格:
| 部署方法 | 局限性 | 解决方案建议 |
| ---- | ---- | ---- |
| rpm - ostree | 内核定制困难、用户账户管理易丢失数据、读写数据位置设计复杂 | 创建自定义 RPM 包、规划测试和使用符号链接 |
| bootc | 依赖在线注册表,技术未成熟 | 确保设备有网络访问,持续关注技术发展 |
8. 总结
基于镜像的 Linux 部署,包括 rpm - ostree 和 bootc 可引导容器镜像,为 Linux 系统的部署和管理带来了新的思路和方法。rpm - ostree 提供了一种安全、不可变的部署方式,适合托管容器化应用或虚拟机,虽然存在一些设计上的挑战,但通过合理规划可以克服。bootc 作为前沿技术,具有巨大的潜力,尽管目前还存在一些局限性,但随着技术的发展和工具的完善,有望在未来发挥更大的作用。
在选择部署方法时,需要根据具体的应用场景、安全需求、技术能力等因素进行综合考虑。无论是想要简化生命周期管理、提高安全性,还是探索新技术,基于镜像的部署都为我们提供了丰富的选择。希望通过本文的介绍,能帮助你更好地理解和应用这些技术。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([评估需求]):::startend --> B{选择部署方法}:::decision
B -->|rpm - ostree| C(考虑局限性并规划):::process
B -->|bootc| D(评估技术成熟度):::process
C --> E(部署并优化):::process
D --> F(测试并等待技术完善):::process
E --> G([持续维护]):::startend
F --> G
这个流程图展示了在选择基于镜像的部署方法时的决策过程和后续步骤,帮助你更好地规划和实施部署方案。
超级会员免费看



433

被折叠的 条评论
为什么被折叠?



