K8s监控需要考虑以下几方面:

  • Kubernetes节点的监控:node节点的cpu、负载、内存、硬盘等指标

  • 内部系统组件的状态:kube-scheduler、kube-controller-manager、kubedns/coredns等组件的运行状态

  • metrics:Deployment的状态、资源请求、调度和API延迟等数据指标

Kube-prom的组成如下

通过 kube-prometheus 监控 k8s | 运维进阶_java

1. node-export监控

我们使用prometheus来监控k8s node状态和性能,采集节点的监控指标,可以通过node_exporter获 取,node_exporter就是抓取用于采集服务器节点的各种运行指标,目,比如cpu、distats、loadavg、meminfo、netstat等。

使用DeamonSet控制器来部署该pod,这样每一个节点都会运行一个Pod,如果我们从集群中删除或添加节点后,也会进行自动扩展,

node-exporter.yaml样例如下:

通过 kube-prometheus 监控 k8s | 运维进阶_java_02

通过 kube-prometheus 监控 k8s | 运维进阶_java_03

通过 kube-prometheus 监控 k8s | 运维进阶_java_04

通过 kube-prometheus 监控 k8s | 运维进阶_java_05

执行kubectl get pod -n monitoring  -o  wide 或oc get pods -n openshift-monitoring  -o  wide(关于OpenShift命令行,本小节不再赘述)

可以查到node-exporter的pod状态在k8s节点上, curl 127.0.0.1:9100/metrics,可以获取到数据,说明成功收集

配置node-exporter-service.yaml 

输入kubectl get svc -n monitoring  -o  wide  |grep  node

输出以下

表示service配置完成

2. kube-state-metrics

kube-state-metrics本质上是不断轮询api-server,kube-state-metrics关注于获取k8s各种资源的最新状态,如deployment或者daemonset,而kube-state-metrics是将k8s的运行状况在内存中做了个快照,并且获取新的指标。

配置kube-state-metrics-deployment.yaml样式

配置  kube-state-metrics-service.yaml api

查看pod和svc

kubectl get pod -n monitoring  -o  wide  |grep  state 

kubectl get svc -n monitoring  -o  wide  |grep  state

检查状态是否正常

3. grafana监控

我们使用grafana展示kube-prom的信息状态监控

grafana-deployment.yaml样式如下:

通过 kube-prometheus 监控 k8s | 运维进阶_java_06

通过 kube-prometheus 监控 k8s | 运维进阶_java_07

通过 kube-prometheus 监控 k8s | 运维进阶_java_08

通过 kube-prometheus 监控 k8s | 运维进阶_java_09

通过 kube-prometheus 监控 k8s | 运维进阶_java_10

通过 kube-prometheus 监控 k8s | 运维进阶_java_11grafana-service.yaml样式如下:通过 kube-prometheus 监控 k8s | 运维进阶_java_12

查看grafana  service  pod

kubectl get  pod,svc  -n  monitoring  -o  wide  |grep   grafana

通过 kube-prometheus 监控 k8s | 运维进阶_java_13

访问grafana后台,浏览器访问http://ip:23000/login

(可以去grafana官网搜寻需要监控的模板)

通过 kube-prometheus 监控 k8s | 运维进阶_java_14

可以查看k8s容器的内存,CPU等资源的使用率

通过 kube-prometheus 监控 k8s | 运维进阶_java_15

可以查看有问题的容器副本

在alert里面可以配置报警规则

通过 kube-prometheus 监控 k8s | 运维进阶_java_16

可以配置pod宕机发送报警