元鉴
返回中文阅读流

Kubernetes Blog

Kubernetes 1.35: 原地 Pod 调整大小功能升级为稳定版

此次发布标志着重大进展:在最初构思 6 年多后,原地 Pod 调整大小功能(也称为原地 Pod 垂直缩放),首次在 Kubernetes v1.27 中作为 alpha 版本引入,并在 Kubernetes v1.33 中升级为 beta 版本,现在在 Kubernetes 1.35 中已稳定 (GA)!这一升级是改善 Kubernetes 上运行的工作负载资源效率和灵活性的重要里程碑。什么是原地 Pod 调整大小?过去,分配给 Pod 中容器的 CPU 和内存资源是不可变的。这意味着更改它们需要删除并重新创建整个...

中文内容

已翻译official company source英文原文2025-12-19

Kubernetes 1.35:In-Place Pod Resize 正式进入稳定版

By Natasha Sarkar (Google) | Friday, December 19, 2025

此次发布标志着重要的一步:在该功能最初构想提出 6 年多之后,In-Place Pod Resize 功能(亦称为 In-Place Pod Vertical Scaling)自 Kubernetes v1.27 作为 alpha 版本首次引入,并于 Kubernetes v1.33 晋升至 beta 版本,如今在 Kubernetes 1.35 中正式成为稳定版(GA)!

该功能正式进入稳定版是提升运行于 Kubernetes 上的工作负载资源效率与灵活性的重要里程碑。

什么是 In-Place Pod Resize?

过去,分配给 Pod 中容器的 CPU 和内存资源是不可变的。这意味着若要更改这些资源,必须删除并重新创建整个 Pod。对于有状态服务、批处理作业或对延迟敏感的工作负载而言,这是一种极具破坏性的操作。

In-Place Pod Resize 使 CPU 和内存的 requests 与 limits 变为可变,允许您在运行中的 Pod 内调整这些资源,且通常无需重启容器。

核心概念:

  • 期望资源:容器的 spec.containers[*].resources 字段现代表期望资源。对于 CPU 和内存,这些字段现已变为可变。
  • 实际资源:status.containerStatuses[*].resources 字段反映了当前为运行中容器配置的资源。
  • 触发资源调整:您可以利用新增的 resize 子资源,通过更新 Pod 规范中期望的 requests 和 limits 来发起调整请求。

如何开始使用原地 Pod 调整大小(In-place Pod Resize)?

官方文档提供了详细的使用说明与示例:调整分配给容器的 CPU 和内存资源(Resize CPU and Memory Resources assigned to Containers)。

这能为我带来什么帮助?

原地 Pod 调整大小是一项基础构建块,能够实现无缝的垂直自动扩缩容并提升工作负载效率。

  • 无中断调整资源:对延迟或重启敏感的工作负载可以在原地进行资源修改,且不会导致停机或状态丢失。
  • 更强大的自动扩缩容:自动扩缩器现已能够调整资源且影响更小。例如,基于此特性实现的 Vertical Pod Autoscaler (VPA) 的 InPlaceOrRecreate 更新模式已晋升至 Beta 阶段。该功能支持根据实际使用情况自动、无缝地调整资源,并将干扰降至最低。更多详情请参阅 AEP-4016。
  • 满足瞬时资源需求。对于暂时需要更多资源的工作负载,可快速进行调整。这使得 CPU Startup Boost(AEP-7862)等特性成为可能,应用可在启动期间请求更多 CPU,随后自动缩减。

以下是部分使用场景示例:

  • 需要根据玩家数量波动动态调整规模的游戏服务器。
  • 预先预热的工作节点,闲置时可缩小规模,在接收到首个请求时可迅速扩容。
  • 根据负载动态伸缩,以实现高效的 bin-packing。
  • 在启动时为 JIT 编译分配更多资源。

Beta(1.33)与 Stable(1.35)版本之间的变更

