Menu Close

第 19 章 容器

本章列出了 RHEL 8 和 RHEL 9 之间与容器相关的显著更改。

19.1. 容器的显著变化

container-tools meta-package 现已正式发布

RHEL 9 提供了 container-tools RPM meta-package 包括 Podman、Buildah、Skopeo、CRIU、Udica 和所有必需库。RHEL 9 不提供 stable 流。要获得对 Podman 的稳定访问、Buildah、Skopeo 等,请使用 RHEL EUS 订阅。

安装 container-tools meta-package:

  • 安装 container-tools meta-package:

    $ sudo dnf install container-tools

container-tools meta-package 已更新

container-tools meta-package 包括 Podman、Buildah、Skopeo、CRIU、Udica 以及所有必需的库。与之前的版本相比,这个版本提供了很多程序错误修复和增强。

主要变更包括:

  • 原生覆盖文件系统可作为无根用户使用
  • 现在容器中支持 NFS 存储
  • 控制组群版本 2(cgroup v2)被默认启用

有关 Podman 中显著变化的更多信息,请参阅上游发行注记

改进了控制组群性能

以前的控制组群版本 cgroup 版本 1(cgroup v1)会导致各种应用程序出现性能问题。最新版本的控制组 cgroup 版本 2(cgroup v2)可让系统管理员为任何应用程序限制资源,而不会造成性能问题。

在 RHEL 9 中,控制组群c v2 的新版本是默认启用的。

Podman 现在支持安全简短名称

现在可以在 [aliases] 表中的 registries.conf 文件中配置镜像的短名称别名。简短名称模式为:

  • Enforcing:如果在镜像拉取过程中找不到匹配的别名,则 Podman 会提示用户选择一个非限定 registry。如果成功拉取了所选镜像,Podman 会自动在 $HOME/.cache/containers/short-name-aliases.conf 文件(rootless 用户)和 /var/cache/containers/short-name-aliases.conf 中记录一个新的短名称别名。如果无法提示用户(例如,stdin 或 stdout 而不是 TTY),则 Podman 会失败。请注意,如果两者都指定了相同的别名,则short-name-aliases.conf文件优先于 registries.conf 文件。在 RHEL 9 中,enforcing 模式是默认的。
  • Permissive:与 enforcing 模式类似,但如果用户无法提示,Podman 不会失败。相反,Podman 会按照指定顺序搜索所有非限定 registry。请注意,没有记录别名。RHEL 8 中是 permissive 模式。

例如:

unqualified-search-registries=["registry.fedoraproject.org", “quay.io"]
[aliases]
"fedora"="registry.fedoraproject.org/fedora"

现在,默认容器镜像签名验证可用

在以前的版本中,必须在 /etc/containers/registries.d/ 目录中创建 Red Hat Container Registries 的策略 YAML 文件。现在,registry.access.redhat.com.yamlregistry.redhat.io.yaml 文件包括在 containers-common 软件包中。现在,您可以使用 podman image trust 命令验证容器镜像签名。

podman image trust 命令根据其位置管理您信任为容器镜像源的 registry。信任在 /etc/containers/policy.json 文件中定义,当用户尝试从 registry 中拉取远程镜像时强制执行。policy.json 中的信任策略描述了信任的 registry 范围。此信任可以使用公钥作为已签名的镜像。在 RHEL 8 和 RHEL 9 中默认启用镜像签名验证。

例如:

更新 registry.access.redhat.com 的现有信任范围:

# podman image trust set -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release registry.access.redhat.com

要验证信任策略配置,请显示 /etc/containers/policy.json 文件:

...
"transports": {
  "docker": {
      "registry.access.redhat.com": [
       {
         "type": "signedBy",
         "keyType": "GPGKeys",
         "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release"
       }
     ]
},
...

registries.conf中的默认容器 registry

您可以以 root 用户身份在 /etc/containers/registries.conf 文件中找到容器 registry 列表,并以一个非 root 用户身份在 $HOME/.config/containers/registries.conf 中。通过更改 registry.conf 文件,您可以更改默认的系统范围搜索设置。

对于 RHEL 8,unqualified-search-registries 是:

unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"]

对于 RHEL 9,unqualified-search-registries 是:

unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "quay.io", "docker.io"]

container-tools:latest 滚动流已更新

container-tools:rhel8 滚动流现在重命名为 container-tools:latest。stable 流的数字保持不变(如 2.0、3.0)。container-tools:latest 滚动流现在可用,其中包括 Podman、Buildah、Skopeo 和 runc 工具。与之前的版本相比,这个版本提供了程序错误修正和增强。

如需更多信息,请参阅 https://access.redhat.com/support/policy/updates/containertools

默认 OCI 运行时更改

crun OCI 运行时现在可用于 container-tools:rhel8 模块。crun 容器运行时支持一个注解,它允许容器访问无根用户的额外组。当设置了 setgid 或用户只能访问组访问权限的目录中时,这对于容器操作很有用。

  • RHEL 8 中的默认容器运行时是 runc
  • RHEL 9 中的默认容器运行时是 crun

不支持在 RHEL 7 主机上运行 RHEL 9 容器

不支持在 RHEL 7 主机上运行 RHEL 9 容器。

如需更多信息,请参阅 Red Hat Enterprise Linux Container Compatibility Matrix

默认网络堆栈

Podman 使用 CNI 作为 RHEL 8 中的默认网络堆栈,Netavark 作为 RHEL 9 的新安装中的默认网络堆栈。

如果您执行从 RHEL 8 原位升级到 RHEL 9,则 Podman 的网络堆栈设置为:

  • Netavark 如果 /etc/containers/containers.conf 文件中的 network_backend 参数没有被设置,或者,在 RHEL 8 中手动将 Podman 的网络堆栈升级到 Netavark。
  • CNI 如果升级后首次运行时显示的容器、镜像、Pod 或网络。然后您可以手动升级到新的 Netavark 网络堆栈。有关如何在 CNI 和 Netavark 网络堆栈间切换的步骤,请参阅 8.6 将网络堆栈从 CNI 切换到 Netavark 和 8.7 将网络堆栈从 Netavark 切换到 CNI。

红帽建议明确指定 network_backend 参数,以确保选择了正确的后端。

由于网络堆栈的变化,Podman v3 和更早版本所创建的容器在 Podman v4.0 中不可用。