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 还是 2Core 的 100m+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
,那么只有它会占用多个核心。