Kubernetes v1.33: Octarine

编辑: Agustina Barbetta、Aakanksha Bhende、Udi Hofesh、Ryota Sawada、Sneha Yadav

与之前的版本类似,Kubernetes v1.33 的发布引入了新的稳定、Beta 和 Alpha 功能。持续交付高质量的版本突显了我们强大的开发周期和社区充满活力的支持。

此版本包含 64 项增强功能。其中,18 项已升级为稳定版,20 项进入 Beta 版,24 项进入 Alpha 版,还有 2 项被弃用或撤回。

此版本中还有一些值得注意的弃用和移除;如果您已经在运行旧版本的 Kubernetes,请务必阅读相关内容。

Kubernetes v1.33 的主题是魔法的颜色:Octarine1,灵感来自特里·普拉切特的《碟形世界》系列。此版本突显了 Kubernetes 在整个生态系统中实现的开源魔法2

如果您熟悉《碟形世界》,您可能会认出一只小小的沼泽龙栖息在无形大学的塔顶,仰望着 Ankh-Morpork 城上空的 Kubernetes 月亮,背景中有 64 颗星星3

随着 Kubernetes 迈入第二个十年,我们庆祝其维护者的精湛技艺、新贡献者的好奇心以及推动项目前进的协作精神。v1.33 版本提醒我们,正如普拉切特所写:“即使你知道它是如何完成的,它仍然是魔法。”即使你对 Kubernetes 代码库的里里外外了如指掌,在发布周期结束时回望,你也会意识到 Kubernetes 依然充满魔力。

Kubernetes v1.33 证明了开源创新的持久力量,来自世界各地的数百名贡献者4共同创造了真正非凡的成果。在每一个新功能的背后,Kubernetes 社区都在努力维护和改进项目,确保其安全、可靠并按时发布。每个版本都建立在前一个版本的基础上,创造出比我们独自能实现的更伟大的东西。

1. Octarine 是神话中的第八种颜色,只有那些对奥术有感知的人才能看到——巫师、女巫,当然还有猫。偶尔,某个盯着 IPtable 规则太久的人也能看到。
2. 任何足够先进的技术都与魔法无异……?
3. v1.33 中也包含 64 个 KEP(Kubernetes 增强提案),这并非巧合。
4. 请参阅 v1.33 的“项目速度”部分 🚀

重点更新聚焦

Kubernetes v1.33 包含了许多新功能和改进。以下是发布团队希望重点介绍的一些更新!

稳定版:Sidecar 容器

Sidecar 模式涉及部署单独的辅助容器来处理网络、日志记录和指标收集等领域的额外功能。Sidecar 容器在 v1.33 中升级为稳定版。

Kubernetes 将 Sidecar 实现为一种特殊的 Init 容器,其 `restartPolicy: Always`,确保 Sidecar 在应用容器之前启动,在 Pod 的整个生命周期中保持运行,并在主容器退出后自动终止。

此外,Sidecar 可以利用探针(启动、就绪、存活)来表明其运行状态,并且其内存不足(OOM)分数调整与主容器保持一致,以防止在内存压力下过早终止。

要了解更多信息,请阅读Sidecar 容器

这项工作是作为 KEP-753:Sidecar 容器 的一部分完成的,由 SIG Node 领导。

Beta 版:用于 Pod 垂直扩展的就地资源调整

工作负载可以使用 Deployment、StatefulSet 等 API 来定义。这些 API 描述了应该运行的 Pod 的模板,包括内存和 CPU 资源,以及应该运行的 Pod 副本数量。工作负载可以通过更新 Pod 副本数量进行水平扩展,或者通过更新 Pod 容器中所需的资源进行垂直扩展。在此增强功能之前,Pod 的 `spec` 中定义的容器资源是不可变的,更新 Pod 模板中的任何这些细节都会触发 Pod 替换。

但是,如果您可以动态更新现有 Pod 的资源配置而无需重启它们呢?

KEP-1287 正是为了允许这种就地 Pod 更新而设计的。它在 v1.27 中作为 Alpha 版本发布,并在 v1.33 中升级为 Beta 版。这为有状态进程的垂直扩展提供了多种可能性,无需任何停机时间,在流量低时可以无缝缩减,甚至可以在启动期间分配更大的资源,然后在初始设置完成后减少资源。

这项工作是作为 KEP-1287:就地更新 Pod 资源 的一部分完成的,由 SIG Node 和 SIG Autoscaling 领导。

