Linux 内核版本要求
许多功能依赖于特定的内核功能,并具有最低内核版本要求。但是,仅依靠内核版本号可能不足以满足某些操作系统发行版的需求,因为像 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.tcp_rmem
(自 Kubernetes 1.32 起,需要内核 4.15+)。net.ipv4.tcp_wmem
(自 Kubernetes 1.32 起,需要内核 4.15+)。net.ipv4.vs.conn_reuse_mode
(用于ipvs
代理模式,需要内核 4.1+);
kube proxy nftables
代理模式
对于 Kubernetes 1.34,kube-proxy 的nftables
模式需要 nft 命令行工具 1.0.1 或更高版本,以及内核 5.13 或更高版本。
出于测试/开发目的,您可以使用较旧的内核,最远可追溯到 5.4,如果您在 kube-proxy 配置文件中设置了 nftables.skipKernelVersionCheck
选项。但不建议在生产环境中使用,因为它可能会与其他系统上的 nftables 用户造成问题。
版本 2 控制组
Kubernetes cgroup v1 支持从 Kubernetes v1.31 开始进入维护模式;建议使用 cgroup v2。在Linux 5.8 中,系统级别的 cpu.stat
文件被添加到根 cgroup 以方便使用。
在 runc 文档中,由于缺少 freezer,不建议使用早于 5.2 的内核。
压力停滞信息 (PSI)
压力停滞信息在 Linux 内核版本 4.20 及以上版本中受支持,但需要以下配置:
- 内核必须使用
CONFIG_PSI=y
选项进行编译。大多数现代发行版默认启用此选项。您可以通过运行zgrep CONFIG_PSI /proc/config.gz
来检查您的内核配置。 - 一些 Linux 发行版可能将 PSI 编译到内核中,但默认禁用它。如果是这种情况,您需要通过将
psi=1
参数添加到内核命令行来在启动时启用它。
其他内核要求
某些功能可能依赖于新的内核功能,并具有特定的内核要求。
- 递归只读挂载:这通过使用 Linux 内核 v5.12 中添加的
mount_setattr
(2) 应用具有AT_RECURSIVE
标志的MOUNT_ATTR_RDONLY
属性来实现。 - 根据KEP-127,Pod 用户命名空间支持需要最低内核版本 6.5+。
- 对于节点系统交换,设置为
noswap
的 tmpfs 在内核 6.3 之前不受支持。
Linux 内核长期维护
活动的内核版本可以在kernel.org 上找到。
通常有几个长期维护的内核版本可用于回溯移植旧内核树的错误修复。此类内核仅应用重要的错误修复,并且通常不会发布非常频繁,特别是对于较旧的树。请参阅 Linux 内核网站上的长期类别中的版本列表。
下一步
- 有关更多详细信息,请参阅sysctls。
- 允许 kube-proxy 以nftables 模式运行。
- 有关cgroups v2 的更多信息,请阅读。
本页上的项目引用了提供 Kubernetes 所需功能的第三方产品或项目。Kubernetes 项目作者不对这些第三方产品或项目负责。有关详细信息,请参阅CNCF 网站指南。
在提议添加额外第三方链接的更改之前,你应该阅读内容指南。