【问题标题】:Is it possible to enforce a hard memory limit on pods?是否可以对 pod 实施硬内存限制?
【发布时间】:2022-01-18 13:13:53
【问题描述】:
容器可以超出其内存请求 [...]。如果 Container 分配的内存超过其限制,则该 Container 将成为终止的候选者。
来自the documentation 我了解到设置资源限制不能限制 pod 的内存使用量。
我有一个容器,它总是会用完所有可用的内存,但也可以使用更少量的内存。有什么方法可以为运行容器的 pod 的可用内存量设置硬限制?
既然是is possible in Docker我希望Kubernetes也有办法实现这个,但是我没找到办法。
【问题讨论】:
标签:
kubernetes
kubernetes-pod
docker-container
【解决方案1】:
标准的request 和limits 是可能的。先看official documentation page:
当您指定Pod 时,您可以选择指定Container 需要多少每个资源。最常见的指定资源是 CPU 和内存 (RAM);还有其他的。
当您为 Pod 中的容器指定资源 request 时,调度程序会使用此信息来决定将 Pod 放置在哪个节点上。当您为 Container 指定资源 limit 时,kubelet 会强制执行这些限制,以便正在运行的容器不允许使用超过您设置的限制的资源。 kubelet 还至少保留了该系统资源的 request 量,专门供该容器使用。
在 kubernetes 中,如果您想专门为给定的容器保留最少的内存量,您应该使用request。另一方面,如果您想强制容器不能使用超过您指定的内存,则必须使用limit。
这是一个例子:
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 500m
memory: 2Gi
另请参阅this great article,了解如何在 Kubernetes 中设置正确的请求和限制。
【解决方案2】:
正常的请求和限制应该可以工作。文档可能具有误导性。 Pod 不会超出内存限制,如果他们尝试这样做会导致 OOM 和崩溃(重新启动)。