Alpha 版:kubectl 新增 `.kuberc` 配置文件选项用于用户偏好设置

在 v1.33 中,`kubectl` 引入了一个新的 Alpha 功能,即使用可选的配置文件 `.kuberc` 来设置用户偏好。该文件可以包含 `kubectl` 的别名和覆盖设置(例如,默认使用服务器端应用),同时将集群凭据和主机信息保留在 kubeconfig 中。这种分离允许共享相同的 `kubectl` 交互用户偏好,而不管目标集群和使用的 kubeconfig 是什么。

要启用此 Alpha 功能,用户可以设置环境变量 `KUBECTL_KUBERC=true` 并创建一个 `.kuberc` 配置文件。默认情况下,`kubectl` 会在 `~/.kube/kuberc` 中寻找此文件。您也可以使用 `--kuberc` 标志指定一个替代位置,例如:`kubectl --kuberc /var/kube/rc`。

这项工作是作为 KEP-3104:将 kubectl 用户偏好与集群配置分离 的一部分完成的,由 SIG CLI 领导。

升级为稳定版的功能

这是 v1.33 发布后升级为稳定版的部分改进。

索引 Job 的按索引回退限制

此版本将一个功能升级为稳定版,该功能允许为索引 Job 设置按索引的回退限制。传统上,Kubernetes Job 中的 `backoffLimit` 参数指定了在将整个 Job 视为失败之前的重试次数。此增强功能允许索引 Job 中的每个索引都有自己的回退限制,从而为单个任务的重试行为提供更精细的控制。这确保了特定索引的失败不会过早地终止整个 Job,从而允许其他索引独立继续处理。

这项工作是作为 KEP-3850:索引 Job 的按索引回退限制 的一部分完成的,由 SIG Apps 领导。

Job 成功策略

通过使用 `.spec.successPolicy`,用户可以指定哪些 Pod 索引必须成功(`succeededIndexes`)、必须有多少个 Pod 成功(`succeededCount`),或两者的组合。此功能适用于各种工作负载,包括部分完成即足够满足要求的模拟场景,以及只有领导者成功才能决定整个 Job 结果的领导者-工作者模式。

这项工作是作为 KEP-3998:Job 成功/完成策略 的一部分完成的,由 SIG Apps 领导。

绑定的 ServiceAccount 令牌安全性改进

此增强功能引入了一些特性,例如在令牌中包含唯一令牌标识符(即 JWT ID 声明,也称为 JTI)和节点信息,从而实现更精确的验证和审计。此外,它支持节点特定的限制,确保令牌只能在指定的节点上使用,从而降低令牌被滥用和潜在安全漏洞的风险。这些改进现已正式可用,旨在增强 Kubernetes 集群内 Service Account 令牌的整体安全态势。

这项工作是作为 KEP-4193:绑定的 Service Account 令牌改进 的一部分完成的,由 SIG Auth 领导。

kubectl 对子资源的支持

`--subresource` 参数现在已在 kubectl 的 `get`、`patch`、`edit`、`apply` 和 `replace` 等子命令中正式可用,允许用户获取和更新所有支持子资源的资源的子资源。要了解更多关于支持的子资源的信息,请访问 kubectl 参考

这项工作是作为 KEP-2590:为 kubectl 添加子资源支持 的一部分完成的,由 SIG CLI 领导。

多个 Service CIDR

此增强功能引入了一种新的 Service IP 分配逻辑实现。在整个集群中,每个 `type: ClusterIP` 的 Service 都必须分配一个唯一的 IP 地址。尝试使用一个已经被分配的特定集群 IP 创建 Service 将会返回错误。更新后的 IP 地址分配器逻辑使用了两个新的稳定 API 对象:`ServiceCIDR` 和 `IPAddress`。这些 API 现已正式可用,允许集群管理员(通过创建新的 ServiceCIDR 对象)动态增加可用于 `type: ClusterIP` 服务的 IP 地址数量。

这项工作是作为 KEP-1880:多个 Service CIDR 的一部分完成的,由 SIG Network 领导。

kube-proxy 的 `nftables` 后端

kube-proxy 的 `nftables` 后端现已稳定,它增加了一个新的实现,显著提高了 Kubernetes 集群内 Service 实现的性能和可伸缩性。出于兼容性原因,`iptables` 仍然是 Linux 节点上的默认后端。如果您想尝试它,请查阅迁移指南

