0


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.https://github.com/redhatxl/k8s-prometheus-grafana.git

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

拉去镜像:

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

解压zip得到如下

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

先安装node-exporter.yaml

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

部署prometheus

[root@master k8s-prometheus-grafana-master]# cd prometheus/
[root@master prometheus]# ls
configmap.yaml  prometheus.deploy.yml  prometheus.svc.yml  rbac-setup.yaml
[root@master prometheus]# kubectl apply -f rbac-setup.yaml
clusterrole.rbac.authorization.k8s.io/prometheus configured
serviceaccount/prometheus configured
clusterrolebinding.rbac.authorization.k8s.io/prometheus configured
[root@master prometheus]# kubectl apply -f configmap.yaml
configmap/prometheus-config configured
[root@master prometheus]# kubectl apply -f prometheus.deploy.yml
deployment.apps/prometheus created
[root@master prometheus]# kubectl apply -f prometheus.svc.yml
service/prometheus created

部署grafana

[root@master prometheus]# cd ../grafana/
[root@master grafana]# ls
grafana-deploy.yaml  grafana-ing.yaml  grafana-svc.yaml
[root@master grafana]# kubectl apply -f grafana-deploy.yaml
deployment.apps/grafana-core created
[root@master grafana]# kubectl apply -f grafana-svc.yaml
service/grafana created
[root@master grafana]# kubectl apply -f grafana-ing.yaml
ingress.extensions/grafana created

查看前面安装的pod和service

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

访问prometheus地址http://192.168.159.180:30003/graph![](https://img-blog.csdnimg.cn/7536b962c71b450b86fc5af3adec171c.png)

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

添加grafana 数据源,选择prometheus

把K8S的Dashboard的模板导入

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

最后就部署完成啦


本文转载自: https://blog.csdn.net/qq_40322236/article/details/131197196
版权归原作者 阿德小仔 所有, 如有侵权,请联系我们删除。

“Prometheus监控K8S”的评论:

还没有评论