在 prometheus-operator 中扩展 kube-state-metrics

Scaling kube-state-metrics in prometheus-operator

在 Prometheus-operator 中,我想将 kube-state-metrics 个副本增加到 2 个。如果我增加副本,并且由于默认服务发现角色是 endpoints,Prometheus 将抓取每个 pod,因此我会把所有指标都抓取两次,这会导致多对多问题,这是一种浪费。

我遇到的问题是一个节点出现故障,上面有 kube-state-metrics 等。在安排新的 pod 之前,我不知道集群上发生了什么。 kube-state-metrics 冗余对我来说很重要。

如何将 kube-state-metricskubernetes_sd_configs 角色配置为 service,以便将服务作为负载均衡器而不是服务中的每个 pod?或者 - 如何缩放 kube-state-metrics pods(不分片)?

当前配置:

- job_name: monitoring/prometheus-operator-kube-state-metrics/0
  kubernetes_sd_configs:
  - role: endpoints

我想要的:

- job_name: monitoring/prometheus-operator-kube-state-metrics/0
  kubernetes_sd_configs:
  - role: service

是的,你可以。

虽然您的抓取工作 endpoints 正在过滤包含注释 prometheus.io/scrape: "true" 的服务,但您可以选择使用不同的注释来抓取服务本身。

如果您有这样的工作,它会单独抓取每个端点:

- job_name: kubernetes-endpoints                                                                                  
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
    - role: endpoints
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
      action: keep
      regex: "true"

您可以添加另一个作业,它只会将服务抓取为端点:

- job_name: kubernetes-services
  params:
    module: [http_2xx]
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
      action: keep
      regex: "true"

然后确保您在服务上设置了正确的注释,如下所示:

apiVersion: v1                
kind: Service                                                                                                     
metadata:                                  
  annotations:
    prometheus.io/path: /metrics
    prometheus.io/probe: "true"