关于后端:在-Kubernetes-中应该如何设置-CPU-的-requests-和-limits

1次阅读

共计 1637 个字符,预计需要花费 5 分钟才能阅读完成。


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


在 Kubernetes 中,我应该如何设置 CPU 的 requests 和 limits?

热门答案包含:

  • 始终应用 limits !
  • 永远不要应用 limits,只应用 requests !
  • 都不必;能够吗?

让咱们深入研究它。

在 Kubernetes 中,您有两种办法来指定一个 pod 能够应用多少 CPU:

  1. Requests 通常用于确定均匀耗费。
  2. Limits 设置容许的最大资源数。

Kubernetes 调度器应用 requests 来确定 pod 应该调配到集群中的哪个节点。

因为调度器并不知道理论耗费(pod 尚未启动),它须要一个提醒。

但它并没有就此结束。

CPU requests 还用于将同一个节点上的 CPU 资源如何调配给不同的容器。

让咱们看一个例子:

  • 一个节点只有一个 CPU。
  • 容器 A requests 0.1 个 vCPU。
  • 容器 B requests 0.2 个 vCPU。

当两个容器都尝试应用 100% 的可用 CPU 时会产生什么?

因为 CPU 申请不限度耗费,因而两个容器都将应用所有可用的 CPU。

然而,因为容器 B 的申请与另一个相比减少了一倍,因而最终的 CPU 调配是: 容器 1 应用 0.3vCPU,另一个应用 0.6vCPU(双倍数量)。

Requests 实用于:

  • 设置基准(给我至多 X 数量的 CPU)。
  • 设置 pod 之间的关系(这个 pod A 应用的 CPU 是另一个的两倍)。

但不影响硬性限度。

为此,您须要 CPU limits。

设置 CPU limits 时,您定义了 period 周期和 quota 配额。

例如:

  • 周期:100000 微秒 (0.1s)。
  • 配额:10000 微秒 (0.01s)。

我只能每 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 的两倍,您能够设置:

  • Request A:1 个单元
  • Request B:2 个单位

如果容器应用 100% CPU,它们将依据它们的权重 (1:2) 重新分配 CPU。

更好的办法是监控应用程序并得出均匀 CPU 利用率。

您能够应用现有的监控基础设施来实现此操作,或者应用 Vertical Pod Autoscaler 来监督并报告均匀申请值。

你应该如何设置 limits?

  1. 您的利用可能曾经有“硬性”限度。(例如单线程的利用即便调配了 2 个核,也最多只应用 1 个核)。
  2. 你能够设置:limit = 99th 分位数 + 30–50%。

您应该剖析应用程序(或应用 VPA)以取得更具体的答案。

您应该始终设置 CPU requests 吗?

相对没错。

这是 Kubernetes 中的规范良好实际,可帮忙调度器更无效地调配 pod。

您应该始终设置 CPU limits 吗?

这有点争议,但总的来说,我是这么认为的。

你能够进行更深刻的理解:https://dnastacio.medium.com/why-you-should-keep-using-cpu-limits-on-kubernetes-60c4e50dfc61

其它的一些相干链接:

  • https://learnk8s.io/setting-cpu-memory-limits-requests
  • https://medium.com/@betz.mark/understanding-resource-limits-i…
  • https://nodramadevops.com/2019/10/docker-cpu-resource-limits
正文完
 0