元鉴
返回中文阅读流

Kubernetes Blog

Kubernetes v1.36:Pod 级资源的原地垂直扩缩容晋级 Beta

继相关功能在 v1.34、v1.35 推进后,Pod 级资源原地垂直扩缩容在 Kubernetes v1.36 晋级 Beta,并默认启用。

中文内容

已翻译official company source英文原文2026-04-30

Kubernetes v1.36:Pod 级资源的原地垂直扩缩容晋级 Beta

By Narang Dixita Sohanlal (Google) | Thursday, April 30, 2026

继 Pod-Level Resources 在 v1.34 晋级 Beta、In-Place Pod Vertical Scaling 在 v1.35 达到通用可用(GA)之后,Kubernetes 社区很高兴宣布,In-Place Pod-Level Resources Vertical Scaling 已在 v1.36 晋级 Beta!

该功能现在通过 InPlacePodLevelResourcesVerticalScaling 特性门控默认启用。它允许用户为正在运行的 Pod 更新聚合的 Pod 资源预算(.spec.resources),通常无需重启容器。

为什么需要 Pod 级原地调整大小?

Pod 级资源模型允许容器共享一个统一的资源池,从而简化了复杂 Pod(例如带有 sidecar 的 Pod)的管理。在 v1.36 中,你现在可以动态调整这个聚合边界。

这对于未定义单独限制的容器所在的 Pod 尤其有用。这些容器会自动扩展其有效边界,以适配新调整后的 Pod 级尺寸,使你能够在需求高峰期扩展共享资源池,而无需手动逐个容器重新计算。

资源继承与 resizePolicy

当发起 Pod 级调整大小时,Kubelet 会将该变更视为每个从 Pod 级预算继承限制的容器的调整大小事件。为确定是否需要重启,Kubelet 会参考各个容器内定义的 resizePolicy:

  • 非破坏性更新:如果容器的 restartPolicy 设置为 NotRequired,Kubelet 会尝试通过 Container Runtime Interface(CRI)动态更新 cgroup 限制。
  • 破坏性更新:如果设置为 RestartContainer,容器将被重启,以安全地应用新的聚合边界。
注意:目前,Pod 级别不支持 resizePolicy。Kubelet 始终依据各个容器的设置来决定更新能否原地应用,还是需要重启。

在此场景中,一个 Pod 被定义为具有 2 个 CPU 的 Pod 级限制。由于各个容器未定义自己的限制,它们共享这个总资源池。

1. 初始 Pod 规范

apiVersion: v1
kind: Pod
metadata:
  name: shared-pool-app
spec:
  resources: # Pod-level limits
    limits:
      cpu: "2"
      memory: "4Gi"
  containers:
  - name: main-app
    image: my-app:v1
    resizePolicy: [{resourceName: "cpu", restartPolicy: "NotRequired"}]
  - name: sidecar
    image: logger:v1
    resizePolicy: [{resourceName: "cpu", restartPolicy: "NotRequired"}]

2. 调整大小操作

要将 CPU 容量翻倍至 4 个 CPU,请使用 resize 子资源应用补丁:

kubectl patch pod shared-pool-app --subresource resize --patch \
  '{"spec":{"resources":{"limits":{"cpu":"4"}}}}'

节点级现实:可行性与安全性

应用调整大小补丁只是第一步。Kubelet 会执行多项检查,并遵循特定顺序以确保节点稳定性:

1. 可行性检查

在准许调整大小之前,Kubelet 会验证新的聚合请求是否适合 Node 的可分配容量。如果 Node 已超额提交,该调整不会被忽略;相反,PodResizePending 条件会反映 Deferred 或 Infeasible 状态,立即反馈为什么“包络”尚未扩大。

2. 更新顺序

为防止资源“超调”,Kubelet 会按特定顺序协调 cgroup 更新:

  • 增加时:先扩展 Pod 级 cgroup,在扩大各个容器 cgroup 之前先创建“空间”。
  • 减少时:先限制容器 cgroup,随后才缩小聚合的 Pod 级 cgroup。

可观测性:跟踪调整大小状态

随着该功能进入 Beta,Kubernetes 使用 Pod Conditions 来跟踪调整大小的生命周期:

  • PodResizePending:spec 已更新,但 Node 尚未准许该变更(例如由于容量原因)。
  • PodResizeInProgress:Node 已准许调整大小(status.allocatedResources),但变更尚未完全应用到 cgroup(status.resources)。
status:
  allocatedResources:
    cpu: "4"
  resources:
    limits:
      cpu: "4"
  conditions:
  - type: PodResizeInProgress
    status: "True"

约束与要求

  • 仅限 cgroup v2:这是准确执行聚合限制所必需的。
  • CRI 支持:需要支持 UpdateContainerResources CRI 调用的容器运行时(例如 containerd v2.0+ 或 CRI-O)。
  • 特性门控:需要 PodLevelResources、InPlacePodVerticalScaling、InPlacePodLevelResourcesVerticalScaling 和 NodeDeclaredFeatures。
  • 仅限 Linux:目前仅适用于基于 Linux 的节点。

下一步是什么?

随着我们迈向通用可用(GA),社区正专注于 Vertical Pod Autoscaler(VPA)Integration,使 VPA 能够发出 Pod 级资源建议,并自动触发原地执行。

开始使用并提供反馈

我们鼓励你测试此功能,并通过标准 Kubernetes 沟通渠道提供反馈:

  • 正文:Slack:#sig-node
  • 邮件列表
  • 开放社区 Issues/PRs
  • ← 上一篇
  • 下一篇 →
Last modified May 02, 2026 at 10:19 AM PST: Minor fix (e389a458df)

原文标题

Kubernetes v1.36: In-Place Vertical Scaling for Pod-Level Resources Graduates to Beta