当前位置:   article > 正文

Prometheus监控K8S

prometheus监控k8s

目录

一、描述

二、监控流程

三、Kubernetes监控指标

四、使用Prometheus监控k8s


一、描述

Cadvisor + node-exporter + prometheus + grafana是一套非常流行的Kubernetes监控方案。它们的功能如下:

- Cadvisor:容器资源监控工具,可以实时监控CPU、内存、存储、网络等容器指标,并暴露Metrics接口。

- node-exporter:节点级指标导出工具,可以监控节点的CPU、内存、磁盘、网络等指标,并暴露Metrics接口。

- Prometheus:时间序列数据库和监控报警工具,可以抓取Cadvisor和node-exporter暴露的Metrics接口,存储时序数据,并提供PromQL查询语言进行监控分析和报警。

- Grafana:图表和Dashboard工具,可以查询Prometheus中的数据,并通过图表的方式直观展示Kubernetes集群的运行指标和状态。

二、监控流程

1. 在Kubernetes集群的每个节点安装Cadvisor和node-exporter,用于采集容器和节点级指标数据。

2. 部署Prometheus,配置抓取Cadvisor和node-exporter的Metrics接口,存储 containers 和 nodes 的时序数据。

3. 使用Grafana构建监控仪表盘,选择Prometheus作为数据源,编写PromQL查询语句,展示K8S集群的CPU使用率、内存使用率、网络流量等监控指标。

4. 根据监控结果,可以设置Prometheus的报警规则,当监控指标超过阈值时发送报警信息。这套方案能够全面监控Kubernetes集群的容器和节点,通过Metrics指标和仪表盘直观反映集群状态,并实现自动报警,非常适合K8S环境下微服务应用的稳定运行。

具体实现方案如下:

- Cadvisor:在集群中每个节点作为DaemonSet部署cadvisor,采集容器Metrics。

- node-exporter:在每个节点也作为DaemonSet运行,采集节点Metrics。

- Prometheus:部署Prometheus Operator实现,作为Deployment运行,用于抓取Metrics和报警。

- Grafana:部署Grafana Operator实现,用于仪表盘展示。

三、Kubernetes监控指标

K8S本身的监控指标

1. CPU利用率:包括节点CPU利用率、Pod CPU利用率、容器CPU利用率等,用于监控CPU资源使用情况。

2. 内存利用率:包括节点内存利用率、Pod内存利用率、容器内存利用率等,用于监控内存资源使用情况。

3. 网络流量:节点网络流量、Pod网络流量、容器网络流量,用于监控网络收发包大小和带宽利用率。

4. 磁盘使用率:节点磁盘使用率,用于监控节点磁盘空间使用情况。

5. Pod状态:Pod的Running、Waiting、Succeeded、Failed等状态数量,用于监控Pod运行状态。

6. 节点状态:节点的Ready、NotReady和Unreachable状态数量,用于监控节点运行状态。

7. 容器重启次数:单个容器或Pod内所有容器的重启次数,用于监控容器稳定性。

8. API服务指标:Kubernetes API Server的请求LATENCY、请求QPS、错误码数量等,用于监控API Server性能。

9. 集群组件指标:etcd、kubelet、kube-proxy等组件的运行指标,用于监控组件运行状态。这些都是Kubernetes集群运行状态的关键指标,通过Prometheus等工具可以进行收集和存储,然后在Grafana中设计相应的Dashboard进行可视化展示。当这些指标超出正常范围时,也可以根据阈值设置报警,保证Kubernetes集群和服务的稳定运行。

例如:

- CPU利用率超过80%报警

- 内存利用率超过90%报警

- 网络流量/磁盘空间突增报警

- Pod/节点 NotReady状态超过10%报警 

- API Server请求LATENCY超过200ms报警

- etcd节点Down报警等等。

这些报警规则的设置需要根据集群大小和服务负载进行评估。

四、使用Prometheus监控k8s

部署前准备

下载prometheus、grafana、node-exporter

GitHub - redhatxl/k8s-prometheus-grafana: k8s monitor of prometheus-grafanak8s monitor of prometheus-grafana. Contribute to redhatxl/k8s-prometheus-grafana development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/redhatxl/k8s-prometheus-grafana.git
 

 这里我下载下来上传了该附件,可自行下载

https://download.csdn.net/download/qq_40322236/87918488

拉去镜像:

  1. [root@master ~]# docker pull prom/node-exporter 
  2. [root@master ~]# docker pull prom/prometheus:v2.0.0
  3. [root@master ~]# docker pull grafana/grafana:6.1.4

