当前位置: 首页 > article >正文

基于Kubernetes部署Prometheus监控平台

#作者:stackofumbrella

文章目录

  • prometheus和k8s集群版本对照表
  • 架构
  • Prometheus Operator简介
    • kube-prometheus下载地址
  • 安装
    • 修改镜像地址
    • 修改Prometheus的service
    • 修改Grafana的service
    • 修改Alertmanager的service
    • 数据持久化
    • 执行安装
  • Prometheus验证
    • Grafana验证
    • 解决ControllerManager、Scheduler监控问题

prometheus和k8s集群版本对照表

kube-prometheus stackKubernetes 1.23Kubernetes 1.24Kubernetes 1.25Kubernetes 1.26Kubernetes 1.27Kubernetes 1.28Kubernetes 1.29Kubernetes 1.30Kubernetes 1.31
release-0.11xxxxxx
release-0.12xxxxxx
release-0.13xxxx
release-0.14x
mainxx

架构

在这里插入图片描述
kube-prometheus是一个完整的监控解决方案,可以轻松地将其部署到kubernetes集群中,它包括以下内容

  1. Prometheus用于度量收集

  2. Alertmanager用于指标警报和通知

  3. Grafana用于图形用户界面

  4. 一组特定于K8s的exporters用作指标收集代理

  5. 使用Prometheus Operator来简化和自动化该堆栈的设置

Prometheus Operator简介

由于Prometheus本身没有提供管理配置的API接口(尤其是管理监控目标和管理警报规则),也没有提供好用的多实例管理手段,因此这一块往往要自己写一些代码或脚本。为了简化这类应用程序的管理复杂度,CoreOS率先引入了Operator的概念,并且首先推出了针对在Kubernetes下运行和管理Etcd的Etcd Operator。并随后推出了Prometheus Operator
prometheus-operator和kube-prometheus前者只包含了Prometheus Operator,后者既包含了Operator,又包含了Prometheus相关组件的部署及常用的Prometheus自定义监控,具体包含下面的组件
The Prometheus Operator:创建CRD自定义的资源对象
Highly available Prometheus:创建高可用的Prometheus
Highly available Alertmanager:创建高可用的告警组件
Prometheus node-exporter:创建主机的监控组件
Prometheus Adapter for Kubernetes Metrics APIs:创建自定义监控的指标工具(例如可以通过nginx的request来进行应用的自动伸缩)
kube-state-metrics:监控k8s相关资源对象的状态指标
Grafana:进行图像展示

kube-prometheus下载地址

https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.tar.gz

安装

$ tar -C ./ -xf v0.13.0.tar.gz
$ cd kube-prometheus-0.13.0/manifests/
$ ls -lh *-networkPolicy.yaml
网络策略文件建议删除prometheus-networkPolicy.yaml、grafana-networkPolicy.yaml、alertmanager-networkPolicy.yaml
在这里插入图片描述

修改镜像地址

由于网络原因kube-state-metrics和prometheus-adapter镜像在国内无法下载,因此需要修改以下地址
$ vim kubeStateMetrics-deployment.yaml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
$ vim prometheus-prometheus.yaml
在这里插入图片描述
$ vim prometheusAdapter-deployment.yaml
在这里插入图片描述
$ vim alertmanager-alertmanager.yaml
在这里插入图片描述
$ vim grafana-deployment.yaml
在这里插入图片描述
$ vim prometheusOperator-deployment.yaml
在这里插入图片描述
在这里插入图片描述
$ vim blackboxExporter-deployment.yaml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
$ vim nodeExporter-daemonset.yaml
在这里插入图片描述
在这里插入图片描述

修改Prometheus的service

$ vim prometheus-service.yaml
在这里插入图片描述

修改Grafana的service

$ vim grafana-service.yaml
在这里插入图片描述

修改Alertmanager的service

$ vim alertmanager-service.yaml
在这里插入图片描述

数据持久化

$ prometheus-prometheus.yaml
在这里插入图片描述
$ vim grafana-deployment.yaml
在这里插入图片描述
为grafana新增pvc
$ vim grafana-pvc.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana-data
  namespace: monitoring
  annotations:
    volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 8Gi

创建grafana的pvc
$ kubectl apply -f grafana.yaml

由于grafana默认时区是UTC,比中国时间慢了8小时,很不便于日常监控查看,需要进行修改
$ sed -i ‘s/utc/utc+8/g’ grafana-dashboardDefinitions.yaml

