Kubernetes 免重启扩缩 Pod:进程未必察觉
来源:dev.to — 2026-09-08
📋 概述
就地扩缩容(in-place pod resize)在 Kubernetes 1.35 转正,网上文章讲的都是同一套——patch resize 子资源、看 pod 没重启、感觉良好。作者却关心 cgroup 在进程脚下被改动时容器内的进程究竟看到了什么:JVM 只在启动时定一次堆大小,他找不到任何查过这件事的人。于是他在 1.37 上搭 kind 集群,放上 Node 22 与 Java 21 两个应用,在压测运行时扩缩它们。结论是 CPU 一侧名副其实地好,内存一侧才是看点:JVM 抱着旧堆,宁可带着 2 GiB 富余死掉。
🔑 核心要点
- CPU 扩缩是真的:把 200m 限制提到两核后,轮询 cpu.max 显示 patch 返回后 0.27 秒即生效、重启计数仍为零,压测吞吐涨到三倍、p99 从 1.5s 掉到 420ms。
- 但 p50 的 210ms 不是巧合——Node 是单线程进程,拿到两核也只用一个,扩 CPU 只对单线程进程帮到恰好一个核,「给它更多 CPU」到一核即止。
- 内存一侧的坑:JVM 只在启动时定一次堆,cgroup 上调后它仍抱旧堆,作者观察到它在尚有 2 GiB 富余的情况下就因内存被拒而崩溃——扩了资源进程却毫无察觉。
💡 金句
The CPU half of the story is as good as advertised. The memory half is where it gets interesting.
👍 0
👎 0
← 返回 dev.to 首页