Linux 内核版本要求

说明: 本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南

许多特性依赖于特定的内核功能,并且有最低的内核版本要求。 然而,单纯依赖内核版本号可能不足以满足某些操作系统发行版, 因为像 RHEL、Ubuntu 和 SUSE 等发行版的维护者们通常会将选定的特性反向移植到较旧的内核版本(保留较旧的内核版本)。

Pod sysctls

在 Linux 中,sysctl() 系统调用在运行时配置内核参数。 你可以使用名为 sysctl 的命令行工具来配置这些参数,许多参数通过 proc 文件系统暴露。

某些 sysctl 仅可用于足够新的内核上。

以下 sysctl 具有最低的内核版本要求, 并在安全集中得到了支持:

  • net.ipv4.ip_local_reserved_ports(自 Kubernetes 1.27 起,需要内核 3.16+);
  • net.ipv4.tcp_keepalive_time(自 Kubernetes 1.29 起,需要内核 4.5+);
  • net.ipv4.tcp_fin_timeout(自 Kubernetes 1.29 起,需要内核 4.6+);
  • net.ipv4.tcp_keepalive_intvl(自 Kubernetes 1.29 起,需要内核 4.5+);
  • net.ipv4.tcp_keepalive_probes(自 Kubernetes 1.29 起,需要内核 4.5+);
  • net.ipv4.tcp_syncookies(自内核 4.6+ 添加了命名空间作用域)。
  • net.ipv4.vs.conn_reuse_mode(用于 ipvs 代理模式,需要内核 4.1+);

kube proxy nftables 代理模式

对于 Kubernetes 1.31,kube-proxy 的 nftables 模式要求 nft 命令行工具为 v1.0.1 或更高版本,要求内核为 v5.13 或更高版本。

出于测试/开发目的,你可以使用较旧的内核,如果你在 kube-proxy 配置中设置 nftables.skipKernelVersionCheck 选项, 最老可以回溯到 v5.4。但在生产环境中不推荐这样做,因为这可能会导致系统上其他 nftables 用户出现问题。

v2 控制组

Kubernetes 对 cgroup v1 的支持从 v1.31 开始处于维护模式;推荐使用 cgroup v2。 在 Linux 5.8 中,为了方便使用,系统层面的 cpu.stat 文件被添加到根 cgroup。

在 runc 文档中,不推荐使用低于 5.2 的内核,因为其缺少冻结特性。

其他内核要求

某些特性可能依赖于新的内核功能并具有特定的内核要求:

  1. 递归只读挂载: 这是通过应用 MOUNT_ATTR_RDONLY 属性和 AT_RECURSIVE 标志来实现的,使用的是在 Linux 内核 v5.12 中添加的 mount_setattr(2)。
  2. Pod 用户命名空间支持需要最低内核版本 6.5+,参阅 KEP-127
  3. 对于节点系统交换, 直到内核 6.3 才支持将 tmpfs 设置为 noswap

Linux 内核长期维护

你可以在 kernel.org 找到活动的内核版本。

通常会提供多个 长期维护 内核版本,用于将 Bug 修复反向移植到较旧的内核树。 特别是对于较旧的树,只有重要的 Bug 修复才会被应用到此类内核,这些内核通常不会频繁发布新版本。 请参阅 Linux 内核网站,了解 Longterm 类别中的发布列表

接下来