这项工作是作为 KEP-3866:nftables kube-proxy 后端 的一部分完成的,由 SIG Network 领导。

具有 `trafficDistribution: PreferClose` 的拓扑感知路由

此版本将拓扑感知路由和流量分发升级为正式可用(GA),这将使我们能够优化多区域集群中的服务流量。EndpointSlices 中的拓扑感知提示将使像 kube-proxy 这样的组件能够优先将流量路由到同一区域内的端点,从而降低延迟和跨区域数据传输成本。在此基础上,Service 规范中添加了 `trafficDistribution` 字段,`PreferClose` 选项会根据网络拓扑将流量导向最近的可用端点。此配置通过最小化区域间通信来提高性能和成本效益。

这项工作是作为 KEP-4444:Service 的流量分发KEP-2433:拓扑感知路由 的一部分完成的,由 SIG Network 领导。

拒绝非 SMT 对齐工作负载的选项

此功能为 CPU 管理器添加了策略选项,使其能够拒绝不符合同时多线程(SMT)配置的工作负载。此增强功能现已正式可用,确保当一个 Pod 请求独占使用 CPU 核心时,CPU 管理器可以在启用 SMT 的系统上强制分配整个核心对(包括主线程和兄弟线程),从而防止工作负载以非预期的方式共享 CPU 资源。

这项工作是作为 KEP-2625:node: cpumanager: 添加拒绝非 SMT 对齐工作负载的选项 的一部分完成的,由 SIG Node 领导。

使用 `matchLabelKeys` 和 `mismatchLabelKeys` 定义 Pod 亲和性或反亲和性

`matchLabelKeys` 和 `mismatchLabelKeys` 字段现在在 Pod 亲和性术语中可用,使用户能够精细控制 Pod 应该共存(亲和性)或不共存(反亲和性)的范围。这些新的稳定选项补充了现有的 `labelSelector` 机制。亲和性字段有助于增强通用滚动更新的调度,以及基于全局配置隔离由工具或控制器管理的服务。

这项工作是作为 KEP-3633:为 Pod 亲和性和 Pod 反亲和性引入 MatchLabelKeys 的一部分完成的,由 SIG Scheduling 领导。

计算 Pod 拓扑分布偏差时考虑污点和容忍

此功能通过引入两个字段增强了 `PodTopologySpread`:`nodeAffinityPolicy` 和 `nodeTaintsPolicy`。这些字段允许用户指定在计算 Pod 在节点间的分布时是否应考虑节点亲和性规则和节点污点。默认情况下,`nodeAffinityPolicy` 设置为 `Honor`,这意味着只有匹配 Pod 节点亲和性或选择器的节点才会被包含在分布计算中。`nodeTaintsPolicy` 默认为 `Ignore`,表示除非特别指定,否则不考虑节点污点。此增强功能提供了对 Pod 放置的更精细控制,确保 Pod 被调度到同时满足亲和性和污点容忍要求的节点上,从而防止因未满足约束而导致 Pod 保持 Pending 状态的情况。

这项工作是作为 KEP-3094:计算 PodTopologySpread 偏差时考虑污点/容忍 的一部分完成的,由 SIG Scheduling 领导。

卷填充器

在 v1.24 作为 Beta 版本发布后,*卷填充器* 已经在 v1.33 中升级为正式可用(GA)。这个新的稳定功能提供了一种方式,允许用户使用来自各种来源的数据预填充卷,而不仅仅是从持久卷声明(PVC)克隆或卷快照中。该机制依赖于 PersistentVolumeClaim 中的 `dataSourceRef` 字段。该字段比现有的 `dataSource` 字段提供了更大的灵活性,并允许使用自定义资源作为数据源。

一个特殊的控制器 `volume-data-source-validator` 会验证这些数据源引用,同时还有一个新的稳定 CustomResourceDefinition (CRD),用于一个名为 VolumePopulator 的 API 类型。VolumePopulator API 允许卷填充器控制器注册它们支持的数据源类型。您需要使用适当的 CRD 设置您的集群才能使用卷填充器。

这项工作是作为 KEP-1495:通用数据填充器 的一部分完成的,由 SIG Storage 领导。

始终遵循持久卷回收策略

