首页 公告 项目 RSS

thanos和prometheus实现k8s跨云多集群监控

December 16, 2022 本文有 961 个字 需要花费 2 分钟阅读

简介

说明下场景,有4个k8s集群,当然可能有更多的集群需要得到监控,然后设计一个监控方案,希望数据可以统一存储,统一展示,关键是要优雅

架构图

这个图我没有压缩过,大家可以放大查看,或者直接使用drawio打开

架构说明

4个集群里面有一个集群为主集群,需要安装thanos的以下组件

  • thanos store 用来从对象存储提取数据
  • thanos query 用来从其他各个集群sidecar中拿数据
  • thanos query inet 也就是另外一个thanos query 用来从thanos query和thanos store还有本机thanos sidecar拿取所有的数据来给grafana展示
  • thanos Compactor 这个可以随便在哪里装一个用来压缩thanos在对象存储里面的数据,当然不装也可以,不过推荐装

4个集群中每个集群都是需要装prometheus相关的组件和thanos sidecar

安装prometheus配置sidecar的ingress

这里我直接推荐使用kube-prometheus安装就好了,怎么安装kube-prometheus可以参考

kube-prometheus搭建

推荐使用kustomize去区分每个环境不同的配置,然后下面是重点

prometheus中externalLabels需要自己自定义一下

  externalLabels: 
    cluster: 'cluster-1'
    datacenter: 'us'

这样子上传到对象存储中的数据不会重复

对于grpc的代理,ingress的相关配置可以参考下面

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
  name: thanos-grpc
  namespace: monitoring
spec:
  ingressClassName: nginx
  rules:
  - host: thanosgrpc-master.xxx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: prometheus-operated
            port:
              number: 10901
  tls:
  - secretName: ssl
    hosts:
      - thanosgrpc-master.xxx.com

配置thanos query

这里我推荐直接使用kube-thanos的配置

thanos query中client-tls要配置为true

加下面两个配置

          - --grpc-client-tls-secure 
          - --grpc-client-tls-skip-verify

对于query的label也要打一下

          - --query.replica-label=replica

之后就是配置所有集群的sidecar grpc的地址

          - --endpoint=thanosgrpc-master.xxx.com:443
          - --endpoint=thanosgrpc-dev.xxx.com:443

配置thanos query inet

配置如下

  • 本集群的sidecar grpc地址
  • 本集群store grpc 地址
  • 本集群query grpc 地址
          - --query.replica-label=replica-inet
          - --endpoint=prometheus-operated:10901
          - --endpoint=thanos-store:10901
          - --endpoint=thanos-query:10901

配置grafana

grafana 中直接配置thanos query inet的service地址就可以了

为什么存在两个query

query1 是连接带ssl的sidecar的grpc地址的

query2 是连接不带ssl的grpc地址的

就这么简单

关于告警

告警的话我不推荐使用thanos rule去告警,因为可能会有延时,为了保证告警的及时性和架构尽可能简单,所以我就没有用rule了

欢迎关注我的博客www.bboy.app

Have Fun