Kubernetes v1.30:Uwubernetes

编辑:Amit Dsouza、Frederick Kautz、Kristin Martin、Abigail McCarthy、Natali Vlatko

宣布 Kubernetes v1.30 发布:Uwubernetes,最可爱的版本!

与之前的版本类似,Kubernetes v1.30 的发布引入了新的稳定版、测试版和 alpha 版功能。顶级版本的持续交付凸显了我们开发周期的实力以及我们社区的蓬勃支持。

此版本包含 45 项增强功能。在这些增强功能中,17 项已升级为稳定版,18 项正在进入测试版,10 项已升级为 alpha 版。

Kubernetes v1.30:Uwubernetes

Kubernetes v1.30 让你的集群更可爱!

Kubernetes 由来自世界各地和各行各业的数千人构建和发布。大多数贡献者都不是为了这样做而获得报酬;我们构建它为了乐趣,为了解决问题,为了学习东西,或者为了对社区的简单热爱。我们中的许多人在这里找到了我们的家园、朋友和事业。发布团队很荣幸能参与 Kubernetes 的持续发展。

为了构建它的人,为了发布它的人,为了让所有集群保持在线的毛茸茸的人,我们向你呈现 Kubernetes v1.30:Uwubernetes,迄今为止最可爱的版本。该名称是“kubernetes”和“UwU”的合成词,“UwU”是一种用于表示快乐或可爱的表情符号。我们在这里找到了快乐,但我们也带来了我们外部生活的快乐,这有助于使这个社区变得如此古怪、精彩和受欢迎。我们很高兴与你分享我们的工作。

UwU ♥️

在 Kubernetes v1.30 中升级为稳定的改进

以下是 v1.30 版本发布后现在稳定的一些改进的选集。

kubelet 重启后强大的 VolumeManager 重建 (SIG 存储)

这是一个卷管理器重构,允许 kubelet 在 kubelet 启动期间填充有关如何挂载现有卷的额外信息。通常,这使得 kubelet 重启或机器重启后的卷清理更加健壮。

这不会给用户或集群管理员带来任何更改。我们使用了功能流程和功能门 NewVolumeManagerReconstruction,以便在出现问题时能够回退到之前的行为。现在该功能已稳定,功能门已锁定且无法禁用。

防止卷恢复期间未经授权的卷模式转换 (SIG 存储)

对于 Kubernetes v1.30,当将快照恢复到 PersistentVolume 时,控制平面始终会阻止对卷模式的未经授权的更改。作为集群管理员,如果你需要在恢复时允许这种更改,则需要向适当的身份主体(例如:代表存储集成的 ServiceAccount)授予权限。

有关此功能的更多信息,另请阅读转换快照的卷模式

Pod 调度就绪 (SIG 调度)

在 Kubernetes v1.27 中升级为测试版后,Pod 调度就绪在此版本中升级为稳定版。

这个现在稳定的功能使 Kubernetes 避免尝试调度已定义的 Pod,当集群还没有为允许将该 Pod 实际绑定到节点而配置的资源时。这不是唯一的用例;对是否允许调度 Pod 的自定义控制还允许你实现配额机制、安全控制等。

至关重要的是,将这些 Pod 标记为免于调度会减少调度程序原本会做的工作,处理无法或不会调度到你集群当前拥有的节点上的 Pod。如果你启用了集群自动缩放,使用调度门不仅可以减少调度程序上的负载,还可以节省资金。如果没有调度门,自动缩放器可能会启动一个不需要启动的节点。

在 Kubernetes v1.30 中,通过指定(或删除)Pod 的 .spec.schedulingGates,你可以控制何时准备好考虑调度 Pod。这是一个稳定的功能,现在正式成为 Pod 的 Kubernetes API 定义的一部分。

PodTopologySpread 中的最小域 (SIG 调度)

PodTopologySpread 约束的 minDomains 参数在此版本中升级为稳定版,这允许你定义最小域数。此功能旨在与集群自动缩放器一起使用。

