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.yaml
和 registry.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 中不可用。