首页/云/云与容器速查/requests/limits 与 QoS
Kubernetes68 条

requests/limits 与 QoS

requests 决定调度与 HPA 基准,limits 是硬上限:内存超限立即 OOMKilled,CPU 超限被限流(不杀进程)。两者组合决定 QoS 等级与驱逐优先级。

云与容器速查云更新于 2026-10-13

requests 与 limits 是什么

资源请求决定调度结果与水平扩缩容的基准,资源上限是运行时的硬边界:内存超过上限会被强制终止,CPU 超过上限会被限流而不会被杀。两者的组合还决定服务质量等级与驱逐优先级,因此只写其中一个往往会在容量或稳定性上留下问题。

基本信息

资源请求调度依据与利用率分母,同时影响服务质量等级
内存上限超限即被强制终止,退出码通常为一百三十七
CPU 上限超限被限流,延迟升高但进程不会被杀
服务质量等级请求与上限都设置且相等最高,其次是部分设置,全部不设置最低
经验比例内存请求与上限设得接近更稳,CPU 可以留出突发空间
默认行为只设上限不设请求时,请求会默认等于上限

典型使用场景

  • 稳定调度:给实例声明合理的资源请求,避免节点被超额分配
  • 防止单实例拖垮节点:用内存上限约束异常内存增长
  • 控制延迟抖动:为 CPU 密集服务设置合理上限与请求比例
  • 水平扩缩容基准:扩缩容按请求值计算利用率,请求写错会得出错误结论
  • 故障分析:结合是否被内存超限终止,快速区分崩溃与资源不足
  • 容量规划:把各工作负载的请求值加总,评估节点池是否需要扩容

字段行为对照

字段作用超限后果
CPU 请求调度与扩缩容基准不会超限,仅影响调度
CPU 上限运行时上限被限流,延迟升高但不被杀
内存请求调度依据不会超限,影响调度与等级
内存上限运行时上限被强制终止,退出码一百三十七
全部设置且相等服务质量最高等级资源紧张时最后被驱逐

资源配置示例

资源配置示例
resources:
  requests:
    cpu: 200m
    memory: 256Mi
  limits:
    cpu: 1000m
    memory: 512Mi
# 内存请求与上限设得接近更稳,CPU 留出突发空间减少限流
只写上限不写请求时请求会默认等于上限:调度水位被虚高占用,集群看起来资源不足,实际利用率却不高。
内存上限压得太紧的症状很典型:流量一抖就被强制终止,重启次数持续增长,日志里往往找不到明确异常。
CPU 上限设得过小不会报错,只会变慢:表现为没有错误但延迟持续偏高,排查时容易被当成代码性能问题。
扩缩容按请求值计算利用率:请求值偏离实际用量时,扩容会过早触发或迟迟不触发,容量与成本同时失衡。

配置时的判断依据

  • 按压测与线上观测值设置资源请求,而不是按峰值拍脑袋
  • 内存请求与上限设得接近更稳,减少被驱逐的概率
  • CPU 上限留出突发空间,避免高峰期被持续限流
  • 为关键服务设置更严格的资源约束,减少相互影响
  • 定期复核实际用量,长期偏离说明配置已经过时
  • 把资源请求纳入容量评估,避免节点被超额分配
资源配置调整后要观察一段时间再下结论:短时间内看不出效果,至少覆盖一个业务高峰周期再评估是否合理。

易错点

  • 内存上限压得过紧,流量抖动就触发强制终止,故障单里全是同一退出码
  • CPU 上限设得过小,进程被持续限流,表现为没有报错但极慢
  • 只写上限不写请求,调度水位虚高,集群容量被无谓消耗
  • 请求值长期偏离实际用量,扩缩容策略基于错误数据做决策
  • 所有工作负载都不设资源约束,单个异常实例拖垮整个节点

数据来源与参考

  • Kubernetes Docs:Resource Management
  • Kubernetes Docs:Pod QoS Classes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