写点什么

k8s 中资源限制 limit 和 request 的关系

作者:陈德伟
  • 2025-04-23
    浙江
  • 本文字数:673 字

    阅读完需:约 2 分钟

在 Kubernetes(k8s)中,resources 字段里的 requestslimits 是用来管理容器资源使用的两个关键参数。如果你在 YAML 配置中只设置了 limits 而没有设置 requests,会带来一些潜在的问题和影响,具体如下:



✅ 背景知识

resources:  limits:    cpu: "1"    memory: "512Mi"  requests:    cpu: "0.5"    memory: "256Mi"
复制代码


  • requests:调度时使用,告诉调度器「我需要的最小资源」。

  • limits:运行时强制限制,告诉 kubelet 「不能超过的资源上线」。



❗只设置 limits 不设置 requests 会发生什么?

  1. 调度器使用默认 requests(通常是 0)

  2. 如果你只设置了 limits,而不设置 requests,调度器会使用默认值(大多数情况下是 0)进行调度。

  3. 后果:Pod 可能会被调度到资源非常紧张的节点上,导致该节点资源过载或 OOM(Out of Memory)。

  4. 影响资源公平分配

  5. Kubernetes 的调度器依赖 requests 来做资源的负载均衡,如果设置不合理,就会影响整体资源调度的效率。

  6. Pod 可能被驱逐(Evicted)

  7. 当节点内存紧张时,Kubernetes 会优先驱逐 requests 小或为 0 的 Pod。

  8. 所以只设 limits 的 Pod 更容易被驱逐。

  9. 不利于 HPA(Horizontal Pod Autoscaler)

  10. 如果你使用了 HPA,它会依据 requests 来评估资源使用百分比。如果没设置 requests,可能导致 HPA 无法合理判断负载,缩放策略失效。



✅ 建议

始终 同时设置 requestslimits,并且合理估算请求和限制的差距,以便:


  • 避免资源挤兑

  • 提高调度效率

  • 降低 OOM 风险

  • 支持 HPA 等高级特性




如果使用的是 Java 10,还可以使用额外配置 -XX:MaxRAMPercentage。不过这个配置是软限制,不如 xmx/xms 配合 limit/request 更让人放心。

发布于: 刚刚阅读数: 3
用户头像

陈德伟

关注

还未添加个人签名 2018-04-26 加入

兴趣广而不精,从小爱玩游戏还是个手残,假装爱书这么多年还是拙于下笔。从事软件行业十几年也没有什么拿的出手的成就,只能安慰自己贵在坚持。《On Java》译者之一。

评论

发布
暂无评论
k8s中资源限制 limit 和 request 的关系_k8s_陈德伟_InfoQ写作社区