kubernetes - Prometheus & cadvisor & k8s / 带有空值的“图像”标签
问题描述
在 Prometheus 表达式浏览器中,执行“container_cpu_usage_seconds_total metric”在不同的 k8s 集群中得到不同标签的结果。
集群 1(k8s v1.15.9):
container_cpu_usage_seconds_total{container="POD",container_name="POD",cpu="total",endpoint="https-metrics",id="/kubepods/besteffort/pod00xxxxx-ef9f-4959-b2cf-95e9c6dba800/bbff610aeeb79874c69228068f07b9c3a395a3933b33387fd681ef91aa188897",image="reg.k8s.io/google_containers/pause-amd64:3.1",instance="192.168.110.120:10250",job="kubelet",name="k8s_POD_guestbook-ui-57d98b678-w5csk_argo-cd_0068264c-ef9f-4959-b2cf-95e9c6dba800_0",namespace="argo-cd",node="k8s-w5",pod="guestbook-ui-57d98b678-w5csk",pod_name="guestbook-ui-57d98b678-w5csk",service="kubelet"}
集群 2(k8s v1.18.10):
container_cpu_usage_seconds_total{cpu="total", endpoint="https-metrics", id="/kubepods/besteffort/pod07a4289a-9ae4-42fd-a7d5-5fe7d8680071", instance="192.168.120.10:10250", job="kubelet", metrics_path="/metrics/cadvisor", namespace="eds", node="cluster-master-1", pod="kong-7dc748b8d5-5x5qf", service="kube-kube-prometheus-stack-kubelet"}
在第二个集群中找不到“图像”“容器”标签。如何配置第二个以使其缺少标签?
他们的scrape_configs存在差异。
第二个没有metric_relabel_configs。metric_relabel_configs 是否影响可用标签?
metric_relabel_configs:
- source_labels: [__name__, image]
separator: ;
regex: container_([a-z_]+);
replacement: $1
action: drop
- source_labels: [__name__]
separator: ;
regex: container_cpu_usage_seconds_total|container_memory_usage_bytes|container_memory_cache|container_network_.+_bytes_total|container_memory_working_set_bytes
replacement: $1
action: keep
当我在第二个集群中执行 curl 命令时,实际上结果有图像和容器标签,但值为 Empty。
curl -k --header "Authorization: Bearer $TOKEN" https://[k8s_ip]:10250/metrics/cadvisor
结果:
container_cpu_usage_seconds_total{container="",cpu="total",id="/kubepods/besteffort/pod07a4289a-9ae4-42fd-a7d5-5fe7d8680071",image="",name="",namespace="eds",pod="kong-7dc748b8d5-5x5qf"} 738.009191131 1617976437601
解决方案
你的症状和这个问题有些相似。
高级症状是
curl /metrics
图像、命名空间等返回空白。似乎 kubelet 的宇宙观与 Docker 有很大不同,因此它没有标记容器指标的元数据。
--docker-root
在我的情况下,我使用非标准根目录运行 Docker,并通过修复问题明确地告诉 kubelet 。
推荐阅读
- excel - VBA 从列表中删除 Excel 列
- openshift - OpenShift + buildConfig + ConfigMaps 的用例
- google-apps-script - 试图getlastrow
- r - R:求解变量(使用 uniroot 函数)
- kotlin - 您可以自定义 Ktor 401 - 未经授权的响应吗?
- typescript - 如何在不声明的情况下引入新的泛型参数?
- python-3.x - 使用 Flask SQLAlchemy 将数据动态插入表的脚本
- python - 修补已修补的类的方法
- javascript - ClentScriptManager .RegisterClientScriptBlock 从按钮单击 asp.net c# 执行 js 重定向不起作用的服务器端
- c# - 一个项目中有两个 ML.NET 模型