我知道自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 -显示指标。但同一pod的“container_cpu_cfs_throttled_periods_total”和“container_cpu_cfs_periods_total "为空
当我们把限制放回去的时候,那些字段和文件会被填充。我们对此非常的分阶段,因为这意味着我们不能监控任何对CPU没有任何限制的pod上的潜在限制。
或者是否有其他方法在这些值归零时监视节流?
这是设计出来的吗?有没有人遇到过?
任何输入将不胜感激,谢谢
即使pod中的CPU限制被删除,我们仍然希望在任何级别上监控节流周期,因为一些pod可能有限制,而另一些则是操作系统和内核。
**edit我很清楚与CPU和限制有关的任何和所有建议。我的问题是,如果有助于监控的指标静态为0,您将如何监控节流?正如我所提到的,当您删除限制时,指标不会填充。
1条答案
按热度按时间klsxnrf11#
通常情况下,pod中的CPU Limits导致节流是正常的行为。如果您在K8中配置了CPU Limits,它将设置周期和配额。如果在容器中运行的进程达到了限制,它将被抢占并必须等待下一个周期。它将被节流。所以这就是您正在体验的效果,当CPU Limits被移除时,节流为0。
周期和配额算法不应该被认为是CPU限制,如果没有达到,进程将被取消限制。这种行为令人困惑,在github.中也存在K8问题here给出的建议是不要为不应该被限制的pod设置CPU限制。
实际上,在大多数情况下,你并不想要CPU限制,因为它们会阻止Pod使用空闲资源。有Kubernetes maintainers记录说你不应该使用CPU限制,只应该设置请求。这样Pod就可以自由使用空闲CPU,而不是让CPU保持空闲。
相反,即使您取消了此Pod的CPU限制,其他Pod仍然保证其请求的CPU。CPU限制只影响如何分配空闲CPU。