当 CPU 限制被移除时,pod 中的 cpu.stat 指标将归零

问题描述 投票:0回答:1

我知道自 2017 年以来,CPU 限制和 cfs 配额的主题受到了很多关注,并且在 Kubernetes 上的多线程中,发布了内核修复等等。我希望在这里找到一些安慰,所以我很困惑,希望得到关于这个问题的帮助。

我们遇到了一些我们确实找不到任何原因的事情,也许这里有人知道。 我们正在检查一些限制问题,并遇到了设置 cpu 限制与未设置 cpu 限制的概念。 因此,我们决定对两者进行测试,看看哪种最适合我们。 我们拿了一个 Pod 并删除了它的限制 - 但我们发现 - 现在期间、配额和统计数据都是空的

cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
-1

cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000

cat /sys/fs/cgroup/cpu/cpu.stat
nr_periods 0
nr_throttled 0
throttled_time 0

当我们在 Pod 中运行 htop 时,我们清楚地看到 cpu 正在使用,当我们检查 /proc/stat 时 - 它充满了有关 cpu 的数据。

grafana 中的指标 -container_cpu_usage_seconds_total - 显示指标。 然而“container_cpu_cfs_throttled_periods_total”和“container_cpu_cfs_periods_total” - 对于同一个 Pod 来说是空的

当我们重新设置限制时,这些字段和文件就会被填充。 我们对此相当分阶段,因为这意味着我们无法监控对 CPU 没有任何限制的 Pod 上的任何潜在限制。

或者当这些值归零时是否有其他方法来监控节流?

这是设计使然吗?有人遇到过这个吗?

如有任何意见,我们将不胜感激,谢谢

即使 Pod 中的 CPU 限制被删除,我们仍然希望监控任何级别的限制周期,因为有些 Pod 可能有限制,有些则开启,有操作系统和内核。

**编辑 我非常清楚与 CPU 和限制相关的所有建议。我的问题是,如果协助监控的指标静态为 0,您将如何监控节流?正如我提到的,当您删除限制时,该指标不会填充。

kubernetes prometheus grafana cpu limit
1个回答
0
投票

一般来说,Pod 中的 CPU 限制导致限制是正常行为。如果您在 K8s 中配置 CPU 限制,它将设置周期和配额。如果容器中运行的进程达到限制,它将被抢占并必须等待下一个周期。它被节流了。 这就是您正在经历的效果,当 CPU 限制被移除时,限制为 0。

周期和配额算法不应被视为 CPU 限制,如果未达到,进程将不受限制。这种行为令人困惑,github 中也存在一个 K8s 问题。 here 给出的建议是不要为不应该被限制的 Pod 设置 CPU 限制。

在大多数情况下,您实际上不希望 CPU 限制,因为它们会阻止 pod 使用备用资源。有记录显示 Kubernetes 维护者 表示您不应该使用 CPU 限制,而应该只设置请求。这样 Pod 就可以自由使用备用 CPU,而不是让 CPU 保持空闲状态。

相比之下,即使您删除了该 pod 的 CPU 限制,其他 pod 仍然可以保证它们请求的 CPU。 CPU 限制仅影响备用 CPU 的分配方式。

© www.soinside.com 2019 - 2024. All rights reserved.