【问题标题】:Duplicate metrics with multiple instances of kube-state-metrics具有多个 kube-state-metrics 实例的重复指标
【发布时间】: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 运行,我们会得到正确的信息。

可能的解决方案

  1. 缩小到 kube-state-metrics 的单个实例。 (可用性降低是一个问题)
  2. 启用分片。 (解决了重复问题,仍然不太可用)

根据docs,对于水平扩展,我们必须将分片参数传递给 pod。

分片是零索引的。所以我们必须传递每个 pod 的索引和分片总数。

我们正在使用Helm chart,它被部署为部署。

问题

  1. 如果可能的话,在这种情况下,我们如何将不同的参数传递给不同的 pod?
  2. 考虑到 k8s 工作负载的自我修复特性,我们是否应该担心 kube-state-metrics 的可用性?
  3. 我们应该在什么时候真正将其扩展到多个实例以及如何扩展?

【问题讨论】:

  • 我没有看到在当前 helm 图表中添加分片的选项,因此您必须对其进行修改。为什么说分片会降低可用性?无论如何,这一切都是无状态的,如果其中一个实例出现故障,您获得的最大损失是您缺乏资产某些部分的指标。

标签: kubernetes monitoring devops prometheus kube-state-metrics


【解决方案1】:

如果容器关闭,您可以使用只有kube-state-metric 的单个副本的“自我修复”部署,如果容器关闭,部署将启动一个新容器。由于 kube-state-metric is not focused on the health of the individual kubernetes components。只有当您的集群太大并且每秒更改许多对象时,它才会影响您。

它不关注单个 Kubernetes 组件的健康状况,而是关注内部各种对象的健康状况,例如部署、节点和 Pod。

对于小型集群,这种方式使用没有问题,但你确实需要一个高可用的监控平台,我建议你看看这两篇文章: creating a well designed and highly available monitoring stack for kuberneteskubernetes monitoring

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多