Prometheus 基于k8s服务发现通过Cadvisor监控Kubernetes
Prometheus服务发现
Prometheus添加被监控端支持两种方式:
• 静态配置:手动配置
• 服务发现:动态发现需要监控的Target实例
支持服务发现的来源
• azure_sd_configs
• consul_sd_configs
• dns_sd_configs
• ec2_sd_configs
• openstack_sd_configs
• file_sd_configs
• gce_sd_configs
• kubernetes_sd_configs
• marathon_sd_configs
• nerve_sd_configs
• serverset_sd_configs
• triton_sd_configs
集成cAdvisor
Kubernetes主要提供了如下5种服务发现模式和Prometheus进行集成:
使用cAdvisor主要需要使用Node服务发现模式,配置方式如下所示
Node服务发现模式
kubernetes_sd_configs:- role: node
监控方法
监控对象 | 监控指标内容 | 服务发现模式 | 监控方式 | 数据来源 |
---|---|---|---|---|
集群各节点Kubelet组件 | 各节点Kubelet的基本运行状态相关的监控指标 | node | 白盒监控 | Kubelet |
监控Kubernetes
Cadvisor内置在kubelet当中,通过kubelet暴露的api去访问的
监控Kubernetes
普罗米修斯通过Cadvisor监控k8s
现在普罗米修斯要通过服务发现连接到k8s集群,k8s授权普罗米修斯可以访问如下地址
[root@k8s-master ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.179.102:6443 74d
Prometheus -> apiserver(192.168.179.102:6443)->kubelet(cadvisor)
这个过程是需要授权的,所以第一步就是授权
[root@k8s-master ~]# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: prometheusnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:name: prometheus
rules:
- apiGroups:- ""resources:- nodes- services- endpoints- pods- nodes/proxyverbs:- get- list- watch
- apiGroups:- "extensions"resources:- ingressesverbs:- get- list- watch
- apiGroups:- ""resources:- configmaps- nodes/metricsverbs:- get
- nonResourceURLs:- /metricsverbs:- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: prometheus
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheus
subjects:
- kind: ServiceAccountname: prometheusnamespace: kube-system [root@k8s-master ~]# kubectl apply -f rbac.yaml
serviceaccount/prometheus created
现在要拿到创建rbac产生的token,,这是非常关键的,让普罗米修斯拿着这个token去访问api那么就具有rbac里面授予的权限了
怎么拿到这个token呢,产生的sa在kube-system上,怎么拿到这个token呢,产生的sa在kube-system上
[root@k8s-master ~]# kubectl get sa -n kube-system | grep prome
prometheus 1 4m59s
[root@k8s-master ~]# kubectl describe sa prometheus -n kube-system
Name: prometheus
Namespace: kube-system
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: prometheus-token-jq2kg
Tokens: prometheus-token-jq2kg
Events: <none>
Token保存在这个secret当中 prometheus-token-jq2kg
[root@k8s-master ~]# kubectl describe secret prometheus-token-jq2kg -n kube-system
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InR0cTRHNDNQUGFMeUZ5Rnp1azZnSUEyRVU0WEY1dWdEMEYwd056ZnNkWWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJwcm9tZXRoZXVzLXRva2VuLWpxMmtnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InByb21ldGhldXMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNDYxYTU1Mi0xZWE0LTRjYWQtOTdhOC05YmE1Zjg2YjhkMmYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cHJvbWV0aGV1cyJ9.FfRTfjE5ih9ZvCy0XFL1Trc00H7k1s6kkGmFvnkKJghswTLeATRPfziAJqrBYBYY0dA8IK52WEa0JR2TevtotnWOyIXZnv6KWcPb0RObvlL4dxp1ZJyZRAc01rliyukTU2HphgX2NlLnf_TZHMo1bapPf8crDdMlZHoEe42ukMtr1nZrPgChXJCtGoR383bAWDoDrq1nZ7e8xCQnoxEkq_khLO9ypHqAlFfMCG-w0x35uC1Wa06FdoeygW0gABDK_Ltgvz6_IuLM9wLl54SnPZJEPSMfiNpuvN8vDWNUcjqPj1Lqi3eSMKLf7b3zBvlTEcLQKoUQdXBdg-97pfeDVw
2、获取Token并保存到文件
拿到这个token,拷贝到普罗米修斯这个节点
[root@k8s-master ~]# kubectl describe secret prometheus-token-jq2kg -n kube-system > token.k8s
[root@k8s-master ~]# scp token.k8s root@192.168.179.99:/usr/local/prometheus
在普罗米修斯上只保存这token值,其余的全部去掉
[root@localhost prometheus]# cat token.k8s
eyJhbGciOiJSUzI1NiIsImtpZCI6InR0cTRHNDNQUGFMeUZ5Rnp1azZnSUEyRVU0WEY1dWdEMEYwd056ZnNkWWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJwcm9tZXRoZXVzLXRva2VuLWpxMmtnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InByb21ldGhldXMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNDYxYTU1Mi0xZWE0LTRjYWQtOTdhOC05YmE1Zjg2YjhkMmYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cHJvbWV0aGV1cyJ9.FfRTfjE5ih9ZvCy0XFL1Trc00H7k1s6kkGmFvnkKJghswTLeATRPfziAJqrBYBYY0dA8IK52WEa0JR2TevtotnWOyIXZnv6KWcPb0RObvlL4dxp1ZJyZRAc01rliyukTU2HphgX2NlLnf_TZHMo1bapPf8crDdMlZHoEe42ukMtr1nZrPgChXJCtGoR383bAWDoDrq1nZ7e8xCQnoxEkq_khLO9ypHqAlFfMCG-w0x35uC1Wa06FdoeygW0gABDK_Ltgvz6_IuLM9wLl54SnPZJEPSMfiNpuvN8vDWNUcjqPj1Lqi3eSMKLf7b3zBvlTEcLQKoUQdXBdg-97pfeDVw
现在可以让普罗米修斯拿着这个token访问api了
3、创建Job和kubeconfig_sd_configs
现在可以让普罗米修斯拿着这个token访问api了,这里启用的是k8s服务发现的配置
[root@localhost ~]# vim /usr/local/prometheus/prometheus.yml - job_name: kubernetes-nodes-cadvisormetrics_path: /metricsscheme: https #访问api使用https访问kubernetes_sd_configs:- role: node #指定服务发现类型的角色为nodeapi_server: https://192.168.179.102:6443bearer_token_file: /usr/local/prometheus/token.k8stls_config:insecure_skip_verify: true #跳过https验证,因为自签发,不受信任,跳过证书校验bearer_token_file: /usr/local/prometheus/token.k8stls_config: insecure_skip_verify: true #跳过证书relabel_configs:# 将标签(.*)作为新标签名,原有值不变- action: labelmapregex: __meta_kubernetes_node_label_(.*)# 修改NodeIP:10250为APIServerIP:6443- action: replaceregex: (.*)source_labels: ["__address__"]target_label: __address__replacement: 192.168.31.61:6443# 实际访问指标接口 https://NodeIP:10250/metrics/cadvisor 这个接口只能APISERVER访问,故此重新标记>标签使用APISERVER代理访问- action: replacesource_labels: [__meta_kubernetes_node_name]target_label: __metrics_path__regex: (.*)replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor[root@localhost prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: 0 rule files found
https://192.168.179.102:6443/api/v1/nodes/k8s-node1/proxy/metrics/cadvisor
这些数据就是从这个地址下面拿到的 ,如果你将该段去掉,可以看到没有重新标记标签会采集不到数据
# - action: replace
# source_labels: [__meta_kubernetes_node_name]
# target_label: __metrics_path__
# regex: (.*)
# replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
Prometheus 基于k8s服务发现通过Cadvisor监控Kubernetes相关推荐
- Nacos2.0的K8s服务发现生态应用及规划
简介:Nacos 是阿里巴巴于 2018 年开源的注册中心及配置中心产品,帮助用户的分布式微服务应用进行服务发现和配置管理功能.随着 Nacos2.0 版本的发布,在性能和扩展性上取得较大突破后,社区 ...
- k8s 服务发现 kubeDNS
k8s 服务发现 kubeDNS 一.k8s 服务发现 kubeDNS 1.1 kubeDNS 1.2 服务发现类型 1.2.1 基于环境变量的服务发现 1.2.2 基于DNS的服务发现 一.k8s ...
- dubbo k8s 服务发现_工商银行基于 Dubbo 构建金融微服务架构的实践-服务发现篇
作者 | 张远征来源|阿里巴巴云原生公众号 导读:Dubbo 作为分布式微服务框架,众多公司在实践中基于 Dubbo 进行分布式系统架构.重启开源后,我们不仅看到 Dubbo 3.0 最新的 Road ...
- dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes-阿里云开发者社区
"没有最好的技术,只有最合适的技术."我想这句话也同样适用于微服务领域,没有最好的服务框架,只有最适合自己的服务改造.在Dubbo的未来规划中,除了保持自身技术上的领先性,关注性能 ...
- dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes
原标题:服务化改造实践(二)| Dubbo + Kubernetes 摘要: "没有最好的技术,只有最合适的技术."我想这句话也同样适用于微服务领域,没有最好的服务框架,只有最适合 ...
- Dubbo-kubernetes 基于 Informer 服务发现优化之路
在 Kubernetes(简称 K8s,一个可移植容器的编排管理工具)体系中,etcd 存储集群的数据信息,kube-apiserver 作为统一入口,任何对数据的操作都必须经过 kube-apise ...
- 基于gRPC服务发现与服务治理的方案
重温最少化集群搭建,我相信很多朋友都已经搭建出来,基于Watch机制也实现了出来,相信也有很多朋友有了自己的实现思路,但是,很多朋友有个疑问,我API和服务分离好了,怎么通过服务中心进行发现呢,这个过 ...
- K8s服务发现组件-CoreDNS简介
CoreDNS,这是一种新的DNS服务器,旨在与Linux和Docker容器等配合使用,尤其是在由流行的容器编排系统Kubernetes管理的环境中尤其适用. 主要介绍CoreDNS的存在理由,以及它 ...
- k8s服务发现和负载均衡(转)
原文 http://m635674608.iteye.com/blog/2360095 kubernetes中如何发现服务 如何发现pod提供的服务 如何使用kube-dns发现服务 service: ...
最新文章
- 职场必读的经典励志故事
- 关于python的一些好的书籍推荐-如果只能推荐3本关于python的书,你会推荐哪3本?...
- 代表中国为世界做出探索,杭州城市大脑获IDC亚太区智慧城市大奖
- Android深度探索--HAL与驱动开发----第十章读书笔记
- 黑龙江省2021高考成绩排名查询,黑龙江高考排名对应学校-高考位次对应大学(2021年理科参考)...
- 问题 B: 算术基本运算 山东科技大学 oj c语言
- spring aop使用
- 【金融】【python】使用python处理多种期货数据指标
- Android studio R文件丢失或错误解决方法
- 高通平台音频调试常见问题点归纳
- java 虚拟机常用启动参数
- IMX8mp alsa音频调试
- 算法入门基础知识总结
- amazeui PHP,amazeui页面分析之登录页面
- 电脑键盘部分按键失灵_键盘按键失灵,教您电脑键盘失灵怎么办
- 这30个高质量的数据集网站,你必须要试试!
- 递归、迭代和分治(2):递归的典型例子
- 计算机的重要作用和正确使用的建议,引导孩子正确认识电脑和游戏的几点建议...
- mysql分页查询遇到order by发生的血案
- iframe 标签(用于嵌套网页)及loading加载动画效果