已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
8 年嵌入式出身,习惯了"资源就是钱"——MCU 上 512KB RAM 每一字节都要算清楚,超了直接 hard fault,没有"再给点"的余地。转 K8s 运维后最不适应的一点:调度器按 requests 装箱,但 requests 和"真实峰值用量"之间可以差好几倍——这个倍数(超卖率 / overcommit ratio)到底敢压到多少,我至今没有答案。
具体场景:K8s 1.28.9 + cgroup v2,约 40 节点混合集群,同节点混部在线 API(Java/Go 无状态)+ 少量批处理。现在全量 Pod 的 cpu.requests 加起来约为节点可分配 CPU 的 70%~85%(即超卖率约 1.2~1.4×),内存 requests 合计约节点的 80%。这个数当初是"抄"来的,从没被认真论证过。
cpu.pressure(PSI)spike、部分 Pod 被 CFS throttling(cpu.stat 的 nr_throttled 涨),P99 抖动可复现。memory.events 的 high/oom_kill 边缘,驱逐(eviction)和 node-pressure 触发时没有提前量,事后才看到。container_cpu_cfs_throttled_seconds_total / container_cpu_cfs_periods_total 做 throttling 率告警,能抓到热点 Pod,但只能事后看到"谁被卡了",不能事前回答"超卖率该设多少"。PSI(cpu.pressure.avg10)做压力预警,比 OOM 早一些,但阈值全是拍的,不同负载(在线 vs 批处理)没法共用一个数。