自 v1.33 推出初始 Beta 版以来,开发工作主要致力于稳定该功能,并根据社区反馈提升其易用性。以下是 Stable 版本的主要变更:

  • 内存限制调低 此前禁止降低内存限制。该限制现已解除,允许调低内存限制。为防止发生 OOM-kills,Kubelet 仅在当前内存使用量低于新的目标限制时才允许调整大小。但此检查为尽力而为,不作绝对保证。
  • 优先级调整 若节点没有足够资源接收所有调整请求,Deferred 调整将按以下优先级重新尝试:PriorityClass、QoS 类别、Deferred 持续时间,且较早提交的请求优先处理。
  • Pod 级资源(Alpha) 现已支持结合 Pod 级资源进行 In-Place Pod Resize。该功能由独立的特性门控控制,在 v1.35 版本中处于 Alpha 阶段。
  • 可观测性提升:新增了专门与 In-Place Pod Resize 关联的 Kubelet 指标和 Pod 事件,旨在帮助用户追踪和调试资源变更。

下一步计划?

In-Place Pod Resize 晋升至稳定阶段,为 Kubernetes 生态系统内的深度集成打开了大门。目前已有多个方向的进一步优化计划正在推进中。

与自动扩缩器及其他项目的集成

目前已计划与多款自动扩缩器及其他项目进行集成,旨在更大规模上提升工作负载效率。部分正在探讨的项目如下:

  • VPA CPU 启动增强(AEP-7862):允许应用程序在启动时请求更多 CPU,并在特定时间段后自动缩减。
  • VPA 对原地更新的支持(AEP-4016):VPA 对 InPlaceOrRecreate 的支持近期已晋升至 beta 阶段,最终目标是将该功能推向 stable 阶段。对 InPlace 模式的支持仍在开发中;请参阅此 pull request。
  • Ray autoscaler:计划利用 In-Place Pod Resize 提升工作负载效率。请参阅此 Google Cloud 博客文章了解更多详情。
  • Agent-sandbox “Soft-Pause”:正在探索利用 In-Place Pod Resize 以进一步优化延迟。请参阅此 Github issue 了解更多详情。
  • 运行时支持:Java 和 Python 运行时不支持无需重启即可调整内存。目前正与 Java 开发者进行公开讨论,请参阅该 bug。

如果您的项目能够通过与 in-place pod resize 集成获益,请通过反馈部分列出的渠道与我们联系!

功能扩展

目前,In-Place Pod Resize 在结合以下组件使用时被禁止:swap、静态 CPU Manager 以及静态 Memory Manager。此外,除 CPU 和内存外的其他资源仍不可变。随着社区需求反馈的不断增多,我们正考虑扩大所支持的功能和资源范围。

此外,还计划支持工作负载抢占;如果节点上没有足够的空间用于调整高优先级 Pod 的规格,我们的目标是启用相关策略,以自动驱逐低优先级 Pod 或对节点进行扩容。

稳定性提升

  • 解决 kubelet 与调度器之间的竞态条件。在 Pod 原地调整规格方面,kubelet 与调度器之间存在已知的竞态条件。我们正致力于在接下来的几个版本中解决这些问题。详情请参阅相关 Issue。
  • 更安全地降低内存限制。通过将内存使用量检查直接移至容器运行时内部,可以进一步提升 Kubelet 防止 OOM-kill 的尽力检查机制的安全性。详情请参阅相关 Issue。

提供反馈

若希望在此基础特性之上进一步开发,欢迎分享您关于如何改进和扩展该特性的反馈。您可以通过 Kubernetes #sig-node 和 #sig-autoscaling 社区相关的 GitHub Issue、邮件列表或 Slack 频道提交反馈。

感谢所有为让这一期待已久的特性成为现实而做出贡献的开发者!

  • ← 上一篇
  • 下一步 →
Last modified January 03, 2026 at 3:42 PM PST: Reorganize 2025 blog content (0979e97a89)

原文标题

Kubernetes 1.35: In-Place Pod Resize Graduates to Stable