k8s与Prometheus

课程目标

  1. 掌握Prometheus的监控原理

  2. 完成Prometheus的搭建

  3. 完成Prometheus对k8s资源的监控

课程实验

  1. k8s集群监控Prometheus的使用实验

课堂引入

  1. k8s集群涉及到大量的资源,我们需要掌握资源的使用情况,那就必须对资源进行监控

授课进程

一、概述
1、概述

Prometheus是一个开源的系统监控和警报工具包,自2012成立以来,许多公司和组织采用了Prometheus。它现在是一个独立的开源项目,并独立于任何公司维护。在2016年,Prometheus加入云计算基金会作为Kubernetes之后的第二托管项目。Prometheus性能也足够支撑上万台规模的集群。

官网地址:http://www.prometheus-fund.com/ githup地址:https://github.com/prometheus

image-20241019144523163

image-20241019143928906

2、特性

整个Prometheus生态包含多个组件,除了Prometheus server组件其余都是可选的:

  • Prometheus Server:主要的核心组件,用来收集和存储时间序列数据

  • Client Library::客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics

  • push gateway:主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter

  • Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus

  • Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等

组件说明:

(1)Prometheus server:服务核心组件,采用 pull 方式收集 apiserver、scheduler、controller-manager、kubelet 组件数据, 通过 http 协议传输。并存储时间序列数据。
(2)Exporters/Jobs:负责收集不支持Instrumentation的目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。
●Node-Exporter:用于收集k8s集群中各node节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。
●Kube-State-Metrics:为prometheus采集k8s资源数据的exporter,通过监听APIServer收集kubernetes集群内资源对象的状态指标数据,例如pod、deployment、service等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。
需要注意的是kube-state-metrics只是简单的提供一个metrics数据,并不会存储这些指标数据,所以可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是running/stopped/terminated状态?Pod重启了多少次?有多少job在运行中。
●cadvisor:用来监控容器内部使用资源的信息,比如 CPU、内存、网络I/O、磁盘I/O。
●blackbox-exporter:监控业务容器存活性。
(3)Service Discovery:服务发现,Prometheus支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。 基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据。
(4)Alertmanager:是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉等。
(5)Pushgateway:类似一个中转站,Prometheus 的 server 端只会使用 pull 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的 server 拉取的中转站。 可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后 Prometheus server 统一从 Pushgateway 拉取数据。
(6)Grafana:是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。
3、架构及原理

image-20240619203056199

  • 基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。

这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

  • Prometheus三大套件

Server 主要负责数据采集和存储,提供PromQL查询语言的支持。

Alertmanager 警告管理器,用来进行报警。

Push Gateway 支持临时性Job主动推送指标的中间网关。

  • 服务过程

Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。

Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。

Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。

Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。

PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

4、版本

K8S和Pormetheus的配套关系:

image-20241019143556191

最新的版本配套关系查看kube-prometheus官方仓库:https://github.com/prometheus-operator/kube-prometheus ,可以切换版本查看配套关系。

kube-prometheus 和 kube-prometheus-stack 区别

"kube-prometheus" 和 "kube-prometheus-stack" 本质上是同一个项目,只是在不同的时间和版本中使用了不同的名称。"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,它提供了更多的功能、改进和修复。
​
最初,项目被称为 "kube-prometheus",但随着时间的推移,项目团队对项目进行了大量的改进和扩展,并将其重命名为 "kube-prometheus-stack",以更好地反映其提供的综合性监控解决方案。
"kube-prometheus-stack"(或简称 "kube-prometheus")是一个在 Kubernetes 集群中部署和管理 Prometheus 监控系统以及相关组件的综合解决方案。它集成了 Prometheus、Grafana、Alertmanager 等一系列组件,还包括预配置的监控规则和仪表盘,以及一键部署功
能。用户可以通过部署 "kube-prometheus-stack" 来快速启动一个全面的 Kubernetes 集群监控系统,无需逐个配置各个组件。
​
总结起来,"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,提供更多的功能和改进,是一个便捷的综合性监控解决方案,适合在 Kubernetes 环境中快速部署和使用
5、grafana

Grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。

官网地址: https://grafana.com/

image-20241019144401631

6、alertmanager

Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器。Prometheus的警报分为两个部分。Prometheus服务器中的警报规则将警报发送到Alertmanager。该Alertmanager 然后管理这些警报,包括沉默,抑制,聚集和通过的方法,如电子邮件发出通知,对呼叫通知系统,以及即时通讯平台。

官网地址:https://prometheus.io/docs/alerting/latest/alertmanager/

二、安装
1、下载安装文件
# 下载压缩包
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.11.0.tar.gz
# 创建目录
mkdir prometheus
# 文件拷贝
cp /root/kube-prometheus-0.11.0.tar.gz /root/prometheus/
# 解压缩
cd /root/prometheus/
tar -xf kube-prometheus-0.11.0.tar.gz
2、修改配置

镜像替换:替换为国内镜像地址

# 搜索镜像
grep k8s.gcr.io manifests/*
# 替换镜像
sed -i 's#k8s.gcr.io.*#bitnami/kube-state-metrics:latest#g' manifests/kubeStateMetrics-deployment.yaml
sed -i 's#k8s.gcr.io.*#v5cn/prometheus-adapter:v0.9.1#g' manifests/prometheusAdapter-deployment.yaml
grep quay.io manifests/*

image-20241019153940843

service修改:修改server为nodeport向外暴露服务

vim manifests/grafana-service.yaml

image-20241019154209587

vim manifests/prometheus-service.yaml

image-20241019154321342

3、安装
# 环境初始化
kubectl apply --server-side -f manifests/setup
# 检查各资源是否正常安装
kubectl wait --for condition=Established --all CustomResourceDefinition --namespace=monitoring
# 安装Prometheus、Grafana
kubectl apply -f manifests/

image-20241019154832652

image-20241019154859112

image-20241019154948803

image-20241019160341688

注意:如果按照有问题,可以执行此步,再重新安装,若没错请不要执行此步骤,除非你真的想卸载不要了:

kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup
4、Prometheus访问

访问地址:http://192.168.217.155:30200

注意:ip为宿主机的IP,端口是第二步中修改的Prometheus的端口号

image-20241019160544660

status==>Targets

image-20241019160624359

5、Grafana访问

访问地址:http://192.168.217.155:30100

注意:ip为宿主机的IP,端口是第二步中修改的grafana的端口号,账号密码默认都是admin

image-20241019160725931

image-20241019160753089

三、使用
1、prometheus

访问地址:http://192.168.169.192:30200

1)基本监听项

image-20241019161417579

2、grafana

访问地址:http://192.168.217.155:30100

1)配置数据源

image-20241019163413553

image-20241019163740637

四、课堂小结
五、随堂作业

1、完成全部课堂实验

六、扩展内容

更多推荐