此增强功能解决了一个问题,即持久卷(PV)回收策略未被一致地遵循,导致潜在的存储资源泄漏。具体来说,如果一个 PV 在其关联的持久卷声明(PVC)之前被删除,“Delete”回收策略可能不会被执行,从而使底层存储资产保持完整。为了缓解这个问题,Kubernetes 现在在相关的 PV 上设置了 finalizers,确保无论删除顺序如何,回收策略都会被强制执行。此增强功能防止了存储资源的意外保留,并保持了 PV 生命周期管理的一致性。

这项工作是作为 KEP-2644:始终遵循持久卷回收策略 的一部分完成的,由 SIG Storage 领导。

Beta 版新功能

这是 v1.33 发布后升级为 Beta 版的部分改进。

Windows kube-proxy 支持直接服务器返回(DSR)

DSR 通过允许通过负载均衡器路由的返回流量绕过负载均衡器直接响应客户端,从而提供了性能优化;这减少了负载均衡器的负载,也降低了整体延迟。有关 Windows 上的 DSR 的信息,请阅读直接服务器返回(DSR)简述

最初在 v1.14 中引入的 DSR 支持,已由 SIG Windows 作为 KEP-5100:在 Windows kube-proxy 中支持直接服务器返回(DSR)和覆盖网络 的一部分提升为 Beta 版。

结构化参数支持

虽然结构化参数支持在 Kubernetes v1.33 中仍然是 Beta 功能,但作为动态资源分配(DRA)的核心部分,它已经有了显著的改进。一个新的 v1beta2 版本简化了 `resource.k8s.io` API,并且具有命名空间集群 `edit` 角色的普通用户现在可以使用 DRA。

现在 `kubelet` 包含了无缝升级支持,使得作为 DaemonSet 部署的驱动程序能够使用滚动更新机制。对于 DRA 实现,这可以防止 ResourceSlice 的删除和重新创建,使其在升级期间保持不变。此外,在 `kubelet` 清理未注册的驱动程序之前,引入了一个 30 秒的宽限期,为不使用滚动更新的驱动程序提供了更好的支持。

这项工作是作为 KEP-4381:DRA:结构化参数 的一部分完成的,由 WG Device Management 领导,这是一个跨职能团队,包括 SIG Node、SIG Scheduling 和 SIG Autoscaling。

用于网络接口的动态资源分配(DRA)

在 v1.32 中引入的通过 DRA 标准化报告网络接口数据的功能,已在 v1.33 中升级为 Beta 版。这使得更原生的 Kubernetes 网络集成成为可能,简化了网络设备的开发和管理。这在之前的 v1.32 发布公告博客中已有介绍。

这项工作是作为 KEP-4817:DRA:带有可能的标准化网络接口数据的资源声明状态 的一部分完成的,由 SIG Network、SIG Node 和 WG Device Management 领导。

当调度器在 activeQ 中没有任何 Pod 时,提早处理未调度的 Pod

此功能改进了队列调度行为。在幕后,调度器通过在 *activeQ* 为空时从 *backoffQ* 中弹出因错误而未被回退的 Pod 来实现这一点。以前,即使 *activeQ* 为空,调度器也会变得空闲;此增强功能通过防止这种情况来提高调度效率。

这项工作是作为 KEP-5142:当 activeQ 为空时从 backoffQ 中弹出 Pod 的一部分完成的,由 SIG Scheduling 领导。

Kubernetes 调度器中的异步抢占

抢占通过驱逐较低优先级的 Pod 来确保较高优先级的 Pod 获得它们所需的资源。异步抢占,在 v1.32 中作为 Alpha 版本引入,已在 v1.33 中升级为 Beta 版。通过此增强功能,诸如删除 Pod 的 API 调用等繁重操作将并行处理,允许调度器继续调度其他 Pod 而不会出现延迟。此改进在 Pod 流失率高或调度频繁失败的集群中尤其有益,可确保更高效、更有弹性的调度过程。

这项工作是作为 KEP-4832:调度器中的异步抢占 的一部分完成的,由 SIG Scheduling 领导。

ClusterTrustBundles

ClusterTrustBundle,一个用于存放 X.509 信任锚(根证书)的集群范围资源,已在 v1.33 中升级为 Beta 版。此 API 使集群内证书签署者更容易向集群工作负载发布和传达 X.509 信任锚。

这项工作是作为 KEP-3257:ClusterTrustBundles(以前称为 Trust Anchor Sets) 的一部分完成的,由 SIG Auth 领导。

精细化的 SupplementalGroups 控制

