基于kube-prometheus-release监控---k8s集群与业务服务

提示:文章技术是需要后端代码埋点,才能采集,本文章后面的是后期实验完成后的结果。

文章目录


前言

1. kube-Prometheus 概述

kube-Prometheus 是 Prometheus 官方社区提供的一套 面向 Kubernetes 的完整监控解决方案。

它基于 Prometheus Operator 构建,通过 Kubernetes 的 CRD(自定义资源)方式,实现对监控组件和监控规则的声明式管理。

通过在 Kubernetes 集群中部署 kube-Prometheus,可以快速构建一套 覆盖集群、节点、容器以及业务应用的统一监控体系。

2. kube-Prometheus 核心组件说明

kube-Prometheus 主要包含以下核心组件:

  • Prometheus Operator
    • 负责管理 Prometheus、Alertmanager 实例
    • 解析 ServiceMonitor、PodMonitor 等 CRD
  • Prometheus
    • 负责指标数据的采集与存储
  • Alertmanager
    • 负责告警规则触发后的告警聚合与通知
  • Grafana
    • 提供指标数据可视化 Dashboard
  • Node Exporter
    • 采集节点级别指标(CPU、内存、磁盘、网络等)
  • kube-state-metrics
    • 采集 Kubernetes 资源状态指标(Pod、Deployment、Node、Namespace 等)
      通过以上组件,kube-Prometheus 可以实现对 Kubernetes 集群的 全栈可观测性监控

3. kube-Prometheus 在 Kubernetes 集群中的作用

在 Kubernetes 集群中,kube-Prometheus 主要解决以下问题:

  • 集群基础资源监控
    • Node、Pod、Container 资源使用情况
  • Kubernetes 对象状态监控
    • Deployment、副本数、Pod 状态、重启次数等
  • 业务应用指标监控
    • 通过 ServiceMonitor / PodMonitor 采集业务指标
  • 统一告警与可视化
    • 告警规则集中管理
    • Grafana Dashboard 统一展示

4. PodMonitor 简介

PodMonitor 是 Prometheus Operator 提供的一种 CRD(Custom Resource Definition),用于定义 Prometheus 如何监控一组 Pod。

与传统 Prometheus 需要手动编写 scrape_configs 不同,PodMonitor 采用 声明式配置,由 Prometheus Operator 自动生成抓取规则。

PodMonitor 的主要能力包括:

  • 通过 Pod 标签选择器 选择需要监控的 Pod
  • 配置指标抓取路径(如 /metrics、/actuator/prometheus)
  • 配置端口、抓取频率、超时时间等参数
  • 自动与 Prometheus 实例关联,无需修改 Prometheus 配置文件

5. 使用 PodMonitor 监控 JVM 应用的原理

在 Kubernetes 环境中,Java 应用(如 Spring Boot)通常通过 Micrometer + Prometheus 的方式暴露 JVM 指标。

典型流程如下:

5.1、JVM 应用暴露 Prometheus 指标接口

  • 常见路径:/actuator/prometheus
  • 指标内容包含:
    • JVM 内存使用情况(Heap / Non-Heap)
    • GC 次数与耗时
    • 线程数量
    • 类加载情况

5.2、PodMonitor 通过标签选择目标 Pod

5.3、Prometheus 定期拉取 JVM 指标

5.4、Grafana 展示 JVM 运行状态与性能指标

6. JVM 监控指标范围说明

通过 PodMonitor 采集 JVM 指标后,可实现以下监控能力:

  • 内存监控
    • 堆内存 / 非堆内存使用率
    • Eden、Survivor、Old 区使用情况
  • GC 监控
    • Minor GC / Full GC 次数
    • GC 总耗时
  • 线程监控
    • 活跃线程数
    • 阻塞线程数
  • 应用运行状态
    • 启动时间
    • 类加载数量

这些指标可帮助运维和开发人员 提前发现内存泄漏、频繁 GC、线程阻塞等问题。

7. kube-Prometheus + PodMonitor 的优势

在 Kubernetes 集群中使用 kube-Prometheus 结合 PodMonitor 监控 JVM 应用,具有以下优势:

  • 与 Kubernetes 深度集成
  • 声明式配置,易于维护
  • 无需侵入 Prometheus 配置
  • 支持多环境、多命名空间统一监控
  • 可扩展性强,适合企业级监控体系

8. 应用场景总结

该方案适用于以下场景:

  • Kubernetes 集群基础资源监控
  • Java 微服务(Spring Boot、Dubbo 等)JVM 监控
  • 多业务、多命名空间统一监控与告警
  • 企业级 Kubernetes 运维监控体系建设

提示:以下是本篇文章正文内容,下面案例可供参考

一、服务器需求

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、安装k8s集群与业务服务

1.安装k8s集群

bash 复制代码
略、、、

2、部署业务后端

bash 复制代码
略、、、

三、安装kube-prometheus-release监控

安装包下载链接:https://github.com/prometheus-operator/kube-prometheus

3.1、将压缩包kube-prometheus-release-0.13.zip上传至服务器

bash 复制代码
[root@master ~]# unzip kube-prometheus-release-0.13.zip
[root@master ~]# cd kube-prometheus-release-0.13/manifests/

解压后修改3个文件prometheus-service.yaml、alertmanager-service.yaml、grafana-service.yaml
需要在service文件中添加type类型为NodePort

