0
假设有一个集群节点,有 4 个 CPU 核心。
它正在运行两个 pod。每个 pod 将 CPU 要求设置为:500m,但 CPU 限制设置为 4000m。
运行kubectl
describe node 告诉我 CPU 限制为 8(200%)
我知道它声称 200%,因为我有两个 pod,每个 pod 都将其 CPU 限制设置为 4 个 CPU 核心。
这仅仅是语义问题还是存在潜在问题?我的意思是,如果两个 pod 都需要爆发到 3 个 CPU 核心(低于每个 pod 的限制),这在物理上是不可能的,它们必须满足于更少的数量。
所有 pod 限制的总和是否存在潜在问题,超过了其主机节点的 CPU 能力?或者只是指示了所要求的 CPU 限制,知道它可能无法满足这一要求——毕竟,pod 可能不知道彼此在同一个节点中。
答案1
是的,限制是该节点 CPU 的 200%。是的,这是过度承诺,您有 4 个 CPU,而不是 8 个。
CPU 很容易受到限制,调度程序给您的时间片较少。摘自 Google 关于资源请求和限制的帖子:
如果某个节点上所有容器限制的总和实际上高于机器上可用的资源,该怎么办?
此时,Kubernetes 进入一种称为“过度承诺状态”事情开始变得有趣了。因为 CPU 可以压缩,所以 Kubernetes 将确保您的容器获得它们请求的 CPU,并限制其余的 CPU。内存无法压缩,因此 Kubernetes 需要开始决定在节点内存耗尽时终止哪些容器。
这是一个性能和容量规划问题。一个请求为 500m 但限制为 4000m 的 Pod 可能会爆发到其最低调度量的 8 倍。这可能是性能上的重大偏差,具体取决于资源可用性。如果这很糟糕,则取决于您是否想要可预测表现或机会主义的容量的使用。
Pod 不需要知道在节点上要安排什么才能影响容量规划。
- 对于真正的单线程容器来说,超过 1000 米的限制是没有意义的。
- 当实际消耗量为 1200 米时,限制为 4000 米是过于贪婪了。
总体而言,超额认购率的上升往往会使集群规模的合理化和性能的可预测性变得更加困难。也许很难判断将节点数增加一倍是否会提高性能,还是有人认为节点数越多越好,而这都是没有证据的。