本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。
Kubernetes v1.29:Mandala
编辑:Carol Valencia、Kristin Martin、Abigail McCarthy、James Quigley
宣布 Kubernetes v1.29:曼荼罗(宇宙)发布,这是 2023 年的最后一次发布!
与之前的版本类似,Kubernetes v1.29 的发布引入了新的稳定版、测试版和 Alpha 版功能。顶级版本的持续交付强调了我们开发周期的实力以及我们社区的蓬勃支持。
此版本包含 49 项增强功能。在这些增强功能中,11 项已升级为稳定版,19 项正在进入测试版,19 项已升级为 Alpha 版。
发布主题和徽标
Kubernetes v1.29:曼荼罗(宇宙) ✨🌌

与我们一起踏上 Kubernetes v1.29 的宇宙之旅!
此版本的灵感来自美丽的艺术形式曼荼罗,它是宇宙完美的一个象征。我们由大约 40 名发布团队成员组成的紧密联系的宇宙,在数百名社区贡献者的支持下,孜孜不倦地工作,将挑战转化为全球数百万人的快乐。
曼荼罗主题反映了我们社区的相互联系,这是一张由爱好者和专家共同编织的充满活力的挂毯。每位贡献者都是至关重要的组成部分,增加了他们独特的能量,就像曼荼罗艺术中多样化的图案一样。Kubernetes 在协作中蓬勃发展,呼应了曼荼罗创作中的和谐。
由 Mario Jason Braganza(基础曼荼罗艺术,感谢 - Fibrel Ojalá)制作的发布徽标象征着 Kubernetes 项目及其所有人的小宇宙。
本着曼荼罗变革象征的精神,Kubernetes v1.29 庆祝我们项目的演变。就像 Kubernetes 宇宙中的星星一样,每位贡献者、用户和支持者都在照亮道路。我们一起创造一个充满可能性的宇宙,一次发布一个版本。
在 Kubernetes v1.29 中升级到稳定的改进
以下是 v1.29 版本之后现在稳定的一些改进的选择。
ReadWriteOncePod PersistentVolume 访问模式(SIG 存储)
在 Kubernetes 中,卷访问模式是您定义如何使用持久存储的方式。这些访问模式是 PersistentVolumes (PV) 和 PersistentVolumeClaims (PVC) 规范的一部分。使用存储时,有不同的方式来模拟如何使用该存储。例如,像网络文件共享这样的存储系统可以有许多用户同时读取和写入数据。在其他情况下,也许每个人都允许读取数据,但不允许写入。对于高度敏感的数据,可能只允许一个用户读取和写入数据,而其他人则不允许。
在 v1.22 之前,Kubernetes 为 PV 和 PVC 提供了三种访问模式
- ReadWriteOnce – 该卷可以由单个节点以读写方式挂载
- ReadOnlyMany – 该卷可以由多个节点以只读方式挂载
- ReadWriteMany – 该卷可以由多个节点以读写方式挂载
ReadWriteOnce 访问模式将卷访问限制为单个节点,这意味着同一节点上的多个 Pod 可以读取和写入同一卷。对于某些应用程序,这可能是一个主要问题,特别是如果它们要求最多只有一个写入器来保证数据安全。
为了解决这个问题,在 v1.22 中为 CSI 卷引入了第四种访问模式 ReadWriteOncePod 作为 Alpha 功能。如果创建使用 ReadWriteOncePod 访问模式的 PVC 的 Pod,Kubernetes 会确保该 Pod 是整个集群中唯一可以读取该 PVC 或写入该 PVC 的 Pod。在 v1.29 中,此功能已正式发布。
CSI 驱动程序的节点卷扩展机密支持(SIG 存储)
在 Kubernetes 中,卷扩展操作可能包括在节点上扩展卷,这涉及文件系统调整大小。一些 CSI 驱动程序在节点扩展期间需要密钥,例如访问 SAN 结构的凭据,用于以下用例
- 当 PersistentVolume 表示加密的块存储(例如使用 LUKS)时,您可能需要提供密码短语才能扩展设备。
- 对于各种验证,CSI 驱动程序需要在节点扩展时具有与后端存储系统通信的凭据。
为了满足此要求,在 Kubernetes v1.25 中引入了 CSI 节点扩展机密功能。这允许将可选的机密字段作为 NodeExpandVolumeRequest 的一部分由 CSI 驱动程序发送,以便可以使用底层存储系统执行节点卷扩展操作。在 Kubernetes v1.29 中,此功能已正式发布。
KMS v2 静态加密正式发布(SIG 身份验证)
保护 Kubernetes 集群时要考虑的首要事项之一是在静态加密持久化的 API 数据。KMS 为提供程序提供了一个接口,用于利用存储在外部密钥服务中的密钥来执行此加密。随着 Kubernetes v1.29 的发布,KMS v2 已成为一个稳定的功能,在性能、密钥轮换、运行状况检查和状态以及可观察性方面带来了许多改进。这些增强功能为用户提供了一个可靠的解决方案来加密其 Kubernetes 集群中的所有资源。您可以在 KEP-3299 中阅读更多相关信息。
建议使用 KMS v2。KMS v1 功能门默认禁用。您必须选择加入才能继续使用它。
在 Kubernetes v1.29 中升级到测试版的改进
以下是一些在 v1.29 版本后现在处于测试阶段的改进的选择。
调度器的吞吐量是我们永恒的挑战。此 QueueingHint 功能为优化重新排队的效率带来了一种新的可能性,这可以显着减少无用的调度重试。
节点生命周期与污点管理分离(SIG 调度)
顾名思义,它是将执行基于污点的 Pod 驱逐的 TaintManager
与 NodeLifecycleController
解耦,并将它们变成两个单独的控制器:NodeLifecycleController
向不健康的节点添加污点,而 TaintManager
对带有 NoExecute 效果的节点执行 Pod 删除。
清理基于旧版机密的 ServiceAccount 令牌(SIG 身份验证)
Kubernetes 在 1.22 中切换为使用更安全的 ServiceAccount 令牌,该令牌有时限且绑定到特定的 Pod。在 1.24 中停止自动生成基于旧版机密的 ServiceAccount 令牌。然后在 1.27 中开始使用上次使用日期标记仍在使用的剩余自动生成的基于机密的令牌。
在 v1.29 中,为了减少潜在的攻击面,如果长时间(默认情况下为 1 年)未使用基于旧版自动生成的机密的令牌,LegacyServiceAccountTokenCleanUp 功能会将其标记为无效,并且如果标记为无效后很长时间(默认情况下为额外 1 年)未使用,则会自动将其删除。KEP-2799
新的 Alpha 功能
使用 matchLabelKeys
定义 Pod 亲和性或反亲和性(SIG 调度)
PodAffinity/PodAntiAffinity 中将引入一项增强功能作为 Alpha 版。它将提高滚动更新期间计算的准确性。
kube-proxy 的 nftables 后端(SIG 网络)
Linux 上 kube-proxy 的默认实现目前基于 iptables。这是 Linux 内核中多年来(从 2001 年的 2.4 内核开始)首选的数据包过滤和处理系统。然而,iptables 无法解决的问题导致了其后继者 nftables 的开发。iptables 的开发已基本停止,新的功能和性能改进主要进入了 nftables。
此功能为基于 nftables 的 kube-proxy 添加了一个新的后端,因为某些 Linux 发行版已经开始弃用和删除 iptables,并且 nftables 声称可以解决 iptables 的主要性能问题。
用于管理服务的 IP 地址范围的 API(SIG 网络)
服务是一种抽象方式,用于公开在 Pod 集合上运行的应用程序。服务可以具有集群范围的虚拟 IP 地址,该地址是从 kube-apiserver 标志中定义的预定义 CIDR 分配的。但是,用户可能希望添加、删除或调整为服务分配的现有 IP 范围的大小,而无需重新启动 kube-apiserver。
此功能实现了新的分配器逻辑,该逻辑使用 2 个新的 API 对象:ServiceCIDR 和 IPAddress,允许用户通过创建新的 ServiceCIDR 来动态增加可用的服务 IP 数量。这有助于解决诸如 IP 耗尽或 IP 重编号之类的问题。
添加对 containerd/kubelet/CRI 的支持,以支持每个运行时类的镜像拉取(SIG Windows)
Kubernetes v1.29 增加了基于 Pod 的 RuntimeClass 拉取容器镜像的支持。此功能在 v1.29 中默认关闭,由名为 RuntimeClassInImageCriApi
的特性门控控制。
容器镜像可以是清单(manifest)或索引(index)。当拉取的镜像是一个索引时(镜像索引包含按平台排序的镜像清单列表),容器运行时中的平台匹配逻辑会用于从索引中拉取合适的镜像清单。默认情况下,平台匹配逻辑会选择与执行镜像拉取操作的主机匹配的清单。对于基于虚拟机的容器,这可能存在限制,例如用户可能拉取一个镜像并打算将其作为基于虚拟机的容器运行,如 Windows Hyper-V 容器。
按运行时类拉取镜像的功能增加了基于指定的运行时类拉取不同镜像的支持。这是通过引用一个 (imageID
, runtimeClass
) 的元组,而不是仅引用 imageName
或 imageID
来实现的。容器运行时可以选择是否添加对该功能的支持。如果不支持,则保留 Kubernetes v1.29 之前 kubelet 的默认行为。
Windows Pod 的 Pod 资源原地更新 (SIG Windows)
作为一项 alpha 功能,Kubernetes Pod 的 resources
字段现在是可变的,允许用户更改 Pod 的 *期望* 资源请求和限制,而无需重启 Pod。在 v1.29 中,此功能现在支持 Windows 容器。
Kubernetes v1.29 的毕业、弃用和移除
毕业为稳定版
此处列出了所有毕业为稳定版(也称为 *正式发布*)的功能。有关包括新功能和从 alpha 升级到 beta 的完整更新列表,请参阅发行说明。
此版本共包含 11 项升级为稳定版的功能增强
- 从 KCCM 的服务控制器中删除瞬态节点谓词
- 为动态和静态分配预留 NodePort 范围
- API 服务器请求的优先级和公平性
- KMS v2 改进
- 支持来自 Kubernetes API 的分页 LIST 查询
- ReadWriteOncePod PersistentVolume 访问模式
- Kubernetes 组件健康 SLI
- CRD 验证表达式语言
- 在 CSI PV 源中引入 nodeExpandSecret
- 在 Job 状态中跟踪就绪的 Pod
- Kubelet 资源指标端点
弃用和移除
移除与云提供商的树内集成 (SIG Cloud Provider)
Kubernetes v1.29 默认在没有与任何云提供商的内置集成的情况下运行。如果您之前依赖于树内云提供商集成(与 Azure、GCE 或 vSphere),则您可以选择:
- 启用等效的外部云控制器管理器集成 *(推荐)*
- 通过将相关特性门控设置为
false
来选择恢复到旧的集成;要更改的特性门控是DisableCloudProviders
和DisableKubeletCloudCredentialProviders
启用外部云控制器管理器意味着您必须在集群的控制平面中运行合适的云控制器管理器;它还需要为 kubelet(在每个相关节点上)以及跨控制平面(kube-apiserver 和 kube-controller-manager)设置命令行参数 --cloud-provider=external
。
有关如何启用和运行外部云控制器管理器的更多信息,请阅读云控制器管理器管理和将复制的控制平面迁移到使用云控制器管理器。
如果您需要用于旧的树内提供商之一的云控制器管理器,请参阅以下链接
有关更多详细信息,请参阅 KEP-2395。
移除 v1beta2
流控制 API 组
在 Kubernetes v1.29 中,不再提供已弃用的 FlowSchema 和 PriorityLevelConfiguration 的 *flowcontrol.apiserver.k8s.io/v1beta2* API 版本。
如果您有使用已弃用的 beta API 组的清单或客户端软件,则应在升级到 v1.29 之前更改这些清单或客户端软件。有关详细信息和建议,请参阅已弃用 API 迁移指南。
弃用 Node 的 status.nodeInfo.kubeProxyVersion
字段
Node 对象的 .status.kubeProxyVersion
字段现已弃用,Kubernetes 项目建议在未来版本中删除该字段。已弃用的字段不准确,并且历史上由 kubelet 管理 - 而 kubelet 实际上并不知道 kube-proxy 版本,甚至不知道 kube-proxy 是否正在运行。
如果您在客户端软件中使用此字段,请停止使用 - 该信息不可靠,并且该字段现在已弃用。
旧版 Linux 软件包存储库
请注意,在 2023 年 8 月,旧版软件包存储库(apt.kubernetes.io
和 yum.kubernetes.io
)已正式弃用,Kubernetes 项目宣布社区拥有的 Debian 和 RPM 软件包存储库正式可用,地址为 https://pkgs.k8s.io
。
这些旧版存储库在 2023 年 9 月被冻结,并将于 2024 年 1 月完全消失。如果您当前依赖它们,则**必须**迁移。
此弃用与 v1.29 版本没有直接关系。有关更多详细信息,包括这些更改可能如何影响您以及如果您受到影响该怎么办,请阅读旧版软件包存储库弃用公告。
发行说明
在我们的发行说明中查看 Kubernetes v1.29 版本的完整详细信息。
可用性
Kubernetes v1.29 可在 GitHub 上下载。要开始使用 Kubernetes,请查看这些交互式教程或使用 minikube 运行本地 Kubernetes 集群。您还可以使用 kubeadm 轻松安装 v1.29。
发布团队
Kubernetes 的成功离不开其社区的支持、承诺和辛勤工作。每个发布团队都由敬业的社区志愿者组成,他们共同构建构成您所依赖的 Kubernetes 版本的许多部分。这需要来自我们社区各个角落的人们的专业技能,从代码本身到其文档和项目管理。
我们要感谢整个 发布团队为我们的社区交付 Kubernetes v1.29 版本所付出的辛勤工作。特别感谢我们的发布负责人 Priyanka Saggu,感谢她支持和指导我们完成成功的发布周期,确保我们都能以最佳方式做出贡献,并激励我们改进发布流程。
项目速度
CNCF K8s DevStats 项目汇总了许多与 Kubernetes 和各种子项目的速度相关的有趣数据点。这包括从个人贡献到贡献公司数量的所有内容,并且说明了为发展此生态系统而付出的努力的深度和广度。
在 持续 14 周(9 月 6 日至 12 月 13 日)的 v1.29 发布周期中,我们看到了来自 888 家公司和 1422 名个人的贡献。
生态系统更新
- KubeCon + CloudNativeCon Europe 2024 将于 2024 年 3 月 19 日至 22 日在法国巴黎举行!您可以在活动网站上找到有关会议和注册的更多信息。
即将发布的版本网络研讨会
请于 2023 年 12 月 15 日星期五上午 11 点(太平洋时间)(东部时间下午 2 点)加入 Kubernetes v1.29 发布团队成员,了解此版本的主要功能以及有助于规划升级的弃用和移除。有关更多信息和注册,请访问 CNCF 在线项目站点上的活动页面。
参与其中
参与 Kubernetes 的最简单方法是加入与您的兴趣相符的众多特别兴趣小组(SIG)之一。有什么想向 Kubernetes 社区广播的内容吗?在我们的每周社区会议并通过以下渠道分享您的声音。感谢您持续的反馈和支持。
- 在 Twitter 上关注我们@Kubernetesio,了解最新更新
- 在Discuss上加入社区讨论
- 在 Slack 上加入社区
- 在Stack Overflow上发布问题(或回答问题)
- 分享您的 Kubernetes 故事
- 在博客上了解有关 Kubernetes 的更多信息
- 了解有关Kubernetes 发布团队的更多信息