Kubernetes 容器\内存\使用情况\按部署名称列出的字节
给定一个kubernetes群集,该群集具有: 我喜欢使用metricKubernetes 容器\内存\使用情况\按部署名称列出的字节,kubernetes,prometheus,metrics,Kubernetes,Prometheus,Metrics,给定一个kubernetes群集,该群集具有: 我喜欢使用metriccontainer\u memory\u usage\u bytes,但选择bydeployment\u name而不是pod 如果deployment\u name=foo没有使用deployment\u name=foo-bar的部署,那么像container\u memory\u usage\u bytes{pod\u name=~“foo-.+”}这样的选择器非常好 我希望通过度量kube\u pod\u容器\u
container\u memory\u usage\u bytes
,但选择bydeployment\u name
而不是pod
如果deployment\u name=foo
没有使用deployment\u name=foo-bar
的部署,那么像container\u memory\u usage\u bytes{pod\u name=~“foo-.+”}
这样的选择器非常好
我希望通过度量kube\u pod\u容器\u资源\u限制\u内存\u字节
实现同样的效果
有没有办法做到这一点;DR
没有通过部署名称直接查询普罗米修斯的方法
您可以使用部署的标签查询特定部署的内存使用情况
使用的查询:
sum(
kube_pod_labels{label_app=~"ubuntu.*"} * on (pod) group_right(label_app) container_memory_usage_bytes{namespace="memory-testing", container=""}
)
by (label_app)
有一篇很棒的文章解释了这个查询背后的概念。我鼓励您阅读:
问题中提到的选择者:
container\u memory\u usage\u bytes{pod\u name=~“foo-.+”}
+
-匹配任何字符串,但不能匹配空字符串
有这样的豆荚:
-将匹配(部署foo-12345678-abcde
)foo
-将匹配(deploymentfoo-deployment-98765432-zyxzy
)foo-deployment
如前所述,您可以使用部署中的标签来确定特定部署使用的资源 假设:
命名空间中有2个部署:内存测试
有3个副本ubuntu
,带有3个副本ubuntu附加版
- 以上部署的标签与其名称相同(可以不同):
app:ubuntu
app:ubuntu附加版
- Kubernetes群集版本
1.18.X
pod_name
和container_name
度量标签。对于1.14和1.15版本,所有pod
、pod\u name
、container
和container\u name
都作为宽限期提供
带有pod
pod\u名称
带有容器
容器名称
ubuntu
部署中的pod配置为生成人工负载(stress ng
)。这样做是为了说明如何避免使用的资源翻倍的情况
内存测试
命名空间中POD使用的资源:
container_memory_usage_bytes{endpoint="https-metrics",id="/kubepods/besteffort/podb96dea39-b388-471e-a789-8c74b1670c74",instance="192.168.0.117:10250",job="kubelet",metrics_path="/metrics/cadvisor",namespace="memory-testing",node="node1",pod="ubuntu-5b5d6c56f6-cfr9g",service="kubelet"} 308559872
container_memory_usage_bytes{container="POD",endpoint="https-metrics",id="/kubepods/besteffort/podb96dea39-b388-471e-a789-8c74b1670c74/312980f90e6104d021c12c376e83fe2bfc524faa4d4cee6553182d0fa2e007a1",image="k8s.gcr.io/pause:3.2",instance="192.168.0.117:10250",job="kubelet",metrics_path="/metrics/cadvisor",name="k8s_POD_ubuntu-5b5d6c56f6-cfr9g_memory-testing_b96dea39-b388-471e-a789-8c74b1670c74_0",namespace="memory-testing",node="node1",pod="ubuntu-5b5d6c56f6-cfr9g",service="kubelet"} 782336
container_memory_usage_bytes{container="ubuntu",endpoint="https-metrics",id="/kubepods/besteffort/podb96dea39-b388-471e-a789-8c74b1670c74/1b93889a3e7415ad3fa040daf89f3f6bc77e569d85069de518267666ede8e21c",image="ubuntu@sha256:55cd38b70425947db71112eb5dddfa3aa3e3ce307754a3df2269069d2278ce47",instance="192.168.0.117:10250",job="kubelet",metrics_path="/metrics/cadvisor",name="k8s_ubuntu_ubuntu-5b5d6c56f6-cfr9g_memory-testing_b96dea39-b388-471e-a789-8c74b1670c74_0",namespace="memory-testing",node="node1",pod="ubuntu-5b5d6c56f6-cfr9g",service="kubelet"} 307777536
$kubectl top pod--namespace=内存测试
名称CPU(核心)内存(字节)
ubuntu-5b5d6c56f6-cfr9g 816m 280Mi
ubuntu-5b5d6c56f6-g6vh9 834m 278Mi
ubuntu-5b5d6c56f6-sxldj 918m 288Mi
ubuntu-additional-84bdf9b7fb-b9pxm 0Mi
ubuntu-additional-84bdf9b7fb-dzt72 0Mi
ubuntu-additional-84bdf9b7fb-k5z6w 0Mi
如果您要使用以下查询查询普罗米修斯:
container_memory_usage_bytes{namespace="memory-testing", pod=~"ubuntu.*"}
您将获得与下面类似的输出(出于示例目的,它被剪切为仅显示一个pod,默认情况下,它将在名称和内存测试命名空间中显示所有带有ubuntu
的pod):
在这一点上,您需要选择您将使用的度量。在这个例子中,我使用了第一个。欲了解更多深入的信息,请参阅以下文章:
如果我们用sum(QUERY)by(pod)
来聚合这些指标,那么我们所报告的已用资源实际上会翻一番
剖析主查询:
container_memory_usage_bytes{namespace="memory-testing", container=""}
上述查询将为每个pod输出带有已用内存度量的记录。container=”“
参数仅用于获取一条没有container
参数的记录(前面提到)
kube_pod_labels{label_app=~"ubuntu.*"}
上面的查询将输出带有pods的记录,以及带有regexp ofubuntu.*
kube_pod_labels{label_app=~"ubuntu.*"} * on (pod) group_right(label_app) container_memory_usage_bytes{namespace="memory-testing", container=""}
上述查询将把来自kube\u pod\u标签的pod
与container\u memory\u usage\u bytes
的pod
匹配,并将label\u app
添加到每个记录中
sum (kube_pod_labels{label_app=~"ubuntu.*"} * on (pod) group_right(label_app) container_memory_usage_bytes{namespace="memory-testing", container=""}) by (label_app)
上述查询将通过label\u app
对记录进行汇总
在此之后,您应该能够获得查询,该查询将使用标签(实际上是部署)对已用内存进行求和
至于:
我希望通过度量实现同样的效果
kube\u pod\u容器\u资源\u限制\u内存\u字节
假设部署中的每个pod都具有相同的限制,您可以使用下面的查询获取带有标签的部署的内存限制,如前一示例所示:
kube_pod_labels{label_app="ubuntu-with-limits"} * on (pod) group_right(label_app) kube_pod_container_resource_limits_memory_bytes{namespace="memory-testing", pod=~".*"}
您可以在此查询中应用函数,如avg()
,mean()
,max()
,以获取将作为内存限制的单个数字:
avg(kube_pod_labels{label_app="ubuntu-with-limits"} * on (pod) group_right(label_app) kube_pod_container_resource_limits_memory_bytes{namespace="memory-testing", pod=~".*"}) by (label_app)
如果使用VPA
,内存限制可能会有所不同。在这种情况下,您可以同时显示所有部署,或者使用avg()
获取所有“部署”的平均值
作为上述解决方案的一种解决办法,您可以尝试使用regexp,如下所示:
container_memory_usage_bytes{pod=~"^ubuntu-.{6,10}-.{5}"}
您好,请告诉我您是否检查了此线程:?我无法通过此任务“仅仅”解决我的问题,对不起。这非常令人遗憾