一、前言
本文属于Kubernetes工作实践类,工作中,在机器上安装好了kubernetes之后,需要同时安装好prometheus+grafana监控。
本文工程代码(node-exporter.yaml + prometheus.yaml + grafana.yaml)
https://www.syjshare.com/res/PVP90A7J
二、K8s监控系统架构
2.1 Prometheus简介
prometheus 官网 :https://prometheus.io/
prometheus github :https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus
grafana 官网:https://grafana.com/grafana/dashboards
对于开发,
官网的价值在于所有API都在这里
github的价值在于下载下来,定制化修改一下,就可以打一个镜像
常用功能直接百度/谷歌都有人做过,实际问题直接百度/谷歌都有人解决过
2.2 Prometheus架构
![](https://filescdn.proginn.com/07d4948cf9d022a24f4b532b66351288/4c55be15f7754940be131998662f4164.webp)
2.3 Prometheus知识普及
1、支持pull、push数据添加方式
2、支持k8s服务发现
3、提供查询语言PromQL
4、时序(time series)是由名字(Metric)以及一组key/value标签定义的
5、数据类型
三、K8s监控系统搭建
3.1 三类数据采集metrics
metrics 是一个接口 然后将 metrics 的数据给 普罗米修斯 ,下面介绍三类:
nodeExporter通过自己的 /metrics 接口得到数据,给prometheus;
静态pod通过自带的 /metrics 接口得到数据,给prometheus;
第一,K8S集群每个服务器数据
通过NodeExporter:https://github.com/prometheus/node_exporter
k8s集群每个机器node都安装一个NodeExporter(使用daemonSet部署方式就要确保每个node都安装上了)
理论支持:exporter 是一个数据采集工具,除了Node Exporter之外,还有HAProxy Exporter、MySQL Exporter、Redis Exporter和Rabbitmq Exporter。
第二,K8S集群每个组件数据:k8s每个组件都有metrics接口,如下:
ETCD:https://ip:2379/metrics
APIServer:https://ip:6443/metrics
ControllerManager:https://ip:10252/metrics
Scheduler:https://ip:10251/metrics
理论支持:k8s四个静态pod的kubectl底层都是有 restful 风格的接口支持的,所以通过 /metrics 接口获取数据是可行的。
第三,容器数据:通过cAdvisor,
![](https://filescdn.proginn.com/5f6314af5b847b962707fbc3ea496e29/f06cd31410be98f4e300246f00ad2ecf.webp)
3.2 Prometheus+Grafana
在master上创建prometheus目录
(1)创建命名空间ns-monitor
(2)创建node-exporter
namespace.yaml node-exporter.yaml prometheus.yaml grafana.yaml ingress.yaml
kubectl apply -f namespace.yaml
kubectl get namespace
(3)部署prometheus pod
包含rbac认证、ConfigMap等 注意 :记得修改prometheus.yaml文件中的ip为master的ip和path[PV需要使用到]
(4)部署grafana
(5)增加域名访问[没有域名好像没有灵魂] 前提 :配置好ingress controller和域名解析
3.3 实践一下:将prometheus+grafana搭建起来
3.3.1 搭建
# 下载好镜像(所需要的三个镜像都可以下载到,无需科学上网)
docker pull prom/node-exporter:v0.16.0
docker pull prom/prometheus:latest
docker pull grafana/grafana:latest
# 新建目录和命名空间,并上传三个yaml到目录中
mkdir /root/ns-monitor # 用来存放三个yaml文件
kubectl create ns ns-monitor
# 配置好nfs和需要新增的目录
mkdir /nfs/data/prometheus
mkdir /nfs/data/grafana
# 第一步,安装nfs
yum install -y nfs-utils
# 第二步,创建nfs目录并授予权限 /nfs/data/nginx 这个目录就是nfs ip那个目录
# 创建nfs目录
mkdir -p /nfs/data/
# 授予权限
chmod -R 777 /nfs/data
# 第三步,编辑export文件并保存
# 编辑export文件 对于/nfs/data目录,授予可读可写权限、根目录权限、同步数据权限
vi /etc/exports
/nfs/data *(rw,no_root_squash,sync)
# 使得配置生效
exportfs -r
# 查看生效
exportfs
# 第四步,启动rpcbind、nfs服务并验证
# 启动rpcbind、nfs服务,并验证两个服务启动 ps -ef|grep rpcbind ps -ef|grep nfs
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
# 查看rpc服务的注册情况
rpcinfo -p localhost
# showmount测试
# showmount命令用于查询NFS服务器的相关信息 -e或--exports 显示NFS服务器的输出清单。
showmount -e master-ip
showmount -e 192.168.100.151
3.3.2 分步测试
注意分步验证:
验证node exporter
验证 普罗米修斯
验证 grafana
3.3.2.1 安装 node exporter 测试好了
![](https://filescdn.proginn.com/5ae14a7e5c801941ec1a2ff79967e42d/dc7f849378d5cefd73d0c32abdbb1637.webp)
3.3.2.2 使用kubernetes部署prometheus
关于prometheus.yaml,从界面验证各个yaml
(1) 验证 kubectl get all -n ns-monitor | kubectl get pv,pvc -A
(2) 持久化:验证 pv pvc 去 /nfs/data/prometheus 目录下
(3) configmap:验证 configmap 去service discovery
(4) rbac:验证 rbac 能运行起来就验证了 (rbac是apiserver四特性中的第二特性,如果rbac配置错误,无法apply成功)
(5) deployment-service:验证 deployment service 能看到界面就验证好了
![](https://filescdn.proginn.com/08aec445a7eef6574f85f67a46e77083/6a24b42ac51dc6db6fa7edd20fc13408.webp)
kubectl get all -n ns-monitor 服务启动成功
kubectl get pv,pvc -A 持久化绑定bound成功
![](https://filescdn.proginn.com/a1fddd0fa88babfd2a8ab54687e6e95e/e5e036f156d6edfe305fff7e1f88f00f.webp)
验证启动:192.168.100.151:30841 (prometheus服务的 nodePort 暴露的出来端口)
![](https://filescdn.proginn.com/39906c9a2475c3b9e193551ec41381cc/c95967ec08f936d1b36ddf5325c89420.webp)
http://192.168.100.151:30841/targets 查看所有的/metrics的数据被prometheus监控到了,如下:
![](https://filescdn.proginn.com/84487100a9166d1db1f504b4e14eeb51/cc0440686843eb3606c3566af53efea9.webp)
进入 /nfs/data/prometheus ,这里表示持久化完成
![](https://filescdn.proginn.com/7d91d17553a45b93ac511af21094396a/f34f35fa3c27ee9bb00d22840e2d28b9.webp)
3.3.2.3 grafana测试成功
![](https://filescdn.proginn.com/b93ee54fac05710a3b124a70d954f057/ef6162b88a63b9594be65232b8dd4da4.webp)
![](https://filescdn.proginn.com/71ee766dddf011d7dbb54dc9143d208c/fe80496a00365d2f97b790899e3c9374.webp)
![](https://filescdn.proginn.com/0d70841d05773580b57db41024554733/a7f37ab8e762c709458d82306c4b1098.webp)
最后解释一下,pv pvc 如何匹配上的
![](https://filescdn.proginn.com/cb7a200ffb085ba489fd2263956d142e/a48c140aaf1abe107791dc7d9e8070fd.webp)
3.3.3 Grafana将同一个集群中的prometheus配置为数据源datasource
![](https://filescdn.proginn.com/ee57d6e8e371cc085677dc5ee2d3d334/5beee2a196820f3f4f5237f48c74761f.webp)
![](https://filescdn.proginn.com/7167262454fa055561386046da6cb076/a59aee11fbedd8d3dae81efa27c54d57.webp)
![](https://filescdn.proginn.com/c41079f4be7435185139f791747e7325/4017cfd52b2aa981b0528e81344d090f.webp)
3.3.4 Grafana导入Dashboard和查看Dashboard
3.3.4.1 Grafana导入看板Dashboard的三种方式
![](https://filescdn.proginn.com/776167bc177ff6b3692cdc263a2b2ddd/f1bee16ef3f00dcb06e301419095c649.webp)
所有的dashboard看板实际就是一个json文件,三个红色框框表示三种方式
第一种,将电脑本地的JSON导入到Grafana中
第二种,官网下载地址:https://grafana.com/grafana/dashboards,进入到官网,将ID复制过来,点击右边的Load
![](https://filescdn.proginn.com/cc8a902206708d4bfeaea46c882be67f/e6a75ac141e4d5ab2f155f7168ad60ae.webp)
第三种,直接将JSON字符串的内容复制过来,点击下面的Load
3.3.4.2 Grafana查看看板Dashboard
![](https://filescdn.proginn.com/6681a63a3e95159c7b26f6db43c47179/fdc25ba054da6fa2351b40f7510b74d2.webp)
四、尾声
finish!!!
Learn technology well, Day Day Up !