当一个 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 资源限制没有超过,而单个容器的资源限制超过了,会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章