kubectl top pods -l app=api kubectl drain node-3 --ignore-daemonsets --delete-emptydir-data
容量表写的是单机 3000 QPS 乘 6 台等于 18000。实际压到 12000 时挂掉一台,剩余 5 台立刻全部超时,QPS 掉到 0。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:按满打满算的容量没有留故障余量,一台挂掉后剩余机器要接 120% 的流量。连接数和线程池都按均值配的,峰值一来就没有缓冲。扩容速度跟不上流量转移的速度。
围绕「容量冗余系数」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
处理上按这个顺序:容量按 N+1 计算 单机水位压到 60% 以下;挂一台的故障场景也做一次压测;自动扩容的触发阈值和冷却时间一起配;把单机最大能力和日常水位分开记录。
确认没问题再收工,摘掉一台后剩余实例 P99 上浮不超过 30%,没有出现超时。
