Requests 参与放置,limits 约束资源消耗
Requests 参与放置和资源共享,limits 约束运行时消耗。它们是有关联的输入,不是对应用性能的一套通用下限与上限保证。应结合负载行为、争用风险和恢复要求选择,并查看准入后的 Pod,因为默认值与策略可能改变清单里提交的资源值。先区分记账、实际使用和执行约束,才能解释配置为什么影响行为。 默认值也是契约的一部分 某资源只有 limit、没有 request 时,如果准入没有提供另一请求,Kubernetes 会把限制复制为请求。因此,只配 limit 通常不是零调度成本。LimitRange 默认值与 ResourceQuota 检查也会影响准入。解释 Pod 为什么 Pending 之前,应读取实际保存的两张资源映射,不能仅凭源文件中某一字段缺失进行判断。 Request 不会预先分配应用的物理内存,也不必然独占 CPU 核心。CPU 请求参与调度及争用时的相对份额。没有 CPU limit 的容器可以利用超过请求的空闲 CPU,但节点容量、祖先约束和竞争负载仍然构成边界。省略限制可能是有意选择,应配套明确容量和争用策略,而不是简单认定只配一边必然错误。 Linux 上 CPU limit 通常通过带宽节流执行,耗尽配额本身不会直接杀死进程。但等待可能增加延迟、触发应用超时或影响探针。整机 CPU 平均值低,也不能排除某个上限很紧的容器正在频繁节流。要比较对应时间窗口的需求、配额和等待,而不是拿整机平均值替代容器约束。 内存具有不同失败行为 内存限制不是 CPU 那种周期额度。内核可以回收记账内存,并在无法满足约束时触发控制组 OOM;它是响应实际压力的机制,不是看板曲线越线就立刻杀死进程。节点压力与应用自身失败又是另外的机制。应区分容器 OOM、节点驱逐和普通进程终止,避免给所有重启使用同一种解释。 容器记账内存不只包含托管堆。原生分配、线程栈、文件相关内存以及内存型卷都可能参与。进程 RSS 和应用堆指标很有用,却都不等于控制组全部计费字节。应依据运行时与内核检查合适的记账视图,并考虑采样间隔可能漏掉的短峰值,不能只把堆参数与 limit 作一次简单大小比较。 ...