此功能在 v1.31 中引入,在 v1.33 中升级为 Beta 版,并且现在默认启用。如果您的集群启用了 `SupplementalGroupsPolicy` 特性门控,Pod 的 `securityContext` 中的 `supplementalGroupsPolicy` 字段支持两种策略:默认的 Merge 策略通过将指定的组与容器镜像的 `/etc/group` 文件中的组合来保持向后兼容性,而新的 Strict 策略仅适用于明确定义的组。

此增强功能有助于解决安全问题,即容器镜像中隐式的组成员身份可能导致意外的文件访问权限并绕过策略控制。

这项工作是作为 KEP-3619:精细化的 SupplementalGroups 控制 的一部分完成的,由 SIG Node 领导。

支持将镜像挂载为卷

在 v1.31 中引入的、支持在 Pod 中使用开放容器倡议(OCI)镜像作为卷的功能,已升级为 Beta 版。此功能允许用户将镜像引用指定为 Pod 中的一个卷,同时在容器内将其作为卷挂载重复使用。这开启了将卷数据分开打包,并在 Pod 内的容器间共享的可能性,而无需将它们包含在主镜像中,从而减少了漏洞并简化了镜像创建。

这项工作是作为 KEP-4639:VolumeSource:OCI 制品和/或镜像 的一部分完成的,由 SIG Node 和 SIG Storage 领导。

支持在 Linux Pod 内使用用户命名空间

截至撰写本文时,最古老的开放 KEP 之一是 KEP-127,即通过为 Pod 使用 Linux 用户命名空间来提高 Pod 安全性。此 KEP 最初于 2016 年底提出,经过多次迭代,在 v1.25 中发布了 Alpha 版本,在 v1.30 中首次发布 Beta 版(默认禁用),并作为 v1.33 的一部分转为默认启用的 Beta 版。

此支持不会影响现有的 Pod,除非您手动指定 `pod.spec.hostUsers` 来选择加入。正如 v1.30 预览博客中强调的,这是缓解漏洞的重要里程碑。

这项工作是作为 KEP-127:支持在 Pod 中使用用户命名空间 的一部分完成的,由 SIG Node 领导。

Pod 的 `procMount` 选项

`procMount` 选项,在 v1.12 中作为 Alpha 版本引入,在 v1.31 中作为默认禁用的 Beta 版本,已在 v1.33 中转为默认启用的 Beta 版本。此增强功能通过允许用户微调对 `/proc` 文件系统的访问来提高 Pod 的隔离性。具体来说,它在 Pod 的 `securityContext` 中添加了一个字段,让您可以覆盖默认的屏蔽和将某些 `/proc` 路径标记为只读的行为。这对于用户希望在 Kubernetes Pod 内使用用户命名空间运行非特权容器的场景特别有用。通常,容器运行时(通过 CRI 实现)会以严格的 `/proc` 挂载设置启动外部容器。然而,为了成功运行带有非特权 Pod 的嵌套容器,用户需要一种机制来放宽这些默认设置,而此功能正是为此而生。

这项工作是作为 KEP-4265:添加 ProcMount 选项 的一部分完成的,由 SIG Node 领导。

CPUManager 策略:跨 NUMA 节点分配 CPU

此功能为 CPU 管理器添加了一个新的策略选项,以跨非均匀内存访问(NUMA)节点分配 CPU,而不是将它们集中在单个节点上。它通过在多个 NUMA 节点之间平衡工作负载来优化 CPU 资源分配,从而在多 NUMA 系统中提高性能和资源利用率。

这项工作是作为 KEP-2902:添加 CPUManager 策略选项以跨 NUMA 节点分配 CPU 而不是打包它们 的一部分完成的,由 SIG Node 领导。

容器 PreStop 钩子的零秒休眠

Kubernetes 1.29 在 Pod 的 `preStop` 生命周期钩子中引入了一个 Sleep 动作,允许容器在终止前暂停指定的时长。这提供了一种延迟容器关闭的直接方法,有助于执行连接排空或清理操作等任务。

现在,`preStop` 钩子中的 Sleep 动作可以接受零秒时长,这是一个 Beta 功能。这允许定义一个无操作的 `preStop` 钩子,当需要 `preStop` 钩子但不需要任何延迟时非常有用。

这项工作是作为 KEP-3960:为 PreStop 钩子引入 Sleep 动作KEP-4818:允许 PreStop 钩子的 Sleep 动作为零值 的一部分完成的,由 SIG Node 领导。

用于声明式验证 Kubernetes 原生类型的内部工具

