Red Hat Enterprise Linux 容器兼容性

Red Hat Enterprise Linux 包括强大的容器技术,可实现新级别的工作负载隔离和可移植性。 一个容器与其他容器之间具有强大的隔离性,但它们直接依赖于底层 Linux 主机和内核作为关键的接口。 当容器镜像容器主机中使用混合的操作系统时有已知的限制,本文档提供了相关的信息。

⇓ 容器镜像/容器主机 ⇒ RHEL 7 主机 RHEL 8 主机* RHEL 9 主机*
RHEL 6 镜像 支持 支持 不支持
RHEL/UBI 7 镜像 支持 支持 支持
RHEL/UBI 8 镜像 支持 支持 支持
RHEL/UBI 9 镜像 不支持 支持 支持

* 请参阅此文档,RHCOS 和 OpenShift Container Platform 使用的 RHEL 版本包括了将特定 OpenShift 发行版本使用的 RHEL CoreOS 版本到主 RHEL 版本的映射列表。

红帽努力实现一系列 RHEL 主版本之间的兼容(如上所述),从而为客户提供了运行一系列容器镜像和生产环境中的主机的操作灵活性。 这些组合会扩展许多应用程序的使用生命周期,并简化了升级的过程。

在提供支持服务时,红帽支持可能会选择区分"完全兼容"和"工作负载特定"配置(如下所述)。 请与您的支持人员进行讨论。

容器兼容性指南

在特殊用例中,红帽建议与基于 RHEL 的容器镜像和 RHEL 容器主机的主版本保持一致。 红帽还推荐以下红帽容器支持政策,因为其他容器引擎和运行时不被支持。

在 RHEL 版本 8 和 9 中,红帽会为每个支持的构架 (Intel/Amd x86、Arm AArch64、IBM POWER 和 zSeries) 提供容器镜像。 通常,正确的硬件架构会被自动检测到,并将使用正确的镜像。 不建议使用不匹配的硬件架构(例如,在 x86 容器主机上运行 AArch64 容器镜像),这种用例不被支持且可能无法正常工作。 容器镜像和主机架构必须与容器镜像相匹配,才能正确运行并被支持。 容器主机的硬件还必须满足容器镜像的最低硬件要求,以便正确运行(例如,用于 IBM POWER LE 的 RHEL 9 容器镜像需要 POWER9 硬件。

当在旧的容器主机上运行较新的容器镜像时存在已知的限制。虽然这种配置通常可以正常工作,当可能会带来额外的风险和兼容性问题。 如果客户遇到这些限制,红帽建议升级容器主机。

当容器以 特权 运行(例如 podman run --privileged)和/或修改底层主机时,Red Hat 建议在容器镜像和容器主机(例如 RHEL 9 主机上的 RHEL 9 镜像)之间保持主版本的一致性。 当容器被授予安全特权以与其他容器进行交互时(例如进行检查或监控),也适用于此建议。 镜像和主机的主版本保持一致可以确保最高的兼容性,并避免了在容器镜像(用户空间)和容器主机(内核)间使用不同版本可能会遇到的问题。

最后,客户在较新的容器主机上运行非常旧的镜像时可能会遇到挑战(例如 RHEL 9 主机上的 RHEL 6 容器镜像)。 在这些情况下,红帽建议使用包括在上表中的支持的版本(如在 RHEL 9 主机上使用 RHEL 7、RHEL 8 或 RHEL 9 镜像)。

详细的支持条件

以下定义的配置不会取代 Red Hat Enterprise Linux 9: 应用程序兼容性指南,对容器镜像中提供的红帽软件的支持仍遵循这个指南。 有关工作负载更具体的定义,请参考以下内容。

完全兼容(推荐)

"完全兼容"配置是容器主机的主版本与容器基础镜像的主版本相匹配,例如,在 RHEL8 主机上运行基于 UBI8 基础镜像的容器。

对于开发和部署需要容器镜像与主机之间具有最佳兼容性的应用程序,建议使用"完全兼容"配置,。

"完全兼容"配置意味着容器镜像和容器主机完全受支持并经过测试。 此配置可确保,所有低级别内核子系统都使用匹配的用户空间和内核驱动程序组件。 支持运行特权容器,但特定工作负载可能需要容器主机的次版本与容器镜像的次版本匹配。

特定于工作负载

"Workload specific(特定于工作负载)"配置是容器主机的主版本与容器基础镜像的主版本不匹配,例如,在 RHEL 8 主机上运行基于 UBI7 基础镜像的容器。

"特定于工作负载" (非特权)配置意味着容器镜像和容器主机组合存在支持限制。 所有潜在的问题都会根据 Red Hat Enterprise Linux 生命周期及以下的支持政策处理。

  1. 如果满足以下所有条件,则在一个较新的容器主机上运行较旧的容器镜像可能会被支持:
    1. 容器镜像中的 Red Hat Enterprise Linux 主版本仍处于受支持的 RHEL 生命周期中。 例如,当 RHEL 8 进入延长生命周期阶段时,无论底层容器主机的版本是什么,都需要正确的 ELS 订阅来支持 RHEL 8 容器镜像。
    2. 应用程序作为非特权容器运行。 运行特权容器(例如使用了 --privileged)可以减少隔离,并暴露了容器和主机接口间的一个紧密连接,在这些配置中不受支持。
    3. 对于开发和部署需要容器镜像与主机之间具有最佳兼容性的应用程序,建议使用"完全兼容"配置,。

    4. 应用程序或它的非 RHEL 的依赖组件不会与 kernel-version-specific 数据结构(ioctl, /proc, /sys, routing, iptables, nftables, eBPF 等)或 kernel-version-specific 模块(KVM, OVS, SystemTap, 等)直接进行交互。 对 ioctls 和访问 /proc 的支持仅限于非特权用户所需的最常见的用例,其他情况都需要"完全兼容"配置。
  2. 如果满足以下所有条件,则在一个较旧的容器主机上运行较新的容器镜像可能会被支持**:
    1. 所有以前的"特定于工作负载"的支持条件都适用
    2. 对于使用"完全兼容"配置也会重现、且具有相同的根本问题原始的问题,用户会显示支持
    3. 用户需要负责验证容器镜像(应用程序)和容器主机的兼容性
    4. 用户显示(通过 strace 或 systemtap trace),容器镜像(应用程序)只需要 syscalls,且所有 syscall 功能(包括标记、选项和路径)都存在于底层容器主机内核中

**当主机版本早于容器镜像版本时,许多常见的工作负载都可以正常工作,但它们可能会在启动或运行时出现问题。 经过一段时间,来自较新容器镜像的用户空间组件将需要较新的内核功能才能正常工作,较旧的内核将无法满足这些要求。 该组合具有出现软件版本不匹配以及出现严重故障(包括但不限于非计划外停机或数据丢失)的最有风险。 用户需要准备迁移到"完全兼容"配置。 红帽不会对应用程序的兼容性进行测试,其提供的支持仅限于商业合理的分析协助,且不会提供程序错误修复来解决不兼容的问题。