当一个 pod 资源限制没有超过,而单个容器的资源限制超过了,会发生啥?

Posted

技术标签:

【中文标题】当一个 pod 资源限制没有超过,而单个容器的资源限制超过了,会发生啥?【英文标题】:What happens when a pod resource limit is not exceeded but a single container resource limit is?当一个 pod 资源限制没有超过,而单个容器的资源限制超过了,会发生什么? 【发布时间】:2021-06-11 14:38:20 【问题描述】:

我正在搜索有关 kubernetes 请求和限制的特定信息,但仍然没有找到答案,或者只是不太了解。假设我为单个 pod 定义了两个容器 A 和 B,它们都有资源限制和请求:

答: 内存要求:1Gi 内存限制:2Gi 乙: 内存要求:1Gi 内存限制:2Gi

因此,我们的 PoD 限制为 4Gi(总计)。假设 A 容器超过了限制(比如 +1Gi),但 B 只消耗了 64Mi。所以,我的问题是:

    吊舱会发生什么?它被驱逐了吗? 容器A重启了吗? 是否允许容器 A 使用 B 的可用 RAM?

谢谢!

【问题讨论】:

【参考方案1】:

吊舱会发生什么?被驱逐了吗?

如果超过了容器的内存限制,内核的 OOM 杀手会被调用并终止容器的进程。然后 Pod 在同一个节点上启动一个新容器。

(CPU 限制使用不同的机制(CFS 带宽控制)来限制进程的 CPU 周期而不是终止进程。)

容器A重启了吗?

是的。

是否允许容器 A 使用 B 的可用 RAM?

每个容器的内存都是单独跟踪的。它们没有汇集到同一个限制中。

【讨论】:

【参考方案2】:

只是补充一些细节

内存请求:是否为容器预留的内存,无论是否用完。

内存限制:是这个容器应该使用的最大内存的限制。所以当容器内存请求超过时,是否分配取决于在那个时间点运行该容器的机器上可用的空闲内存

根据我的理解回答您的问题:

如果容器 A 达到其 2GI 的内存限制,它 OOMed 并且这将重新启动容器。

如果容器 A 超过它的 1GI 内存请求,它会尝试从机器的可用内存中获取所需的内存(最大到设置的限制)

希望这能回答您的疑问

【讨论】:

感谢您的回答!然后,我知道只有容器 A 被重新启动,以防它超过其限制,并且 POD 不会从节点中逐出。此外,容器 B 应保持不变。

以上是关于当一个 pod 资源限制没有超过,而单个容器的资源限制超过了,会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

1-1 分配内存资源给容器和POD

K8S中Pod的进阶(资源限制和探针)

Pod 资源限制

Pod 资源限制

Pod 资源限制

Kubernetes 系列K8S 进阶 容器和 Pod 分配内存资源