2

前言

有时候对于一个公司,k8s集群或是所谓的caas只是整个技术体系的一部分,往往这个时候监控系统不仅仅要k8s集群以及k8s中部署的应用,而且要监控传统部署的项目。也就是说整个监控系统不是部署在k8s cluster中。非in-cluster的prometheus怎么监控k8s是今天需要讨论的问题。
在上一篇文章解读了prometheus提供的监控k8s的配置文件,我们知道主要是采集node,cadvisor,service,endpoint,ingress和pod 6个方面。集群外部署,我们通过更改配置文件,

kubernetes_sd_configs:
  - role: node
    api_server: https://10.xx.xx.231:6443
    bearer_token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt14dmTJfPP5XNYiwPBW-ffe84w1zA0PaIUISUXGWUr5Ak9dFkJz4-ho0pPRKuPj-KZ8C4APt4NVKFXnO3WisR63ShCYqYYrOAjerCZIfrokMdvhPG1S6Dw_swWtYTSbBVXMeyHrC9OqvXz3jdi4vnKYJgA
    tls_config:
      insecure_skip_verify: true

也能利用prometheus的service discovery功能监控一些指标,比如node,cadvisor,但是其他的无法全部获取metrics了,因为自动发现了一些k8s中service网络层的地址,这个是从外部无法访问的。我们的解决方案是prometheus的federation模式来解决该问题。

Prometheus的Federation简介

联邦允许一个prometheus server 从另外一个prometheus server 获取metrics。
官方给出的配置:

- job_name: 'federate'
  scrape_interval: 15s

  honor_labels: true
  metrics_path: '/federate'

  params:
    'match[]':
      - '{job="prometheus"}'
      - '{__name__=~"job:.*"}'

  static_configs:
    - targets:
      - 'source-prometheus-1:9090'
      - 'source-prometheus-2:9090'
      - 'source-prometheus-3:9090'

联邦机制也实现了promethues的扩展。大致上纵向和横向两种思路。
图片描述

由此出发,就能形成一种树状的prometheus集群,实现了高可用和分片。我们的集群外prometheus监控k8s的方案就基于此。

通过Federation监控k8s

采取上一篇文章的配置文件,在k8s集群中部署一个prometheus server,集群外的prometheus server 定期获取集群中prometheus的数据。
然后通过设置match即可

'match[]':
      - '{job="prometheus"}'
      - '{__name__=~"job:.*"}'

总结

此外联邦模式可以实现prometheus监控prometheus。遵循以下两点:

  • 网格模式。在同一个数据中心,每个prometheus监控其他的prometheus。
  • 上下级模式。上一级的prometheus监控数据中心级别的prometheus。

iyacontrol
1.4k 声望2.7k 粉丝

专注kubernetes,devops,aiops,service mesh。