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

一、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实践架构图

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

 

六、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过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询

八、环境准备

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

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

 

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-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector: 
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.6
        ports:
        - containerPort: 80

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

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

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

创建nginx负载均衡网络
vim nginx-service.yaml
kind: Service
apiVersion: v1
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

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

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

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

 访问网页测试

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

十、部署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

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

十一、部署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

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

十二、配置Grafana数据源 

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

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

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

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

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

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

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

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

 

你可能感兴趣的:(运维,prometheus,kubernetes)