解压zip得到如下

  1. [root@master prometheus]# ls
  2. k8s-prometheus-grafana-master k8s-prometheus-grafana-master.zip
  3. [root@master prometheus]# cd k8s-prometheus-grafana-master/
  4. [root@master k8s-prometheus-grafana-master]# ls
  5. grafana node-exporter.yaml prometheus README.md
  6. [root@master k8s-prometheus-grafana-master]# ll
  7. 总用量 8
  8. drwxr-xr-x 2 root root 81 1月 7 2019 grafana
  9. -rw-r--r-- 1 root root 714 6月 13 22:29 node-exporter.yaml
  10. drwxr-xr-x 2 root root 106 1月 7 2019 prometheus
  11. -rw-r--r-- 1 root root 117 6月 13 22:29 README.md

先安装node-exporter.yaml

  1. [root@master k8s-prometheus-grafana-master]# kubectl apply -f node-exporter.yaml
  2. daemonset.apps/node-exporter created
  3. service/node-exporter created
  4. [root@master k8s-prometheus-grafana-master]# kubectl get pods -A
  5. NAMESPACE NAME READY STATUS RESTARTS AGE
  6. kube-system coredns-9d85f5447-7nhgv 1/1 Running 5 22d
  7. kube-system coredns-9d85f5447-sfr9j 1/1 Running 5 22d
  8. kube-system etcd-master 1/1 Running 6 22d
  9. kube-system kube-apiserver-master 1/1 Running 6 22d
  10. kube-system kube-controller-manager-master 1/1 Running 7 22d
  11. kube-system kube-flannel-ds-77w47 1/1 Running 4 22d
  12. kube-system kube-flannel-ds-trrcv 1/1 Running 6 22d
  13. kube-system kube-flannel-ds-xcqgs 1/1 Running 4 22d
  14. kube-system kube-proxy-674k4 1/1 Running 4 22d
  15. kube-system kube-proxy-7l9bk 1/1 Running 6 22d
  16. kube-system kube-proxy-kd449 1/1 Running 4 22d
  17. kube-system kube-scheduler-master 1/1 Running 7 22d
  18. kube-system metrics-server-59d984f5b7-2nt8z 2/2 Running 8 22d
  19. kube-system node-exporter-5swxx 1/1 Running 1 3d
  20. kube-system node-exporter-pbx6c 1/1 Running 1 3d
  21. [root@master k8s-prometheus-grafana-master]# kubectl get daemonset -A
  22. NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
  23. kube-system kube-flannel-ds 3 3 3 3 3 <none> 22d
  24. kube-system kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 22d
  25. kube-system node-exporter 2 2 2 2 2 <none> 3d
  26. [root@master k8s-prometheus-grafana-master]# kubectl get service -A
  27. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  28. default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22d 3d
  29. kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 22d
  30. kube-system node-exporter NodePort 10.102.164.149 <none> 9100:31672/TCP 3d 3d

部署prometheus

  1. [root@master k8s-prometheus-grafana-master]# cd prometheus/
  2. [root@master prometheus]# ls
  3. configmap.yaml prometheus.deploy.yml prometheus.svc.yml rbac-setup.yaml
  4. [root@master prometheus]# kubectl apply -f rbac-setup.yaml
  5. clusterrole.rbac.authorization.k8s.io/prometheus configured
  6. serviceaccount/prometheus configured
  7. clusterrolebinding.rbac.authorization.k8s.io/prometheus configured
  8. [root@master prometheus]# kubectl apply -f configmap.yaml
  9. configmap/prometheus-config configured
  10. [root@master prometheus]# kubectl apply -f prometheus.deploy.yml
  11. deployment.apps/prometheus created
  12. [root@master prometheus]# kubectl apply -f prometheus.svc.yml
  13. service/prometheus created

部署grafana

  1. [root@master prometheus]# cd ../grafana/
  2. [root@master grafana]# ls
  3. grafana-deploy.yaml grafana-ing.yaml grafana-svc.yaml
  4. [root@master grafana]# kubectl apply -f grafana-deploy.yaml
  5. deployment.apps/grafana-core created
  6. [root@master grafana]# kubectl apply -f grafana-svc.yaml
  7. service/grafana created
  8. [root@master grafana]# kubectl apply -f grafana-ing.yaml
  9. ingress.extensions/grafana created

 查看前面安装的pod和service 

访问http://192.168.159.180:31672/metrics,这是node-exporter采集的数据

 

 访问prometheus地址http://192.168.159.180:30003/graph

访问grafana的地址http://192.168.159.180:32418/login,默认用户密码都是admin,登录后会默认让你修改密码

 

添加grafana 数据源,选择prometheus 

 

 

 

 

把K8S的Dashboard的模板导入

导入315模板等待一会,或者可以下载好json文件,然后复制到下面的文本框中,点击load

最后就部署完成啦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/122517
推荐阅读
相关标签
  

闽ICP备14008679号