多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Kubernetes集群资源监控 ## 概述 ### 监控指标 一个好的系统,主要监控以下内容 - 集群监控 - 节点资源利用率 - 节点数 - 运行Pods - Pod监控 - 容器指标 - 应用程序【程序占用多少CPU、内存】 ### 监控平台 使用普罗米修斯【prometheus】 + Grafana 搭建监控平台 - prometheus【定时搜索被监控服务的状态】 - 开源的 - 监控、报警、数据库 - 以HTTP协议周期性抓取被监控组件状态 - 不需要复杂的集成过程,使用http接口接入即可 - Grafana - 开源的数据分析和可视化工具 - 支持多种数据源 ![image-20201120082257441](https://img.kancloud.cn/22/ad/22adbfa3acc3dc25ca65fd305f261cce_958x394.png) ## 部署prometheus 首先需要部署一个守护进程 ![image-20201120083606298](https://img.kancloud.cn/90/e2/90e2c22193acaccbd0a277304d8b9795_256x24.png) ```bash --- apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: kube-system labels: k8s-app: node-exporter spec: selector: matchLabels: k8s-app: node-exporter template: metadata: labels: k8s-app: node-exporter spec: containers: - image: prom/node-exporter name: node-exporter ports: - containerPort: 9100 protocol: TCP name: http --- apiVersion: v1 kind: Service metadata: labels: k8s-app: node-exporter name: node-exporter namespace: kube-system spec: ports: - name: http port: 9100 nodePort: 31672 protocol: TCP type: NodePort selector: k8s-app: node-exporter ``` 然后执行下面命令 ```bash kubectl create -f node-exporter.yaml ``` 执行完,发现会报错 ![image-20201120084034160](https://img.kancloud.cn/50/41/504131ab86da5738655855f019eca44a_979x63.png) 这是因为版本不一致的问题,因为发布的正式版本,而这个属于测试版本 所以我们找到第一行,然后把内容修改为如下所示 ```bash # 修改前 apiVersion: extensions/v1beta1 # 修改后 【正式版本发布后,测试版本不能使用】 apiVersion: apps/v1 ``` 创建完成后的效果 ![image-20201120085721454](https://img.kancloud.cn/19/65/196534a864e204cc461a43096da8f71f_555x58.png) 然后通过yaml的方式部署prometheus ![image-20201120083107594](https://img.kancloud.cn/8c/43/8c43fbcda9bc353286291533fb18e6ee_409x290.png) - configmap:定义一个configmap:存储一些配置文件【不加密】 - prometheus.deploy.yaml:部署一个deployment【包括端口号,资源限制】 - prometheus.svc.yaml:对外暴露的端口 - rbac-setup.yaml:分配一些角色的权限 下面我们进入目录下,首先部署 rbac-setup.yaml ```bash kubectl create -f rbac-setup.yaml ``` ![image-20201120090002150](https://img.kancloud.cn/46/29/462997d236459d2f98cacc01fcf8b643_566x125.png) 然后分别部署 ```bash # 部署configmap kubectl create -f configmap.yaml # 部署deployment kubectl create -f prometheus.deploy.yml # 部署svc kubectl create -f prometheus.svc.yml ``` 部署完成后,我们使用下面命令查看 ```bash kubectl get pods -n kube-system ``` ![image-20201120093213576](https://img.kancloud.cn/cd/ae/cdae323c89709f76e26627755430d4bb_515x276.png) 在我们部署完成后,即可看到 prometheus 的 pod了,然后通过下面命令,能够看到对应的端口 ```bash kubectl get svc -n kube-system ``` ![image-20201121091348752](https://img.kancloud.cn/d8/0d/d80d4aeb5d450c9e9eef215067370341_653x96.png) 通过这个,我们可以看到 `prometheus` 对外暴露的端口为 30003,访问页面即可对应的图形化界面 ```bash http://192.168.177.130:30003 ``` ![image-20201121091508851](https://img.kancloud.cn/2d/6c/2d6c28bf06c2bafb99be537d52223523_1442x391.png) 在上面我们部署完prometheus后,我们还需要来部署grafana ```bash kubectl create -f grafana-deploy.yaml ``` 然后执行完后,发现下面的问题 ```bash error: unable to recognize "grafana-deploy.yaml": no matches for kind "Deployment" in version "extensions/v1beta1" ``` 我们需要修改如下内容 ```bash # 修改 apiVersion: apps/v1 # 添加selector spec: replicas: 1 selector: matchLabels: app: grafana component: core ``` 修改完成后,我们继续执行上述代码 ```bash # 创建deployment kubectl create -f grafana-deploy.yaml # 创建svc kubectl create -f grafana-svc.yaml # 创建 ing kubectl create -f grafana-ing.yaml ``` 我们能看到,我们的grafana正在 ![image-20201120110426534](https://img.kancloud.cn/85/d8/85d83cc28396d2f8df3643a4c8bc60e0_704x297.png) ### 配置数据源 下面我们需要开始打开 Grafana,然后配置数据源,导入数据显示模板 ```bash kubectl get svc -n kube-system ``` ![image-20201120111949197](https://img.kancloud.cn/d6/e3/d6e3532d1e1a194f1a69d2487a764feb_814x138.png) 我们可以通过 ip + 30431 访问我们的 grafana 图形化页面 ![image-20201120112048887](https://img.kancloud.cn/03/7f/037f57e0b7c7c12248e1ab63ee1dd02a_1094x686.png) 然后输入账号和密码:admin admin 进入后,我们就需要配置 prometheus 的数据源 ![image-20201121092012018](https://img.kancloud.cn/4e/e3/4ee32c423314b3caf9cb2f201d3b8572_1079x700.png) 和 对应的IP【这里IP是我们的ClusterIP】 ![image-20201121092053215](https://img.kancloud.cn/8f/36/8f3645c077e2dcf78a5c9ec746235d78_798x116.png) ### 设置显示数据的模板 选择Dashboard,导入我们的模板 ![image-20201121092312118](https://img.kancloud.cn/62/67/626796ae9cbb7795ee96304e9aaae7ca_449x478.png) 然后输入 315 号模板 ![image-20201121092418180](https://img.kancloud.cn/4d/6d/4d6de78ad20d05d53b122b96afe5cadf_948x583.png) 然后选择 prometheus数据源 mydb,导入即可 ![image-20201121092443266](https://img.kancloud.cn/af/e0/afe027dc19a1f681b177b40600200ccf_814x469.png) 导入后的效果如下所示 ![image-20201121092610154](https://img.kancloud.cn/75/ce/75ce24c682a2123d6c0fb551e6151c0a_1919x921.png)