kubernetes pods 在 CPU 使用受政策限制时使用多少个内核?

How many cores do kubernetes pods use when it's CPU usage is limited by policy?

Kubernetes 允许限制 pod 资源使用。

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

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

我的 gunicorn worker's number formula 或 nginx worker 的编号等需要此计算。 在 gunicorn 文档中它说

Generally we recommend (2 x $num_cores) + 1 as the number of workers to start off with.

那么我应该使用 5 个工人吗? (我的节点有 2 个核心)。还是因为我的 pod 只分配了 200m cpu 并且我应该认为我的 pod 有 1 个核心?

TLDR: 当 cpu 的使用受到 kubernetes 限制时,pods 使用多少个内核?如果我 运行 top inside pod,我会看到 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,那么只有它会占用多个核心。