文本翻译自: https://itnext.io/cpu-limits-and-requests-in-kubernetes-fa9d55948b7c

在 Kubernetes 中,我应该如何设置 CPU 的 requests 和 limits?
热门答案包括:
让我们深入研究它。
在 Kubernetes 中,您有两种方法来指定一个 pod 可以使用多少 CPU:
Kubernetes 调度器使用 requests 来确定 pod 应该分配到集群中的哪个节点。
由于调度器并不知道实际消耗(pod 尚未启动),它需要一个提示。
但它并没有就此结束。

CPU requests 还用于将同一个节点上的 CPU 资源如何分配给不同的容器。
让我们看一个例子:
当两个容器都尝试使用 100% 的可用 CPU 时会发生什么?

由于 CPU 请求不限制消耗,因此两个容器都将使用所有可用的 CPU。
但是,由于容器 B 的请求与另一个相比增加了一倍,因此最终的 CPU 分配是:容器 1 使用 0.3vCPU,另一个使用 0.6vCPU(双倍数量)。

Requests 适用于:
但不影响硬性限制。
为此,您需要 CPU limits。
设置 CPU limits 时,您定义了 period 周期和 quota 配额。
例如:
我只能每 0.1 秒使用 CPU 0.01 秒。
这也缩写为“100m”。

如果你的容器有硬限制并且想要更多的 CPU,它必须等待下一个周期。
您的进程受到限制。

那么您应该在 Pod 中如何设置 CPU requests 和 limits?
一种简单(但不准确)的方法是将最小的 CPU 单元计算为:
REQUEST = NODE_CORES * 1000 / MAX_NUM_PODS_PER_NODE
对于 1 个 vCPU 节点和 10 个 Pod ,最小单元就是 1 * 1000 / 10 = 100Mi。
将最小单位或其乘数分配给您的容器。

例如,如果您不知道 Pod A 需要多少 CPU,但您确定它是 Pod B 的两倍,您可以设置:
如果容器使用 100% CPU,它们将根据它们的权重 (1:2) 重新分配 CPU。

更好的方法是监控应用程序并得出平均 CPU 利用率。
您可以使用现有的监控基础设施来完成此操作,或者使用 Vertical Pod Autoscaler 来监视并报告平均请求值。
你应该如何设置 limits?
您应该分析应用程序(或使用 VPA)以获得更详细的答案。

您应该始终设置 CPU requests 吗?
绝对没错。
这是 Kubernetes 中的标准良好实践,可帮助调度器更有效地分配 pod。
您应该始终设置 CPU limits 吗?
这有点争议,但总的来说,我是这么认为的。
你可以进行更深入的了解:https://dnastacio.medium.com/why-you-should-keep-using-cpu-limits-on-kubernetes-60c4e50dfc61
其它的一些相关链接:
原文作者:系统架构师Go;如有侵权,请联系管理员删除。