一、 概述

1.1 监控指标

一个好的系统,主要监控以下内容

  • 集群监控
    • 节点资源利用率
    • 节点数
    • 运行Pods
  • Pod监控

    • 容器指标
    • 应用程序【程序占用多少CPU、内存】

      1.2 监控平台

      搭建方案:使用普罗米修斯【prometheus】 + Grafana 搭建监控平台
  • prometheus【定时搜索被监控服务的状态】

    • 开源的
    • 监控、报警、数据库
    • 以HTTP协议周期性抓取被监控组件状态
    • 不需要复杂的集成过程,使用http接口接入即可
  • Grafana
    • 开源的数据分析和可视化工具
    • 支持多种数据源

Kubernetes集群资源监控 - 图1

二、 部署prometheus

  1. 首先需要部署一个守护进程

Kubernetes集群资源监控 - 图2

  1. mkdir pgmoniyor
  1. ---
  2. apiVersion: apps/v1
  3. kind: DaemonSet
  4. metadata:
  5. name: node-exporter
  6. namespace: kube-system
  7. labels:
  8. k8s-app: node-exporter
  9. spec:
  10. selector:
  11. matchLabels:
  12. k8s-app: node-exporter
  13. template:
  14. metadata:
  15. labels:
  16. k8s-app: node-exporter
  17. spec:
  18. containers:
  19. - image: prom/node-exporter
  20. name: node-exporter
  21. ports:
  22. - containerPort: 9100
  23. protocol: TCP
  24. name: http
  25. ---
  26. apiVersion: v1
  27. kind: Service
  28. metadata:
  29. labels:
  30. k8s-app: node-exporter
  31. name: node-exporter
  32. namespace: kube-system
  33. spec:
  34. ports:
  35. - name: http
  36. port: 9100
  37. nodePort: 31672
  38. protocol: TCP
  39. type: NodePort
  40. selector:
  41. k8s-app: node-exporter

然后执行下面命令

  1. kubectl create -f node-exporter.yaml

执行完,发现会报错
Kubernetes集群资源监控 - 图3
这是因为版本不一致的问题,因为发布的正式版本,而这个属于测试版本
所以我们找到第一行,然后把内容修改为如下所示

  1. # 修改前
  2. apiVersion: extensions/v1beta1
  3. # 修改后 【正式版本发布后,测试版本不能使用】
  4. apiVersion: apps/v1

创建完成后的效果
Kubernetes集群资源监控 - 图4

然后通过yaml的方式部署prometheus

下面我们进入目录下,首先部署 rbac-setup.yaml

  1. kubectl create -f rbac-setup.yaml

Kubernetes集群资源监控 - 图5
然后分别部署

  1. # 部署configmap
  2. kubectl create -f configmap.yaml
  3. # 部署deployment
  4. kubectl create -f prometheus.deploy.yml
  5. # 看看版本对不对
  6. # 部署svc
  7. kubectl create -f prometheus.svc.yml

部署完成后,我们使用下面命令查看

  1. kubectl get pods -n kube-system

image.png
在我们部署完成后,即可看到 prometheus 的 pod了,然后通过下面命令,能够看到对应的端口

  1. kubectl get svc -n kube-system

image.png
通过这个,我们可以看到 prometheus 对外暴露的端口为 30003,访问页面即可对应的图形化界面

  1. http://10.4.104.169:30003

image.png
在上面我们部署完prometheus后,我们还需要来

三、 部署grafana

资料:链接
grafana-deploy.yaml

  1. kubectl create -f grafana-deploy.yaml

然后执行完后,发现下面的问题

  1. error: unable to recognize "grafana-deploy.yaml": no matches for kind "Deployment" in version "extensions/v1beta1"

我们需要修改如下内容

  1. # 修改
  2. apiVersion: apps/v1
  3. # 添加selector
  4. spec:
  5. replicas: 1
  6. selector:
  7. matchLabels:
  8. app: grafana
  9. component: core
  10. template:
  11. metadata:
  12. labels:
  13. app: grafana
  14. component: core

修改完成后,我们继续执行上述代码
grafana-svc.yaml
grafana-ing.yaml

  1. # 创建deployment
  2. kubectl create -f grafana-deploy.yaml
  3. # 创建svc
  4. kubectl create -f grafana-svc.yaml
  5. # 创建 ing
  6. kubectl create -f grafana-ing.yaml

我们能看到,我们的grafana正在
image.png

四、 配置数据源

下面我们需要开始打开 Grafana,然后配置数据源,导入数据显示模板

  1. kubectl get svc -n kube-system

image.png
我们可以通过 ip + 32381 访问我们的 grafana 图形化页面
Kubernetes集群资源监控 - 图11
然后输入账号和密码:admin admin
进入后,我们就需要配置 prometheus 的数据源
image.png
和 对应的IP【这里IP是我们的ClusterIP】
image.png

五、 设置显示数据的模板

选择Dashboard,导入我们的模板
Kubernetes集群资源监控 - 图14
然后输入 315 号模板
Kubernetes集群资源监控 - 图15
输入315
image.png
报错!!

然后选择 prometheus数据源 mydb,导入即可
Kubernetes集群资源监控 - 图17
导入后的效果如下所示
Kubernetes集群资源监控 - 图18