赞
踩
目录
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实现,用于仪表盘展示。
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、grafana、node-exporter
这里我下载下来上传了该附件,可自行下载
https://download.csdn.net/download/qq_40322236/87918488
拉去镜像:
- [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
访问grafana的地址http://192.168.159.180:32418/login,默认用户密码都是admin,登录后会默认让你修改密码
添加grafana 数据源,选择prometheus
把K8S的Dashboard的模板导入
导入315模板等待一会,或者可以下载好json文件,然后复制到下面的文本框中,点击load
最后就部署完成啦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。