小白到运维工程师自学之路 第七十七集 (基于Prometheus监控Kubernetes集群)

news/2025/2/14 3:05:44/

一、Prometheus简介

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB);Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本;2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目;Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据),相比功能更完善、更全面;Prometheus性能也足够支撑上万台规模的集群  。官网地址:Prometheus - Monitoring system & time series database

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。目前官方最新版本为2-23.e版本。

二、Prometheus优势

  1. 多维度数据模型。
  2. 灵活的查询语言。
  3. 不依赖分布式存储,单个服务器节点是自主的。
  4. 通过基于HTTP的pull方式采集时序数据。
  5. 可以通过中间网关进行时序列数据推送。
  6. 通过服务发现或者静态配置来发现目标服务对象。
  7. 支持多种多样的图表和界面展示,比如Grafana等。

三、Prometheus工作服务过程

  1. Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup服务注册与发现等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
  2. Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
  3. Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
  4. PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
  5. Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

四、prometheus核心组件

  1. Server 主要负责数据采集和存储,提供PromQL查询语言的支持
  2. Alertmanager 警告管理器,用来进行报警
  3. Push Gateway 主要是实现接收由Client push过来的指标数据,在指定的时间间隔,由主程序来抓取。
  4. node_exporter 用来监控服务器CPU、内存、磁盘、I/O等信息。

五、prometheus实践架构图

 

六、Grafana简介

Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器。支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。

七、Grafana特点

  1. Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器。支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。
  2. Grafana支持许多不同的时间序列数据(数据源)存储后端。每个数据源都有一个特定查询编辑器。官方支持以下数据源:Graphite、infloxdb、opensdb、prometheus、elasticsearch、cloudwatch。每个数据源的查询语言和功能明显不同。你可以将来自多个数据源的数据组合到一个仪表板上,但每个面板都要绑定到属于特定组织的特定数据源。
  3. Grafana中的警报允许您将规则附加到仪表板面板上。保存仪表板时,Gravana会将警报规则提取到单独的警报规则存储中,并安排它们进行评估。报警消息还能通过钉钉、邮箱等推送至移动端。但目前grafana只支持graph面板的报警。
  4. Grafana使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
  5. Grafana使用Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询

八、环境准备

 

1、安装kubernetes

2、安装docker

由于k8s和docker已经部署了,直接部署Prometheus

九、部署测试应用

所有node主机导入测试镜像
docker load < nginx-1.19.tar 
docker tag nginx nginx:1.19.6在Kubernetes集群master中创建一个pod,验证是否正常运行。
mkdir demo
cd demo
vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector: matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.19.6ports:- containerPort: 80

执行后查看状态
kubectl create -f nginx-deployment.yaml
kubectl get pods
kubectl get pods -o wide

创建nginx负载均衡网络
vim nginx-service.yaml
kind: Service
apiVersion: v1
metadata:name: nginx-service
spec:selector:app: nginxtype: NodePortports:- protocol: TCPport: 80targetPort: 80

kubectl create -f nginx-service.yaml
kubectl get svc

 访问网页测试

十、部署Prometheus监控平台

1、准备Prometheus相关YAML文件

在master节点/opt目录下新建pgmonitor目录
mkdir /opt/pgmonitor
cd /opt/pgmonitor
下载yaml文件到此目录

2、部署prometheus

部署守护进程
kubectl create -f node-exporter.yaml
部署rbac
kubectl create -f rbac-setup.yaml
部署configmap.yaml
kubectl create -f configmap.yaml
部署prometheus.deploy.yml
kubectl create -f prometheus.deploy.yml
部署prometheus.svc.yml
查看prometheus状态
kubectl get pods -n kube-system

十一、部署Grafana服务 

1、部署Grafana相关yaml文件

部署grafana-deploy.yaml
kubectl create -f grafana-deploy.yaml
部署grafana-svc.yaml
kubectl create -f grafana-svc.yaml
部署grafana-ing.yaml
kubectl create -f grafana-ing.yaml
查看Grafana状态
kubectl get pods -n kube-system

十二、配置Grafana数据源 

查看grafana的端口
kubectl get svc -n kube-system

以上就是基于Prometheus监控Kubernetes集群的具体操作

如有错误欢迎各位大佬批评指正,我们共同进步

 


http://www.ppmy.cn/news/1039487.html

相关文章

RP2040开发板自制树莓派逻辑分析仪

目录 前言 1 准备工作和前提条件 1.1 Raspberry Pi Pico RP2040板子一个 1.2 Firmware-LogicAnalyzer-5.0.0.0-PICO.uf2固件 1.3 LogicAnalyzer-5.0.0.0-win-x64软件 2 操作指南 2.1 按住Raspberry Pi Pico开发板的BOOTSEL按键&#xff0c;再接上USB接口到电脑 2.2 刷入…

(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)

&#xff08;一&#xff09;Git连接GitHub的全部流程https://blog.csdn.net/m0_65992672/article/details/132333727 团队内协作 项目经理通过git push将代码推送到远程仓库【也就是git、gitee等代码托管中心】,推完以后组员可以通过git clone克隆下来代码&#xff0c;如果组…

720全景虚拟三维数字展馆丰富了营销体验

传统的展览形式往往受到场地和空间的限制&#xff0c;展品数量和种类有限。而3D数字展厅突破了时空的束缚&#xff0c;企业可以将更多的产品、服务和文化元素以数字化形式展示&#xff0c;无需考虑展览面积和运输成本&#xff0c;大大提升了展览的灵活性和内容丰富度。数字化虚…

k8s简介及虚拟机快速搭建k8s集群

文章目录 1、k8s简介1.1、部署方式的变迁1.2、定义1.3、Kubernetes提供的功能 2、虚拟机快速搭建k8s集群2.1、虚拟机配置&#xff08;centos7 2G内存2个处理器&#xff09;2.2、基础环境准备2.3、docker安装&#xff08;易踩坑&#xff09;2.4、安装k8s组件2.5、master节点部署…

php报错Inf and NaN cannot be JSON encoded怎么处理

在 PHP 中&#xff0c;如果尝试将 Inf&#xff08;正无穷大&#xff09; 和 NaN&#xff08;不是数字&#xff09;这样的特殊值直接用json_encode转换为 JSON 格式&#xff0c;就会出现报错 "Inf and NaN cannot be JSON encoded"。要处理这个问题&#xff0c;可以采…

谷歌在Chrome浏览器中推进抗量子加密技术

近日&#xff0c;Chromium博客上发表的一篇博文称&#xff0c;为了加强网络安全&#xff0c;应对迫在眉睫的量子计算机威胁&#xff0c;谷歌各个团队密切合作&#xff0c;为网络向抗量子密码学的过渡做好准备。 谷歌的Chrome团队在博客中写道&#xff0c;该项目涉及修订技术标准…

GraphQL strawberry的使用回顾和体会

GraphQL vs RESTful 简单来说GraphQL 比起 RESTful 集成额外一些功能 出入参校验、序列化 (简化后端编程)自由可选的返回数据字段 (简化一些多余接口开发和沟通联调成本) 这些都是优点了。 开发效率在项目初期是很重要的&#xff0c;需要快速原型化。 但是后期稳定后&#…

2023-08-17力扣每日一题

链接&#xff1a; 1444. 切披萨的方案数 题意&#xff1a; 给定一个矩阵&#xff0c;其中含有多个苹果&#xff0c;需要切割k-1次,每次可以切割多行/多列&#xff0c;需要保证切割两个部分都有苹果&#xff0c;移除靠上/靠右的部分&#xff0c;对留下部分进行后续的切割&…