如果你之前尝试使用且没有足够多的域,则 Pod 将被标记为不可调度。然后,集群自动缩放器将在新域中配置节点,并且你最终会将 Pod 分布到足够多的域上。

k/k 的 Go 工作区 (SIG 架构)

Kubernetes 存储库现在使用 Go 工作区。这根本不会影响最终用户,但会对下游项目的开发人员产生影响。切换到工作区导致各种 k8s.io/code-generator 工具的标志发生了一些重大更改。下游使用者应查看 staging/src/k8s.io/code-generator/kube_codegen.sh 以查看更改。

有关更改和引入 Go 工作区的原因的完整详细信息,请阅读在 Kubernetes 中使用 Go 工作区

在 Kubernetes v1.30 中升级为测试版的改进

以下是 v1.30 版本发布后现在处于测试版的一些改进的选集。

节点日志查询 (SIG Windows)

为了帮助调试节点上的问题,Kubernetes v1.27 引入了一个功能,允许获取在节点上运行的服务的日志。要使用该功能,请确保为该节点启用了 NodeLogQuery 功能门,并且 kubelet 配置选项 enableSystemLogHandlerenableSystemLogQuery 都设置为 true。

在 v1.30 版本发布后,它现在是测试版(你仍然需要启用该功能才能使用它)。

在 Linux 上,假设服务日志可通过 journald 获得。在 Windows 上,假设服务日志在应用程序日志提供程序中可用。日志也可通过读取 /var/log/ (Linux) 或 C:\var\log\ (Windows) 中的文件获得。有关更多信息,请参阅日志查询文档。

CRD 验证棘轮效应 (SIG API 机器)

你需要启用 CRDValidationRatcheting 功能门才能使用此行为,该行为随后应用于集群中的所有 CustomResourceDefinition。

如果你启用了功能门,Kubernetes 将为 CustomResourceDefinitions 实现验证棘轮效应。API 服务器愿意接受对更新后无效的资源的更新,前提是资源中每个未能验证的部分都未被更新操作更改。换句话说,资源的任何无效部分必须已经存在错误。你不能使用此机制来更新有效资源,使其变为无效。

此功能允许 CRD 的作者在特定条件下,自信地向 OpenAPIV3 模式添加新的验证。用户可以安全地更新到新模式,而无需升级对象版本或中断工作流程。

