问题:
从 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 的单个实例。(可用性降低是一个问题)
- 启用分片。(解决重复问题,仍然较少可用)
根据文档,对于水平缩放,我们必须将分片参数传递给 pod。
分片是零索引的。所以我们必须为每个 pod 传递索引和分片总数。
我们正在使用Helm 图表,它被部署为部署。
问题:
- 如果可能的话,在这种情况下,我们如何将不同的参数传递给不同的 pod?
- 考虑到 k8s 工作负载的自我修复特性,我们是否应该担心kube-state-metrics的可用性?
- 我们什么时候应该真正将它扩展到多个实例以及如何?