当 CPU 使用率受到策略限制时,kubernetes Pod 使用多少个内核?



Kubernetes允许限制pod资源的使用。

requests:
  cpu: 100m
  memory: 128Mi
limits:
  cpu: 200m   # which is 20% of 1 core
  memory: 256Mi

假设我的 kubernetes 节点有 2 个核心。我运行这个 pod 的 CPU 限制:在这个节点上 200m。在这种情况下,我的 Pod 会使用底层节点 1Core 的 200m 还是 2Core100m+100m

我的枪角兽工人的数字公式或nginx工人的数字等都需要这个计算。在枪角兽文献中,它说

通常我们建议 (2 x $num_cores) + 1 作为工作线程数 首先。

那么我应该使用 5 个工人吗?(我的节点有 2 个内核)。或者这甚至无关紧要,因为我的 pod 只分配了 200m CPU,我应该考虑我的 pod 有 1 个核心?

TLDR:当 Pod 的 CPU 使用率受到 kubernetes 的限制时,Pod 会使用多少个内核?如果我在 pod 内部运行top,我会看到 2 个内核可用。但我不确定我的应用程序使用的是这个 2 核的 10%+10% 还是 1 核的 20%。

它将限制为一个核心的 20%,即 200m。此外,limit意味着一个 Pod 最多可以接触那么多的 CPU,而不是更多。因此,Pod CPU 利用率并不总是达到极限。

群集的总 CPU 限制是群集中存在的所有节点使用的核心总数。

如果您有一个 2 节点集群,并且第一个节点有 2 个核心,第二个节点有 1 个核心,则 K8s CPU 容量将为 3 个核心(2 核 + 1 核)。如果您有一个请求 1.5 个核心的 pod,则不会将其调度到第二个节点,因为该节点的容量只有 1 个核心。相反,它将调度到第一个节点,因为它有 2 个内核。

CPU 以称为毫核为单位进行测量。群集中的每个节点侦测操作系统以确定节点上的 CPU 内核数,然后将该值乘以 1000 以表示其总容量。例如,如果一个节点有 2 个内核,则该节点的 CPU 容量将表示为 2000m。如果你想使用单个核心的 1/10,你可以将其表示为 100m。

因此,如果您在集群中提供了 200m 个核心,那么它将坚持使用一个核心并占用该核心的 20%。现在,如果您为另一个 pod 提供了 1.5m ,那么只有它会占用多个核心。

最新更新