上下文日志记录(SIG Instrumentation

上下文日志记录在此版本中升级为 Beta 版,使开发人员和运维人员可以通过 WithValuesWithName 将可自定义、可关联的上下文详细信息(如服务名称和事务 ID)注入到日志中。此增强功能简化了跨分布式系统的日志数据的关联和分析,显著提高了故障排除效率。通过更清晰地了解 Kubernetes 环境的运行情况,上下文日志记录确保了操作挑战更容易管理,标志着 Kubernetes 可观测性方面的一个显著进步。

使 Kubernetes 感知负载均衡器的行为(SIG Network

LoadBalancerIPMode 功能门现在为 Beta 版,并默认启用。此功能允许您为 type 设置为 LoadBalancer 的 Service 设置 .status.loadBalancer.ingress.ipMode.status.loadBalancer.ingress.ipMode 指定负载均衡器 IP 的行为方式。它只能在同时指定了 .status.loadBalancer.ingress.ip 字段时指定。有关指定负载均衡器状态的 IPMode的更多详细信息。

结构化身份验证配置(SIG Auth

结构化身份验证配置在此版本中升级为 Beta 版。

Kubernetes 一直以来都需要一个更灵活和可扩展的身份验证系统。当前的系统虽然功能强大,但在某些场景中使用时存在一些限制。例如,无法使用相同类型的多个身份验证器(例如,多个 JWT 身份验证器),或者在不重启 API 服务器的情况下更改配置。结构化身份验证配置功能是解决这些限制并提供更灵活和可扩展的方式来配置 Kubernetes 中的身份验证的第一步。有关结构化身份验证配置的更多详细信息。

结构化授权配置(SIG Auth

结构化授权配置在此版本中升级为 Beta 版。

Kubernetes 不断发展,以满足系统管理员和开发人员的复杂需求。Kubernetes 确保集群安全性和完整性的一个关键方面是 API 服务器授权。直到最近,kube-apiserver 中授权链的配置还相对僵化,仅限于一组命令行标志,并且在授权链中只允许一个 Webhook。这种方法虽然可行,但限制了集群管理员定义复杂、细粒度授权策略所需的灵活性。最新的结构化授权配置功能旨在通过引入一种更结构化和通用的方式来配置授权链,从而彻底改变这一方面,重点是启用多个 Webhook 并提供显式控制机制。有关结构化授权配置的更多详细信息。

新的 Alpha 功能

加速递归 SELinux 标签更改(SIG Storage

从 v1.27 版本开始,Kubernetes 已经包含了一个优化,可以使用恒定时间仅在卷的内容上设置 SELinux 标签。Kubernetes 使用挂载选项实现了这种加速。较慢的旧行为需要容器运行时递归遍历整个卷,并将 SELinux 标签单独应用于每个文件和目录;对于具有大量文件和目录的卷,这一点尤其明显。

Kubernetes v1.27 将此功能升级为 Beta 版,但将其限制为 ReadWriteOncePod 卷。对应的功能门是 SELinuxMountReadWriteOncePod。它仍然默认启用,并在 v1.30 中保持 Beta 版。

Kubernetes v1.30 将 SELinux 挂载选项的支持扩展到所有卷作为 Alpha 版,具有单独的功能门:SELinuxMount。当具有不同 SELinux 标签的多个 Pod 共享同一个卷时,此功能门会引入行为更改。有关详细信息,请参阅 KEP

我们强烈建议启用 SELinux 的 Kubernetes 用户测试此功能,并在 KEP issue 上提供任何反馈。

功能门v1.30 中的阶段行为变更
SELinuxMountReadWriteOncePodBeta
SELinuxMountAlpha

必须同时启用 SELinuxMountReadWriteOncePodSELinuxMount 功能门,才能在所有卷上测试此功能。

此功能对 Windows 节点或没有 SELinux 支持的 Linux 节点无效。

递归只读 (RRO) 挂载(SIG Node

在此版本中引入 Alpha 版的递归只读 (RRO) 挂载,您将为数据找到一个新的安全层。此功能允许您将卷及其子挂载设置为只读,防止意外修改。想象一下部署一个数据完整性至关重要的关键应用程序 - RRO 挂载确保您的数据保持不变,通过额外的保护来加强集群的安全性。这在严格控制的环境中尤其重要,即使是最轻微的更改也可能产生重大影响。

Job 成功/完成策略(SIG Apps

从 Kubernetes v1.30 开始,索引 Job 支持 .spec.successPolicy 来定义何时可以根据成功的 Pod 声明 Job 成功。这允许您定义两种类型的标准

  • succeededIndexes 表示当这些索引成功时,即使其他索引失败,也可以声明 Job 成功。
  • succeededCount 表示当成功的索引数达到此标准时,可以声明 Job 成功。

在 Job 满足成功策略后,Job 控制器会终止剩余的 Pod。

服务的流量分配(SIG Network

Kubernetes v1.30 在 Kubernetes Service 中引入了 spec.trafficDistribution 字段作为 Alpha 版。这允许您表达如何将流量路由到 Service 端点的首选项。虽然流量策略侧重于严格的语义保证,但流量分配允许您表达首选项(例如,路由到拓扑上更近的端点)。这可以帮助优化性能、成本或可靠性。您可以通过为您的集群及其所有节点启用 ServiceTrafficDistribution 功能门来使用此字段。在 Kubernetes v1.30 中,支持以下字段值

PreferClose:表示优先将流量路由到拓扑上与客户端接近的端点。对“拓扑上接近”的解释可能因实现而异,并且可能包括同一节点、机架、区域甚至区域内的端点。设置此值允许实现进行不同的权衡,例如优化接近度而不是负载的均衡分布。如果此类权衡不可接受,则不应设置此值。

如果未设置该字段,则实现(例如 kube-proxy)将应用其默认路由策略。

有关更多详细信息,请参阅流量分配

存储版本迁移(SIG API Machinery

Kubernetes v1.30 引入了一个用于 StorageVersionMigration 的新内置 API。Kubernetes 依赖于 API 数据的积极重写,以支持与静态存储相关的一些维护活动。两个突出的例子是存储资源的已版本化模式(即,给定资源的首选存储模式从 v1 更改为 v2)和静态加密(即,根据数据应如何加密的更改来重写旧数据)。

StorageVersionMigration 是 Alpha API,之前在 out of tree 中可用。

有关更多详细信息,请参阅存储版本迁移

Kubernetes v1.30 的升级、弃用和删除

升级为稳定版

这列出了所有升级为稳定版(也称为正式发布)的功能。有关包括新功能和从 Alpha 版升级到 Beta 版的完整更新列表,请参阅发行说明

此版本总共包含 17 个升级为稳定的增强功能

弃用和删除

删除了自 v1.27 起已弃用的 SecurityContextDeny 准入插件

SIG AuthSIG SecuritySIG Testing)随着 SecurityContextDeny 准入插件的删除,建议改用自 v1.25 起可用的 Pod 安全准入插件。

发行说明

在我们的发行说明中查看 Kubernetes v1.30 发行版的完整详细信息。

可用性

Kubernetes v1.30 可在 GitHub 上下载。要开始使用 Kubernetes,请查看这些互动教程,或使用 minikube 运行本地 Kubernetes 集群。您还可以使用 kubeadm 轻松安装 v1.30。

发布团队

Kubernetes 的成功离不开社区的支持、投入和辛勤工作。每个发布团队都由尽心尽责的社区志愿者组成,他们共同构建构成您依赖的 Kubernetes 发布版本的许多部分。这需要我们社区各个角落的人才具备专业技能,从代码本身到其文档和项目管理。

我们要感谢整个发布团队花费大量时间辛勤工作,为我们的社区交付 Kubernetes v1.30 发布版。发布团队的成员包括首次参与的新人和经验丰富的回归团队领导。非常感谢我们的发布负责人 Kat Cosgrove,感谢她在整个成功的发布周期中为我们提供支持,为我们发声,确保我们能够以最佳方式做出贡献,并挑战我们改进发布流程。

项目速度

CNCF K8s DevStats 项目汇总了许多与 Kubernetes 和各个子项目的速度相关的有趣数据点。这包括从个人贡献到正在贡献的公司的数量的所有内容,并且说明了为发展该生态系统所付出的努力的深度和广度。

在为期 14 周的 v1.30 发布周期(1 月 8 日至 4 月 17 日)中,我们看到了来自 863 家公司1391 名个人的贡献。

活动更新

  • KubeCon + CloudNativeCon 中国 2024 将于 2024 年 8 月 21 日至 23 日在香港举行!您可以在活动网站上找到有关会议和注册的更多信息。
  • KubeCon + CloudNativeCon 北美 2024 将于 2024 年 11 月 12 日至 15 日在美国犹他州盐湖城举行!您可以在活动网站上找到有关会议和注册的更多信息。

即将发布的网络研讨会

加入 Kubernetes v1.30 发布团队的成员,于太平洋时间 2024 年 5 月 23 日星期四上午 9 点,了解此版本的主要功能,以及为了帮助您规划升级而进行的弃用和删除操作。有关更多信息和注册,请访问 CNCF 在线项目网站上的活动页面

参与其中

参与 Kubernetes 最简单的方法是加入与您的兴趣相符的众多特别兴趣小组 (SIG) 之一。 您想向 Kubernetes 社区广播一些内容吗?请在我们每周的社区会议上,并通过以下渠道分享您的声音。 感谢您持续的反馈和支持。

此博客于 2024 年 4 月 19 日更新,重点介绍了最初未包含在发布博客中的另外两个更改。