在幕后,Kubernetes 的内部正在开始使用一种新的机制来验证对象和对象的变更。Kubernetes v1.33 引入了 `validation-gen`,这是一个 Kubernetes 贡献者用来生成声明式验证规则的内部工具。总体目标是通过使开发人员能够声明式地指定验证约束,减少手动编码错误并确保整个代码库的一致性,从而提高 API 验证的健壮性和可维护性。

这项工作是作为 KEP-5073:使用 validation-gen 声明式验证 Kubernetes 原生类型 的一部分完成的,由 SIG API Machinery 领导。

进入 Alpha 阶段的新功能

这是 v1.33 发布后升级为 Alpha 版的部分改进。

HorizontalPodAutoscalers 的可配置容忍度

此功能为 HorizontalPodAutoscalers 引入了可配置的容忍度,从而减弱了对微小指标变化的扩缩反应。

这项工作是作为 KEP-4951:Horizontal Pod Autoscaler 的可配置容忍度 的一部分完成的,由 SIG Autoscaling 领导。

可配置的容器重启延迟

此功能在 v1.32 中作为 alpha1 引入,提供了一组 kubelet 级别的配置,用于微调 CrashLoopBackOff 的处理方式。

这项工作是作为 KEP-4603:调整 CrashLoopBackOff 的一部分完成的,由 SIG Node 领导。

自定义容器停止信号

在 Kubernetes v1.33 之前,停止信号只能在容器镜像定义中设置(例如,通过镜像元数据中的 `StopSignal` 配置字段)。如果您想修改终止行为,就需要构建一个自定义容器镜像。通过在 Kubernetes v1.33 中启用(Alpha)`ContainerStopSignals` 特性门控,您现在可以直接在 Pod 规范中定义自定义停止信号。这在容器的 `lifecycle.stopSignal` 字段中定义,并要求 Pod 的 `spec.os.name` 字段存在。如果未指定,容器将回退到镜像定义的停止信号(如果存在),或容器运行时的默认信号(对于 Linux 通常是 SIGTERM)。

这项工作是作为 KEP-4960:容器停止信号 的一部分完成的,由 SIG Node 领导。

DRA 增强功能 galore!

Kubernetes v1.33 继续开发动态资源分配(DRA),其功能专为当今复杂的基础设施而设计。DRA 是一种用于在 Pod 内部的 Pod 和容器之间请求和共享资源的 API。通常这些资源是 GPU、FPGA 和网络适配器等设备。

以下是 v1.33 中引入的所有 Alpha DRA 特性门控

  • 与节点污点类似,通过启用 `DRADeviceTaints` 特性门控,设备支持污点和容忍。管理员或控制平面组件可以对设备进行污点标记,以限制其使用。依赖这些设备的 Pod 的调度可以在存在污点时暂停,和/或使用被污点标记的设备的 Pod 可以被驱逐。
  • 通过启用 `DRAPrioritizedList` 特性门控,DeviceRequest 获得了一个名为 `firstAvailable` 的新字段。该字段是一个有序列表,允许用户指定一个请求可以通过不同方式满足,包括在某些特定硬件不可用时完全不分配。
  • 启用 `DRAAdminAccess` 特性门控后,只有被授权在带有 `resource.k8s.io/admin-access: "true"` 标签的命名空间中创建 ResourceClaim 或 ResourceClaimTemplate 对象的用户才能使用 `adminAccess` 字段。这确保了非管理员用户不能滥用 `adminAccess` 功能。
  • 虽然自 v1.31 以来就可以使用设备分区,但供应商必须预先对设备进行分区并相应地进行通告。通过在 v1.33 中启用 `DRAPartitionableDevices` 特性门控,设备供应商可以通告多个分区,包括重叠的分区。Kubernetes 调度器将根据工作负载请求选择分区,并防止同时分配冲突的分区。此功能使供应商能够在分配时动态创建分区。分配和动态分区对用户来说是自动和透明的,从而提高了资源利用率。

除非您同时启用 `DynamicResourceAllocation` 特性门控,否则这些特性门控无效。

这项工作是作为 KEP-5055:DRA:设备污点和容忍KEP-4816:DRA:设备请求中的优先备选方案KEP-5018:DRA:ResourceClaim 和 ResourceClaimTemplate 的 AdminAccess 以及 KEP-4815:DRA:添加对可分区设备的支持 的一部分完成的,由 SIG Node、SIG Scheduling 和 SIG Auth 领导。

