Pat*_*ouk 1 memory kubernetes docker-container kubernetes-pod
我的 Pod 中有两个容器 ( PodA
)
第一个容器 ( C1
) 有以下限制
Limits:
cpu: 2
memory: 1Gi Requests:
cpu: 100m
memory: 128Mi
Run Code Online (Sandbox Code Playgroud)
第二个容器 ( C2
) 没有指定请求/限制
我有以下问题
kubectl describe nodes
, a 的内存/CPU 请求/限制与 中的PodA
相同C1
。那是对的吗?C2
?是无界的吗?受限于 的限制PodA
(例如 的限制C1
)?C2
请求超过 1Gi 的内存会发生什么?容器是否会耗尽内存,导致整个 Pod 崩溃?或者只要节点有空闲内存,它就能获取更多内存吗?我尝试用谷歌搜索,但我看到的所有示例都为两个容器设置了资源限制
Kubernetes根据您是否添加了请求和限制将您的 Pod 置于服务质量类别中。
如果 Pod 中的所有容器都设置了限制,则该 Pod 属于Guaranteed
类别。
如果 pod 中至少有一个容器设置了请求(或限制),则该 pod 属于Burstable
该类。
如果没有为所有容器设置请求或限制,则 Pod 属于Best Effort
类别。
在您的示例中,您的 Pod 属于Burstable
类别,因为C2
没有设置限制。
这些请求和限制用于两种情况 - 调度和资源耗尽。
在调度过程中,会根据可用资源考虑请求来选择节点。limits
可能会被过度承诺,并且不会被考虑用于调度决策。
您可以在两种资源上指定本机请求和限制 - cpu 和内存
CPU 是一种可压缩资源,即,如果需要,内核可以通过分配更少的 CPU 时间来限制进程的 CPU 使用率。因此,如果其他进程空闲,则允许进程使用尽可能多的 CPU。如果另一个进程需要 cpu,操作系统可以限制使用更多 CPU 的进程的 cpu 时间。未使用的 cpu 时间将按照其请求的比例进行分配。如果您不希望这种无限 cpu 使用的行为,即您希望容器不超过特定阈值,则可以设置限制。
内存不是可压缩的资源。一旦分配给进程,内核就无法重新获得内存。因此,如果设置了限制,则如果进程尝试使用超过限制的内容,则会被 OOM 终止。如果没有设置限制,进程可以分配任意数量的内存,但如果内存耗尽,重新获得一些可用内存的唯一方法就是终止进程。这就是 QoS 等级的用武之地。类BestEffort
容器将是第一个被 OOM 杀死的。下一Burstable
类容器将在任何Guaranteed
类容器被杀死之前被杀死。在容器具有相同 QoS 类别的情况下,使用与其请求相比更高百分比内存的容器将被 OOM 终止。
从我通过 kubectl 描述节点看到的情况来看,PodA 的内存/CPU 请求/限制与 C1 中的相同。那是对的吗?
是的
C2 的内存/CPU 限制是多少?是无界的吗?受限于PodA的限制(例如C1的限制)?
CPU 作为可压缩资源对于所有容器来说都是无限制的(如果指定了限制,则达到限制)。当具有请求集的其他容器需要更多 CPU 时间时,C2 将受到限制。
#2 的后续 -> 如果 C2 请求超过 1Gi 的内存会发生什么?容器是否会耗尽内存,导致整个 Pod 崩溃?或者只要节点有空闲内存,它就能获取更多内存吗?
它可以获取想要的内存。但如果节点没有更多可用内存可分配给其他进程,它将是第一个被 OOM 杀死的节点。
归档时间: |
|
查看次数: |
2930 次 |
最近记录: |