1、概 述
在 Kubernetes 中,我应该如何设置 CPU 的 requests 和 limits?
热门答案包括:
-
始终使用 limits !
-
永远不要使用 limits,只使用 requests !
-
都不用;可以吗?
2、让我们深入研究它
在 Kubernetes 中,您有两种方法来指定一个 pod 可以使用多少 CPU:
-
Requests 通常用于确定平均消耗。
-
Limits 设置允许的最大资源数。
Kubernetes 调度器使用 requests 来确定 pod 应该分配到集群中的哪个节点。
由于调度器并不知道实际消耗(pod 尚未启动),它需要一个提示。
但它并没有就此结束。
CPU requests 还用于将同一个节点上的 CPU 资源如何分配给不同的容器。
3、让我们看一个例子:
-
一个节点只有一个 CPU。
-
容器 A requests 0.1 个 vCPU。
-
容器 B requests 0.2 个 vCPU。
当两个容器都尝试使用 100% 的可用 CPU 时会发生什么?
图2 :两个容器的 CPU 使用率
由于 CPU 请求不限制消耗,因此两个容器都将使用所有可用的 CPU。
但是,由于容器 B 的请求与另一个相比增加了一倍,因此最终的 CPU 分配是:容器 1 使用 0.3vCPU,另一个使用 0.6vCPU(双倍数量)。
4、Requests 适用于:
-
设置基准(给我至少 X 数量的 CPU)。
-
设置 pod 之间的关系(这个 pod A 使用的 CPU 是另一个的两倍)。
但不影响硬性限制。
为此,您需要 CPU limits。
5、设置 CPU limits 其实是定义了 period 周期和 quota 配额
例如:
-
周期:100000 微秒 (0.1s)。
-
配额:10000 微秒 (0.01s)。
我只能每 0.1 秒使用 CPU 0.01 秒。
这也缩写为“100m”。
6、如果你的容器有硬限制并且想要更多的 CPU,它必须等待下一个周期。
您的进程受到限制。
那么您应该在 Pod 中如何设置 CPU requests 和 limits?
一种简单(但不准确)的方法是将最小的 CPU 单元计算为:
REQUEST = NODE_CORES * 1000 / MAX_NUM_PODS_PER_NODE
对于 1 个 vCPU 节点和 10 个 Pod ,最小单元就是 1 * 1000 / 10 = 100Mi
。
7、将最小单位或其乘数分配给您的容器。
将 CPU 请求分配给 Pod 和容器
例如,如果您不知道 Pod A 需要多少 CPU,但您确定它是 Pod B 的两倍,您可以设置:
-
Request A:1 个单元
-
Request B:2 个单位
如果容器使用 100% CPU,它们将根据它们的权重 (1:2) 重新分配 CPU。
8、更好的方法是监控应用程序并得出平均 CPU 利用率。
您可以使用现有的监控基础设施来完成此操作,或者使用 Vertical Pod Autoscaler 来监视并报告平均请求值。
你应该如何设置 limits?
-
您的应用可能已经有“硬性”限制。(例如单线程的应用即使分配了 2 个核,也最多只使用 1 个核)。
-
你可以设置:limit = 99th 分位数 + 30–50%。
您应该分析应用程序(或使用 VPA)以获得更详细的答案。
9、您应该始终设置 CPU requests 吗?
绝对没错。
这是 Kubernetes 中的标准良好实践,可帮助调度器更有效地分配 pod。
您应该始终设置 CPU limits 吗?
这有点争议,我是这么认为的。文章来源:https://www.toymoban.com/news/detail-587793.html
你可以进行更深入的了解:https://dnastacio.medium.com/why-you-should-keep-using-cpu-limits-on-kubernetes-60c4e50dfc61文章来源地址https://www.toymoban.com/news/detail-587793.html
到了这里,关于Kubernetes中设置 CPU 的 requests 和 limits详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!