3.2、修改prometheus-service.yaml

bash 复制代码
[root@master manifests]# vi prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.46.0
  name: prometheus-k8s
  namespace: monitoring
spec:
  type: NodePort    # 添加此行即可,grafana和alertmanager修改方式相同
  ports:
  - name: web
    port: 9090
    targetPort: web
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

3.3、修改alertmanager-service.yaml

bash 复制代码
[root@master manifests]# alertmanager-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 0.26.0
  name: alertmanager-main
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: web
    port: 9093
    targetPort: web
  - name: reloader-web
    port: 8080
    targetPort: reloader-web
  selector:
    app.kubernetes.io/component: alert-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
  sessionAffinity: ClientIP

3.4、修改grafana-service.yaml

bash 复制代码
[root@master manifests]# grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 9.5.3
  name: grafana
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus

3.5、安装部署

bash 复制代码
[root@master manifests]# cd setup
[root@master setup]# kubectl create -f .  # 使用.表示执行此目录下的所有文件
[root@master setup]# cd ..
[root@master manifests]# kubectl create -f .  # 使用.表示执行此目录下的所有文件

注意:访问grafana和普罗米修斯时一定要注意这个两个服务是在哪个节点上面跑这个然后pod所在的公网ip地址加高端口

四、配置grafana监控k8s集群以及业务服务的JVM

4.1、访问:http://115.159.6.164:44/login

注意:grafana账号密码自定义

4.2、配置grafana监控k8s集群




点击保存即可

4.3、配置grafana监控业务服务JVM

访问普罗米修斯http://115.159.6.164:1696/graph?g0.expr=\&g0.tab=1\&g0.stacked=0\&g0.show_exemplars=0\&g0.range_input=1h


配置业务pod服务jvm抓取

4.4、安装一个PodMonitor

PodMonitor 是一种 CRD(Custom Resource Definition,自定义资源),由 kube-prometheus 或 kube-prometheus-stack 安装后自动注册。它允许你:

● 通过 Pod 标签选择器选择要监控的 Pod

● 设置抓取路径(如 /actuator/prometheus)、端口名、抓取频率等

● 与 Prometheus 自动集成,不需要写 job 配置

bash 复制代码
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: 无状态后端的名称
  namespace: monitoring
spec:
  namespaceSelector:
    matchNames:
    - monitoring  # 💡 抓取目标 Pod 所在的命名空间
  podMetricsEndpoints:
  - interval: 15s
    path: /actuator/prometheus
    port: metric
    relabelings:
    - action: replace
      sourceLabels:
      - __meta_kubernetes_pod_label_app
      targetLabel: application
    - action: replace
      replacement: prod
      targetLabel: environment
    scheme: http
    scrapeTimeout: 10s
  selector:
    matchLabels:
      app: 无状态后端的名称
      
启动命令
[root@master ~]# kubectl apply -f 无状态后端的名称.yaml 

此时在访问普罗米修斯查看,后端服务已经采集到了

4.5、配置后端服务jvm监控




保存即可

五、设置抓取所有命名空间下的pod服务

5.1、查询Prometheus CR

bash 复制代码
[root@master ~]# kubectl get prometheus -n monitoring
NAME   VERSION   DESIRED   READY   RECONCILED   AVAILABLE   AGE
k8s    2.46.0    2         2       True         True        80m

5.2、抓取所有 namespace 下的 PodMonitor

bash 复制代码
[root@master ~]# kubectl edit prometheus k8s -n monitoring
spec:  ##添加如下4行
  podMonitorSelector: {}
  podMonitorNamespaceSelector: {}
  serviceMonitorSelector: {}
  serviceMonitorNamespaceSelector: {}

5.3、在编辑grafana的jvm监控面板变量设置即可下拉选取命名空间





总结

** kube-prometheus-release 通过 Prometheus Operator + CRD 的方式,实现了 Kubernetes 平台监控与业务指标监控的统一管理。集群层监控开箱即用,业务层监控通过 PodMonitor / ServiceMonitor 声明式接入。通过规范化 PodMonitor 命名空间、标签注入与 Grafana 变量设计,可以实现跨命名空间、可复用、可扩展的业务监控体系。**

相关推荐
喵叔哟1 天前
16.项目架构设计
后端·docker·容器·.net
叫致寒吧1 天前
K8S 概念
云原生·容器·kubernetes
羊羊羊i1 天前
通过Crossplane使用K8sYAML格式的API接口,创建虚拟云资源,同时利用ArgoCD达到GitOps效果
容器·kubernetes·argocd
眠りたいです1 天前
Docker核心技术和实现原理第一部分-Docker镜像制作
运维·docker·容器·集群·镜像·dockerfile
liuc03171 天前
docker下安装mysql
mysql·docker·容器
IT老胡1 天前
Docker入门与实操(1):Docker简介
运维·docker·容器
仅此,1 天前
docker 方式,postgreSQL18 安装 jieba 分词器扩展
运维·docker·postgresql·容器·中文分词·jieba
A-刘晨阳1 天前
【云原生】PromQL 常用内置指标
云原生·grafana·prometheus·promql
AI_56781 天前
云原生监控体系构建指南:基于Prometheus与Grafana的企业级实践
云原生·grafana·prometheus