赞
踩
本文分享自华为云社区《Prometheus多集群监控方案》,作者: 可以交个朋友。
不少用户在k8s集群外裸机环境部署了prometheus监控组件想要查询k8s集群的监控指标,又或者是想采集多个k8s集群中的节点指标,容器指标,master组件指标等。
当前通过Prometheus采集多套k8s集群中的容器指标通常有三种方式。
三种方式对比分析
综上所述关于多集群监控方式,比较推荐Prometheus Agent remote write方案
promethues通过配置bearer token,利用apiserver 代理的的形式,获取k8s集群的node指标,容器指标。
kubectl apply -f prometheus_rbac.yaml,目的为了Prometheus使用该serviceAccount能够自动发现集群相关资源,并拥有执行get list 等权限
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: prometheus-test
- namespace: kube-system
-
- ---
- apiVersion: rbac.authorization.k8s.io/v1
- kind: ClusterRole
- metadata:
- name: prometheus-test
- rules:
- - apiGroups:
- - ""
- resources:
- - nodes
- - services
- - endpoints
- - pods
- - nodes/proxy
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - "extensions"
- resources:
- - ingresses
- verbs:
- - get
- - list
- - watch
- - apiGroups:
- - ""
- resources:
- - configmaps
- - nodes/metrics
- verbs:
- - get
- - nonResourceURLs:
- - /metrics
- verbs:
- - get
- ---
- apiVersion: rbac.authorization.k8s.io/v1
- kind: ClusterRoleBinding
- metadata:
- name: prometheus-test
- roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: prometheus-test
- subjects:
- - kind: ServiceAccount
- name: prometheus-test
- namespace: kube-system
1.21以前版本的集群中,Pod中获取Token的形式是通过挂载ServiceAccount的Secret来获取Token,这种方式获得的Token是永久的。该方式在1.21及以上的版本中不再推荐使用,并且根据社区版本迭代策略,在1.25及以上版本的集群中,ServiceAccount将不会自动创建对应的Secret。可参考kubernetes官方提供的如何创建长期token: 为 Pod 配置服务账号 | Kubernetes
将对应token保存为文件,为了演示便利,本Prometheus使用虚拟形态部署
- - job_name: k8s_cAdvisor
- scheme: https
- bearer_token_file: k8s_token
- tls_config:
- insecure_skip_verify: true
- kubernetes_sd_configs: #kubernetes 自动发现配置
- - role: node #node类型的自动发现
- bearer_token_file: k8s_token #步骤1中创建的token文件
- api_server: https://192.168.0.153:5443 #k8s集群 apiserver地址
- tls_config:
- insecure_skip_verify: true #跳过对服务端的认证
- relabel_configs: #用于在抓取metrics之前修改target的已有标签
- - target_label: __address__
- replacement: 192.168.0.153:5443
- action: replace
- ##将metrics_path地址转换为/api/v1/nodes/${1}/proxy/metrics/cadvisor
- #相当于通过APIServer代理到kubelet上获取数据
- - source_labels: [__meta_kubernetes_node_name] #指定我们需要处理的源标签
- regex: (.+) #匹配源标签的值,(.+)表示源标签什么值都可以匹配上
- target_label: __metrics_path__ #指定了需要replace后的标签
- replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor # 表示替换后的标签即__metrics_path__ 对应的值。其中${1}表示正则匹配的值,即nodename
- - target_label: cluster 为该集群下的node节点打上cluster标签便于分组管理
- replacement: k8s #为cluster标签赋值,值可以是集群名称或者其他唯一标识符
-
- ###该job用于监控另一个集群
- - job_name: k8s02_cAdvisor
- scheme: https
- bearer_token_file: k8s02_token
- tls_config:
- insecure_skip_verify: true
- kubernetes_sd_configs:
- - role: node
- bearer_token_file: k8s02_token #步骤1中创建的token文件
- api_server: https://192.168.0.147:5443
- tls_config:
- insecure_skip_verify: true
- relabel_configs:
- - target_label: __address__
- replacement: 192.168.0.147:5443
- action: replace
- - source_labels: [__meta_kubernetes_node_name]
- regex: (.+)
- target_label: __metrics_path__
- replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
- - target_label: cluster
- replacement: k8s02
启动prometheus服务: ./prometheus --config.file=prometheus.yml
Prometheus支持拉取其他Prometheus的数据到本地,称为联邦机制。这样我们可以在每个集群内部署一个Prometheus,然后部署一个global Prometheus用于拉取每个集群内部的Prometheus数据进行汇总。
增加联邦配置信息,并重启
- - job_name: 'federate-k8s01'
- scrape_interval: 15s
-
- honor_labels: true
- metrics_path: '/federate' #固定配置
-
- params:
- 'match[]':
- - '{job="istio-mesh"}' #目标prometheus的监控job列表 ,根据实际情况填写
- - '{job="kubernetes-cadvisor"}'
-
- static_configs:
- - targets:
- - '100.85.123.205:32298' #目标prometheus的访问地址
Remote Write支持将k8s集群内Prometheus采集的metrics写到远程存储中,远程存储可以是Prometheus,也可以是其他时序数据库。在用户使用的时候,直接从远端存储中读取数据,并提供全局视图。
以下以华为云CCE监控插件kube-prometheus-stack为例。(开源Promethues需要手动进行配置)
部署模式采用Agent模式,参数配置对接第三方,数据上报地址为远端存储的地址。如果远端是prometheus-server,可以填写: http://ip:port/api/v1/write
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。