Prometheus 多集群监控的 3 种方案,你选哪种?
本文分享自华为云社区《Prometheus多集群监控方案》,作者: 可以交个朋友。
一、背景
不少用户在 k8s 集群外裸机环境部署了 prometheus 监控组件想要查询 k8s 集群的监控指标,又或者是想采集多个 k8s 集群中的节点指标,容器指标,master 组件指标等。
二、Prometheus 多集群监控能力介绍
当前通过 Prometheus 采集多套 k8s 集群中的容器指标通常有三种方式。
通过 APIServer 代理的方式获取 k8s 集群指标,直接在 prometheus.yml 配置相关其他 kubernetes 集群信息,实现一个 prometheus 同时采集多个 kubernetes 集群信息
通过 prometheus 联邦模式,实现一个 prometheus 拉取其他 prometheus 数据
通过 Prometheus Agent 模式 remote write 远端存储,实现多个 prometheus 向同一个 prometheus 输出数据(推荐)
三种方式对比分析
APIServer 方式解决了数据冗余的方式,但是引入了配置的复杂性。同时随着 k8s 集群规模扩大,走 APIServer 代理请求获取集群指标数据对 AIserver 负载过大。
Prometheus 联邦机制相对来说配置简单,最早的多集群监控方案。但是缺点也很明显: 占用资源较多,出现数据冗余; global Prometheus 汇总叶子 Prometheus 数据,处理数据压力大。
Prometheus Agent remote write 方案配置简单,可以解决多集群监控数据冗余问题。同时可在 remotewrite 中配置过滤规则,减轻远端 Prometheus 数据处理压力
综上所述关于多集群监控方式,比较推荐 Prometheus Agent remote write 方案
三、配置实现
3.1 一个 prometheus 同时采集多个 kubernetes 集群操作
promethues 通过配置 bearer token,利用 apiserver 代理的的形式,获取 k8s 集群的 node 指标,容器指标。
在目标集群创建 Prometheus 访问 Kubernetes 资源对象的 RBAC 资源
kubectl apply -f prometheus_rbac.yaml,目的为了 Prometheus 使用该 serviceAccount 能够自动发现集群相关资源,并拥有执行 get list 等权限
从目标集群获取 token 凭证
1.21 以前版本的集群中,Pod 中获取 Token 的形式是通过挂载 ServiceAccount 的 Secret 来获取 Token,这种方式获得的 Token 是永久的。该方式在 1.21 及以上的版本中不再推荐使用,并且根据社区版本迭代策略,在 1.25 及以上版本的集群中,ServiceAccount 将不会自动创建对应的 Secret。可参考 kubernetes 官方提供的如何创建长期 token: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/#manually-create-an-api-token-for-a-serviceaccount
将对应 token 保存为文件,为了演示便利,本 Prometheus 使用虚拟形态部署
在 prometheus 配置中写入其他集群信息,并启动
启动 prometheus 服务: ./prometheus --config.file=prometheus.yml
3.2 prometheus 联邦操作
Prometheus 支持拉取其他 Prometheus 的数据到本地,称为联邦机制。这样我们可以在每个集群内部署一个 Prometheus,然后部署一个 global Prometheus 用于拉取每个集群内部的 Prometheus 数据进行汇总。
增加联邦配置信息,并重启
3.3 prometheus remote write 模式操作
Remote Write 支持将 k8s 集群内 Prometheus 采集的 metrics 写到远程存储中,远程存储可以是 Prometheus,也可以是其他时序数据库。在用户使用的时候,直接从远端存储中读取数据,并提供全局视图。
以下以华为云 CCE 监控插件 kube-prometheus-stack 为例。(开源 Promethues 需要手动进行配置)
被写入 prometheus 需要开启 web.enable-remote-write-receiver,表示本 prometheus 接受来着其他 prometheus 的远程写入
需要采集指标的集群中安装 kube-prometheus-stack 插件
部署模式采用 Agent 模式,参数配置对接第三方,数据上报地址为远端存储的地址。如果远端是 prometheus-server,可以填写: http://ip:port/api/v1/write
查看 kube-prometheus-stack agent 日志,确认 remote write 成功
确认中心 prometheus 可获取多个集群数据
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/05daf94e28fdfe76ce18f6ef1】。文章转载请联系作者。
评论