【发布时间】:2020-01-14 11:33:47
【问题描述】:
问题:
从 prometheus 查询来自 kube-state-metrics 的指标时出现重复数据。
运行 3 个 kube-state-metrics 实例的示例查询和结果:
查询:
kube_pod_container_resource_requests_cpu_cores{namespace="ns-dummy"}
指标
kube_pod_container_resource_requests_cpu_cores{container="appname",endpoint="http",instance="172.232.35.142:8080",job="kube-state-metrics",namespace="ns-dummy",node="ip-172-232-34-25.ec2.internal",pod="app1-appname-6bd9d8d978-gfk7f",service="prom-kube-state-metrics"}
1
kube_pod_container_resource_requests_cpu_cores{container="appname",endpoint="http",instance="172.232.35.142:8080",job="kube-state-metrics",namespace="ns-dummy",node="ip-172-232-35-22.ec2.internal",pod="app2-appname-ccbdfc7c8-g9x6s",service="prom-kube-state-metrics"}
1
kube_pod_container_resource_requests_cpu_cores{container="appname",endpoint="http",instance="172.232.35.17:8080",job="kube-state-metrics",namespace="ns-dummy",node="ip-172-232-34-25.ec2.internal",pod="app1-appname-6bd9d8d978-gfk7f",service="prom-kube-state-metrics"}
1
kube_pod_container_resource_requests_cpu_cores{container="appname",endpoint="http",instance="172.232.35.17:8080",job="kube-state-metrics",namespace="ns-dummy",node="ip-172-232-35-22.ec2.internal",pod="app2-appname-ccbdfc7c8-g9x6s",service="prom-kube-state-metrics"}
1
kube_pod_container_resource_requests_cpu_cores{container="appname",endpoint="http",instance="172.232.37.171:8080",job="kube-state-metrics",namespace="ns-dummy",node="ip-172-232-34-25.ec2.internal",pod="app1-appname-6bd9d8d978-gfk7f",service="prom-kube-state-metrics"}
1
kube_pod_container_resource_requests_cpu_cores{container="appname",endpoint="http",instance="172.232.37.171:8080",job="kube-state-metrics",namespace="ns-dummy",node="ip-172-232-35-22.ec2.internal",pod="app2-appname-ccbdfc7c8-g9x6s",service="prom-kube-state-metrics"}
观察:
当 N 个 Pod 为 kube-state-metrics 运行时,每个指标都会出现 Nx。如果是单个 pod 运行,我们会得到正确的信息。
可能的解决方案:
- 缩小到 kube-state-metrics 的单个实例。 (可用性降低是一个问题)
- 启用分片。 (解决了重复问题,仍然不太可用)
根据docs,对于水平扩展,我们必须将分片参数传递给 pod。
分片是零索引的。所以我们必须传递每个 pod 的索引和分片总数。
我们正在使用Helm chart,它被部署为部署。
问题:
- 如果可能的话,在这种情况下,我们如何将不同的参数传递给不同的 pod?
- 考虑到 k8s 工作负载的自我修复特性,我们是否应该担心 kube-state-metrics 的可用性?
- 我们应该在什么时候真正将其扩展到多个实例以及如何扩展?
【问题讨论】:
-
我没有看到在当前 helm 图表中添加分片的选项,因此您必须对其进行修改。为什么说分片会降低可用性?无论如何,这一切都是无状态的,如果其中一个实例出现故障,您获得的最大损失是您缺乏资产某些部分的指标。
标签: kubernetes monitoring devops prometheus kube-state-metrics