如何在Kubernetes中使用Prometheus获得pod的(milli)核心CPU使用率?

Ale*_*lex 7 kubernetes prometheus

我运行了v1.9.2Kubernetes 的自定义设置,并使用Prometheus抓取了各种指标v2.1.0。除其他外,我抓了kubeletcAdvisor指标。

我想回答这个问题:“ 如何通过定义的CPU资源的多少requestslimits?在我的部署实际上是在使用中(毫)内核方面荚(及其容器)

有许多可用的刮除指标,但并非如此。也许可以通过以秒为单位的CPU使用时间来计算,但是我不知道如何。

我一直在考虑这是不可能的-直到一个朋友告诉我她在集群中运行Heapster时,内置Grafana中有一个图形准确地表明:它在(milli)内核中显示pod及其容器的单个CPU使用情况。

由于Heapster还使用kubeletcAdvisor度量,所以我想知道:我该如何计算?InfluxDB中的指标已命名,cpu/usage_rate但是即使使用Heapster的代码,我也无法弄清楚他们如何计算它。

任何帮助表示赞赏,谢谢!

hel*_*ert 9

我们正在使用该container_cpu_usage_seconds_total指标来计算Pod CPU使用率。此指标包含每个容器按核心消耗的CPU秒总数(这很重要,因为Pod可能包含多个容器,每个容器都可以跨多个内核进行调度;但是,该指标具有pod_name注释,我们可以将其用于聚合)。特别令人关注的是该指标的变化率(可以使用PromQL的rate()函数进行计算)。如果在1秒钟内增加1,则Pod在该秒内消耗1个CPU内核(或1000毫内核)。

下面的PromQL查询就是这样做的:计算sum(...) by (pod_name)平均五分钟内所有Pod(使用该操作)的CPU使用率:

sum(rate(container_cpu_usage_seconds_total[5m])) by (pod_name)
Run Code Online (Sandbox Code Playgroud)

  • 基本上,内核和毫微微就是对CPU利用率的抽象。CPU消耗为“ 1核”(约1000毫微克)意味着Pod会以100%使用一个CPU核(500毫欧意味着50%依此类推);CPU的限制作用相同:例如,限制为250毫微米,意味着Pod可以使用一个CPU内核的比例不超过25%。看看[文档中的_“容器的管理计算资源” _部分](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#含义-cpu)想要查询更多的信息。 (3认同)
  • 我不明白 _container_cpu_usage_seconds_total_ 应该给出 CPU 使用的秒数如何代表问题所要求的 - CPU 利用率_以(毫)核心数表示_。如果我的 _container_cpu_usage_seconds_total_ 等于 100ms(毫秒),如何计算那是多少毫核? (2认同)
  • @VentzyKunev 100ms的总CPU使用量的值本身并不特别有意义。如果您知道Pod使用了100ms的CPU时间(每秒),这确实很有用-这正是Prometheus的“ rate”功能所执行的。其余只是不同单位之间的转换。每1000毫秒_real time_使用100毫秒CPU时间对应于10%(在一秒钟之内)的CPU利用率,或者1/10 CPU内核(或100毫微升)。 (2认同)

val*_*ala 5

以下 PromQL 查询返回从 Kubernetes v1.16 及更高版本开始的每个 Pod 已使用的 CPU 核心数:

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod)
Run Code Online (Sandbox Code Playgroud)

{container!=""}需要该过滤器来过滤 cgroups 分层统计信息,该统计信息已包含在每个容器的统计信息中。有关于此的更多详细信息,请参阅此答案。

以下 PromQL 查询必须用于 v1.16 以下的 Kubernetes,因为它使用不同的标签名称(例如,container_name代替containerpod_name代替pod-有关详细信息,请参阅此问题):

sum(rate(container_cpu_usage_seconds_total{container_name!=""}[5m])) by (pod_name)
Run Code Online (Sandbox Code Playgroud)