稳健的镜像拉取策略,用于对 `IfNotPresent` 和 `Never` 的镜像进行身份验证

此功能允许用户确保 kubelet 对每组新的凭据都要求进行镜像拉取身份验证检查,无论该镜像是否已存在于节点上。

这项工作是作为 KEP-2535:确保 Secret 拉取镜像 的一部分完成的,由 SIG Auth 领导。

节点拓扑标签可通过 downward API 获得

此功能使节点拓扑标签能够通过 downward API 暴露。在 Kubernetes v1.33 之前,一种变通方法是使用一个 Init 容器来查询 Kubernetes API 以获取底层节点;这个 Alpha 功能简化了工作负载访问节点拓扑信息的方式。

这项工作是作为 KEP-4742:通过 downward API 暴露节点标签 的一部分完成的,由 SIG Node 领导。

通过 generation 和 observed generation 改善 Pod 状态

在此更改之前,`metadata.generation` 字段在 Pod 中未被使用。除了扩展以支持 `metadata.generation` 之外,此功能还将引入 `status.observedGeneration` 以提供更清晰的 Pod 状态。

这项工作是作为 KEP-5067:Pod Generation 的一部分完成的,由 SIG Node 领导。

kubelet 的 CPU 管理器支持分离式三级缓存架构

之前的 kubelet CPU 管理器无法感知分离式 L3 缓存架构(也称为末级缓存,或 LLC),并且可能在不考虑分离式 L3 缓存的情况下分配 CPU,导致“吵闹的邻居”问题。这个 Alpha 功能改进了 CPU 管理器,以更好地分配 CPU 核心,从而提高性能。

这项工作是作为 KEP-5109:CPU 管理器中的分离式 L3 缓存拓扑感知 的一部分完成的,由 SIG Node 领导。

用于改进调度的 PSI(压力停滞信息)指标

此功能在 Linux 节点上增加了使用 cgroupv2 提供 PSI 统计数据和指标的支持。它可以检测资源短缺,并为节点提供更精细的 Pod 调度控制。

这项工作是作为 KEP-4205:基于 cgroupv2 支持 PSI 的一部分完成的,由 SIG Node 领导。

kubelet 无 Secret 镜像拉取

kubelet 的磁盘凭据提供程序现在支持可选的 Kubernetes ServiceAccount (SA) 令牌获取。这通过允许云提供商更好地与兼容 OIDC 的身份解决方案集成,简化了与镜像仓库的身份验证。

这项工作是作为 KEP-4412:用于 Kubelet 镜像凭据提供程序的投影服务帐户令牌 的一部分完成的,由 SIG Auth 领导。

v1.33 中的升级、弃用和移除

升级到稳定版

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

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

弃用和移除

随着 Kubernetes 的发展和成熟,某些功能可能会被弃用、移除或被更好的功能替代,以提高项目的整体健康状况。有关此过程的更多详细信息,请参阅 Kubernetes 弃用和移除策略。其中许多弃用和移除已在弃用和移除博客文章中宣布。

弃用稳定的 Endpoints API

自 v1.21 起,EndpointSlices API 已稳定,它有效地取代了最初的 Endpoints API。虽然最初的 Endpoints API 简单直接,但在扩展到大量网络端点时也带来了一些挑战。EndpointSlices API 引入了双栈网络等新功能,使得最初的 Endpoints API 已经可以被弃用了。

此弃用仅影响那些直接从工作负载或脚本中使用 Endpoints API 的用户;这些用户应迁移到使用 EndpointSlices。将会有一篇专门的博客文章,详细介绍此弃用的影响和迁移计划。

您可以在 KEP-4974:弃用 v1.Endpoints 中找到更多信息。

从节点状态中移除 kube-proxy 版本信息

继在 v1.31 中被弃用,如 v1.31 发布公告中所强调的,节点的 `.status.nodeInfo.kubeProxyVersion` 字段已在 v1.33 中被移除。

此字段由 kubelet 设置,但其值并不总是准确的。由于自 v1.31 起默认禁用,此字段已在 v1.33 中被完全移除。

您可以在 KEP-4004:弃用 status.nodeInfo.kubeProxyVersion 字段 中找到更多信息。

移除树内 gitRepo 卷驱动

gitRepo 卷类型自 v1.11 起已被弃用,至今已有近 7 年。自弃用以来,一直存在安全问题,包括 gitRepo 卷类型如何被利用以在节点上以 root 身份获得远程代码执行。在 v1.33 中,树内驱动代码已被移除。

