Kubernetes中容器CPU用量超出request但低于limit会发生什么?
Kubernetes容器CPU用量超出requests但低于limits的行为说明
运行机制
requests的核心作用是调度依据+资源优先级权重:Kubernetes调度Pod时仅会选择剩余可分配CPU ≥ 该Pod所有容器CPU requests总和的节点,只要节点CPU资源有富余,容器可以自由使用超出requests的CPU资源,只要不触及limits阈值就不会触发CPU限流。- 当节点无CPU资源争抢时(所有运行Pod的总CPU需求 ≤ 节点可分配CPU总量),容器可以用到接近limits的CPU值,不会有任何性能损耗。
- 当节点出现CPU资源争抢时,Kubernetes会基于
cpu.shares机制分配CPU时间片,每个容器的requests值就是自己的权重:比如同节点两个容器A、B的CPU requests分别为1核、2核,争抢场景下B能拿到的CPU时间是A的2倍。此时如果你的容器需要的CPU超过自身requests值,就无法拿到足够的时间片,会出现性能下降。
性能问题判断
仅在节点出现CPU资源争抢的场景下才会出现性能问题,具体表现为:
- 应用响应延迟升高
- CPU密集型任务的执行时间变长
- 高并发场景下请求排队甚至超时
如果节点CPU资源始终有富余,这种用量区间完全不会影响应用性能。
常见配置风险
很多业务会选择将CPU requests设置远低于limits(比如requests设0.1核,limits设8核),这种配置在节点资源充裕时没问题,一旦出现资源争抢,容器最多只能拿到和requests匹配的CPU资源,会出现远低于预期的性能表现,生产环境不建议设置requests和limits差值过大。
内容的提问来源于stack exchange,提问作者user2962698
相关产品推荐
相关产品推荐

