mon*_*mon 5 resources openshift docker kubernetes
阐明当限制设置远低于可用 CPU 时 K8S 容器 cpu 使用率的行为,并确认如何设置限制的理解是否正确。
我有一个2CPU的节点,因此2000m可以是上限。每个命名空间都设置了 LimitRange,将容器的 CPU 限制为 500m。
kind: LimitRange
metadata:
name: core-resource-limits
spec:
limits:
- default:
cpu: 500m
memory: 2Gi
defaultRequest:
cpu: 100m
type: Container
Run Code Online (Sandbox Code Playgroud)
即使有 2 个 CPU 可用(没有其他进程/容器等待)并且容器可运行,它也只能使用 0.5 个 CPU,而 1.5 个 CPU 将未被使用。它是否正确?
我相信我可以设置限制,例如可用2个CPU的75-80%,以更好地利用CPU资源。因为如果有多个容器试图占用比请求更多的 CPU,K8S 将根据文档(一些来自 OpenShift,但相信与 K8S 相同)根据每个容器的请求值在容器之间分配 CPU。它是否正确?
kind: LimitRange
metadata:
name: core-resource-limits
spec:
limits:
- default:
cpu: 1500m
memory: 2Gi
defaultRequest:
cpu: 100m
type: Container
Run Code Online (Sandbox Code Playgroud)
CPU 请求代表容器可能消耗的最小 CPU 量,但如果不存在 CPU 争用,则它可以使用节点上的所有可用 CPU。如果节点上存在 CPU 争用,CPU 请求会提供系统上所有容器的相对权重,以了解容器可以使用多少 CPU 时间。
Pod 中的每个容器都可以指定限制在节点上使用的 CPU 量。CPU 限制控制容器可以使用的最大 CPU 量,与节点上的争用无关。如果容器试图超过指定的限制,系统将限制该容器。这使得容器能够拥有一致的服务级别,而与调度到节点的 Pod 数量无关。
6% 的 CPU 意味着 6%(CPU 请求)的节点 CPU 时间预留给该 Pod。所以它保证它总是至少获得这个数量的CPU时间。如果仍然有剩余的 CPU 时间,它仍然可以突破 12%(CPU 限制)。
检查我的一个容器,我发现 Kubernetes 为它们设置了 CpuPeriod、CpuQuota。Docker 文档 ( https://docs.docker.com/engine/reference/run/ ) 提到了 CFS 文档 ( https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt ),并且从那里的信息来看,这些似乎都是硬限制
14.1.3。了解 CPU 请求如何影响 CPU 时间共享
但是,如果一个容器想要使用尽可能多的 CPU,而另一个容器在给定时刻处于空闲状态,则将允许第一个容器使用整个 CPU 时间(减去第二个容器使用的少量时间)容器(如果有)。毕竟,如果没有其他人使用所有可用的 CPU,那么使用它是有意义的,对吗?一旦第二个容器需要 CPU 时间,它就会得到它,并且第一个容器将被限制。
即使有 2 个 CPU 可用(没有其他进程/容器等待)并且容器可运行,它也只能使用 0.5 个 CPU,而 1.5 个 CPU 将未被使用。它是否正确?
所以这是正确的。
| 归档时间: |
|
| 查看次数: |
3673 次 |
| 最近记录: |