有 git-sync 和 initContainers 等替代方案。Kubernetes API 中的 `gitVolumes` 并未移除,因此带有 `gitRepo` 卷的 Pod 仍会被 kube-apiserver 接受,但将 `GitRepoVolumeDriver` 特性门控设置为 false 的 kubelet 将不会运行它们,并会向用户返回适当的错误。这允许用户选择重新启用该驱动程序 3 个版本,以便他们有足够的时间修复工作负载。

计划在 v1.39 版本中移除 kubelet 中的特性门控和树内插件代码。

您可以在 KEP-5040:移除 gitRepo 卷驱动 中找到更多信息。

移除对 Windows Pod 的主机网络支持

Windows Pod 网络旨在实现与 Linux 的功能对等,并通过允许容器使用节点的网络命名空间来提高集群密度。最初的实现作为 Alpha 版本于 v1.26 落地,但由于面临意外的 containerd 行为以及存在替代解决方案,Kubernetes 项目决定撤回相关的 KEP。在 v1.33 中,支持已完全移除。

请注意,这不影响 HostProcess 容器,它提供主机网络以及主机级别的访问权限。v1.33 中撤回的 KEP 仅涉及提供主机网络,由于 Windows 网络逻辑的技术限制,该功能从未稳定过。

您可以在 KEP-3503:Windows Pod 的主机网络支持 中找到更多信息。

发布说明

请在我们的发布说明中查看 Kubernetes v1.33 发布的全部详细信息。

可用性

Kubernetes v1.33 可在 GitHubKubernetes 下载页面上下载。

要开始使用 Kubernetes,请查看这些交互式教程,或使用 minikube 运行本地 Kubernetes 集群。您也可以使用 kubeadm 轻松安装 v1.33。

发布团队

Kubernetes 的成功离不开其社区的支持、承诺和辛勤工作。发布团队由敬业的社区志愿者组成,他们共同努力构建 Kubernetes 版本的各个部分,为您提供可靠的发布。这需要来自我们社区各个角落的人们的专业技能,从代码本身到其文档和项目管理。

我们要感谢整个发布团队为向我们的社区交付 Kubernetes v1.33 版本所付出的辛勤工作。发布团队的成员范围从首次参与的影子成员到经验丰富的回归团队负责人,他们的经验是在多个发布周期中锻造的。在此发布周期中,采用了新的团队结构,即将发布说明和文档子团队合并为一个统一的文档子团队。得益于新文档团队在组织相关信息和资源方面的 meticulous 努力,发布说明和文档跟踪都实现了平稳成功的过渡。最后,特别感谢我们的发布负责人 Nina Polshakova,感谢她在一个成功的发布周期中提供的支持、她的倡导、她为确保每个人都能有效贡献所做的努力,以及她对改进发布过程的挑战。

项目速度

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

在 v1.33 发布周期中,从 2025 年 1 月 13 日到 4 月 23 日,为期 15 周,Kubernetes 收到了多达 121 家不同公司和 570 名个人的贡献(截至撰写本文时,即发布日期前几周)。在更广泛的云原生生态系统中,这一数字上升到 435 家公司,总计 2400 名贡献者。您可以在此仪表板中找到数据来源。与上一个版本 v1.32 的速度数据相比,我们看到公司和个人的贡献水平相似,表明社区兴趣和参与度依然强劲。

请注意,“贡献”是指某人提交了提交、代码审查、评论、创建了 issue 或 PR、审查了 PR(包括博客和文档)或对 issue 和 PR 进行了评论。如果您有兴趣做出贡献,请访问我们贡献者网站上的入门指南

查看 DevStats 以了解有关 Kubernetes 项目和社区整体速度的更多信息。

活动更新

探索即将举行的 Kubernetes 和云原生活动,包括 KubeCon + CloudNativeCon、KCD 和全球其他著名会议。随时了解最新信息并参与 Kubernetes 社区!

2025 年 5 月

2025 年 6 月

2025 年 7 月

2025 年 8 月

您可以在此处找到最新的 KCD 详细信息。

即将举行的发布网络研讨会

请于 2025 年 5 月 16 日星期五下午 4:00 (UTC) 加入 Kubernetes v1.33 发布团队的成员,了解此版本的发布亮点,以及弃用和移除的内容,以帮助规划升级。更多信息和注册,请访问 CNCF 在线计划网站上的活动页面

参与其中

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