$ sed -i ‘s/UTC/UTC+8/g’ grafana-dashboardDefinitions.yaml

$ grep -i timezone grafana-dashboardDefinitions.yaml

执行安装

$ cd kube-prometheus-0.13.0
$ kubectl apply --server-side -f manifests/setup
$ kubectl apply -f manifests/
$ kubectl get pods -n monitoring

在这里插入图片描述

Prometheus验证

选择一台node节点IP+31000访问
在这里插入图片描述

Grafana验证

选择一台node节点IP+31002访问,默认用户名密码:admin/admin
在这里插入图片描述

解决ControllerManager、Scheduler监控问题

默认安装后访问prometheus会发现有三个报警:Watchdog、KubeControllerManagerDown、KubeSchedulerDown

Watchdog是一个正常的报警,这个告警的作用是如果alermanger或prometheus本身挂掉了就发不出告警了,因此一般会采用另一个监控来监控prometheus,或自定义一个持续不断的告警通知,哪一天这个告警通知不发了,说明监控出现问题了。
prometheus operator已经考虑了这一点,本身携带一个watchdog,作为对自身的监控。如果需要关闭,删除或注释掉Watchdog部分

$ vim prometheus-rules.yaml

修改/etc/kubernetes/manifests/kube-controller-manager.yaml文件,将–bind-address=127.0.0.1改为–bind-address=0.0.0.0

新增prometheus-kubeControllerManagerService.yaml

apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-controller-manager
  labels:
    app.kubernetes.io/name: kube-controller-manager  #要与kubernetesControlPlane-serviceMonitorKubeControllerManager.yaml文件的spec.selector.matchLabels相同
spec:
  selector:
    component: kube-controller-manager#此处注意为kube-controller-manager pod的标签
  ports:
  - name: https-metrics#名字要与kubernetesControlPlane-serviceMonitorKubeControllerManager.yaml文件的spec.endpoints.port值相同
    port: 10257#注意端口号要正确
    targetPort: 10257#注意端口号要正确
    protocol: TCP

$ kubectl apply -f prometheus-kubeControllerManagerService.yaml

修改/etc/kubernetes/manifests/kube-scheduler.yaml文件,将–bind-address=127.0.0.1改为–bind-address=0.0.0.0

新增prometheus-kubeSchedulerService.yaml文件

apiVersion: v1
kind: Service
metadata:
  namespace: kube-system
  name: kube-scheduler
  labels:
    app.kubernetes.io/name: kube-scheduler  #要与kubernetesControlPlane-serviceMonitorKubeScheduler.yaml文件的spec.selector.matchLabels相同
spec:
  selector:
    component: kube-scheduler   #此处注意为kube-scheduler pod的标签
  ports:
  - name: https-metrics   #名字要与kubernetesControlPlane-serviceMonitorKubeScheduler.yaml文件的spec.endpoints.port值相同
    port: 10259#注意端口号要正确
    targetPort: 10259#注意端口号要正确
    protocol: TCP

$ kubectl apply -f prometheus-kubeControllerManagerService.yaml
刷新prometheus即可恢复
在这里插入图片描述


http://www.kler.cn/a/610438.html

相关文章:

  • 贪心算法(12))(java)坏了的计算器
  • 基于BERT的序列到序列(Seq2Seq)模型,生成文本摘要或标题
  • 系统分析师常考题目《论面向对象分析方法及其应用》
  • 类和对象cpp
  • 基于springboot+vue的北部湾地区助农平台
  • 深入解析 JVM 内存区域及核心概念
  • python中的面对对象
  • 鸿蒙开发:openCustomDialog关闭指定Dialog
  • docker中间件部署
  • 基于Flask的智能天气助手系统设计
  • wms窗口/多窗口/自由窗口systemui侧边栏手势退出实战-学员作业
  • 往期项目shader着色器实践效果应用合集
  • 【大模型基础_毛玉仁】3.4 Prompt 技巧
  • 31天Python入门——第15天:日志记录
  • Java.util包之Java.util.List接口
  • LeetCode算法题(Go语言实现)_12
  • Rust 与 FFmpeg 实现视频水印添加:技术解析与应用实践
  • WPF Binding Path与不带Path的区别
  • 华鲲振宇天工TG225 B1国产服务器试装openEuler22.03 -SP4系统
  • 存储服务器是指什么