k8s监控方案实践(三):部署与配置Grafana可视化平台

k8s监控方案实践(三):部署与配置Grafana可视化平台

文章目录

  • k8s监控方案实践(三):部署与配置Grafana可视化平台
  • 一、Grafana简介
    • [1. 什么是Grafana?](#1. 什么是Grafana?)
    • [2. Grafana与Prometheus的关系](#2. Grafana与Prometheus的关系)
    • [3. Grafana应用场景](#3. Grafana应用场景)
  • 二、Grafana实战部署
    • [1. 部署方式选择](#1. 部署方式选择)
    • [2. 创建Namespace(prometheus-namespace.yaml)](#2. 创建Namespace(prometheus-namespace.yaml))
    • [3. 创建Service(alertmanager-config.yaml)](#3. 创建Service(alertmanager-config.yaml))
    • [4. 创建Deployment(grafana-deploy.yaml)](#4. 创建Deployment(grafana-deploy.yaml))
    • [5. 部署所有资源](#5. 部署所有资源)
  • 三、配置Grafana页面并集成Prometheus监控数据
    • [1. 查看外部访问端口](#1. 查看外部访问端口)
    • [2. 访问ui页面和配置数据源](#2. 访问ui页面和配置数据源)
    • [3. 配置仪表盘](#3. 配置仪表盘)
  • 总结

随着容器化和微服务架构的不断发展,系统的复杂性与日俱增,构建一套完善的监控体系已成为保障系统稳定运行的关键。在前两篇文章中,我们介绍了如何在 Kubernetes 中部署 Prometheus 并集成 Node Exporter 实现节点资源的基础监控,以及如何使用 Alertmanager 配置 Prometheus 告警规则和接入钉钉通知。

本篇将继续完善监控体系,重点介绍如何部署和配置 Grafana,实现对 Prometheus 采集数据的可视化展示,帮助我们更加直观地理解系统状态与运行趋势,为运维与故障排查提供强有力的支持。

一、Grafana简介

1. 什么是Grafana?

Grafana 是一个开源的可视化监控平台,能够与 Prometheus、InfluxDB、Loki 等多种数据源集成,通过丰富的图表和仪表盘展示监控数据,帮助用户实时掌握系统状态和趋势。

Grafana 的核心优势包括:

  • 多数据源支持:支持 Prometheus、Elasticsearch、Loki、MySQL 等众多数据源
  • 丰富的图表展示能力:支持折线图、柱状图、饼图、热力图等
  • 灵活的仪表盘配置:支持变量、查询模板、权限控制
  • 强大的社区生态:拥有大量社区共享的仪表盘模板
  • 告警功能:从 Grafana 直接对图表设置告警并发送通知(可选)

Grafana 通常作为 Prometheus 的前端展示工具,用于提供图形化的数据展示和仪表盘功能,是可观测性体系中不可或缺的一环。

2. Grafana与Prometheus的关系

在 Kubernetes 监控体系中,Grafana 与 Prometheus 的协作方式如下:

  • Prometheus 作为数据采集和存储组件,收集节点和服务的监控指标
  • Grafana 作为可视化组件,通过查询 Prometheus 数据源展示图表和趋势变化
  • 用户无需直接与 Prometheus 交互,而是通过 Grafana 仪表盘直观掌握系统运行状态

3. Grafana应用场景

  • Kubernetes 集群监控:结合 Prometheus + Node Exporter + kube-state-metrics实现对资源、容器状态、部署等的可视化
  • 应用性能监控(APM):展示应用服务的响应时间、QPS、错误率等
  • 系统运维监控:如磁盘、内存、网络 I/O、数据库连接数等
  • 业务数据展示:如订单数量、用户注册趋势、转化率等

二、Grafana实战部署

1. 部署方式选择

Grafana 支持多种部署方式,在 Kubernetes 中,常见的方式包括:

  • 使用 Helm Chart 快速部署(推荐用于生产环境)
  • 手动编写 YAML 文件部署(适合学习和自定义)

本节我们将以 YAML 文件部署 为例,讲解 Grafana 的部署过程,便于理解其运行机制和组件结构。

2. 创建Namespace(prometheus-namespace.yaml)

创建名为 prometheus 的命名空间,用于隔离部署监控相关资源

yaml 复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: prometheus

3. 创建Service(alertmanager-config.yaml)

通过 NodePort 将 Grafana 暴露至集群外部

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  labels:
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: monitoring-grafana
  name: monitoring-grafana
  namespace: prometheus
spec:
  ports:
  - port: 80
    targetPort: 3000
    nodePort: 30002
  selector:
    app: grafana
  type: NodePort

4. 创建Deployment(grafana-deploy.yaml)

部署 Grafana 容器,配置数据持久化与初始化设置

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: monitoring-grafana
  namespace: prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      task: monitoring
      app: grafana
  template:
    metadata:
      labels:
        task: monitoring
        app: grafana
    spec:
      affinity:
        nodeAffinity:  #节点亲和性,固定调度到node2节点
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - node2
      containers:
      - name: grafana
        image: harbor.local/k8s/grafana:10.4.6-ubuntu
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3000
          protocol: TCP
        volumeMounts:
        - mountPath: /var/lib/grafana   #数据持久化目录
          name: grafana-data-volume
        - mountPath: /etc/grafana/provisioning/ 
          name: grafana-provisioning-volume
        env:
        - name: INFLUXDB_HOST
          value: monitoring-influxdb
        - name: GF_SERVER_HTTP_PORT
          value: "3000"
        - name: GF_SECURITY_ADMIN_PASSWORD
          value: "Hwjpass2025!@#"   #设置管理员密码
        - name: GF_USERS_ALLOW_SIGN_UP
          value: "false"
        - name: GF_AUTH_ANONYMOUS_ENABLED
          value: "true"    #启用匿名访问
        - name: GF_AUTH_ANONYMOUS_ORG_ROLE
          value: "Viewer"  #设置匿名用户的权限角色为只读
      volumes:
      - name: grafana-data-volume
        hostPath:
         path: /kubernetes/grafana/data   #映射到主机目录
         type: Directory
      - name: grafana-provisioning-volume
        hostPath:
         path: /kubernetes/grafana/provisioning/
         type: Directory

5. 部署所有资源

bash 复制代码
kubectl apply -f prometheus-namespace.yaml
kubectl apply -f grafana-svc.yaml
kubectl apply -f grafana-deploy.yaml

三、配置Grafana页面并集成Prometheus监控数据

1. 查看外部访问端口

bash 复制代码
 kubectl get svc -n prometheus monitoring-grafana

2. 访问ui页面和配置数据源

复制代码
访问地址:http://ip:30002
账号:admin
密码:Hwjpass2025!@#           #这里根据自己设置的密码来输入

Home → Connections→ Add new connection → Prometheus,添加Prometheus数据源

填写Prometheus服务地址:http://prometheus.prometheus.svc:9090

Save & test,保存并测试数据源

3. 配置仪表盘

进入 "Dashboard" → "Import",添加仪表盘,我这里直接导入官方现有的仪表盘


选择数据源为上一步配置的 Prometheus,点击 "Import" 完成导入

效果如下:数据图表可视化


总结

🚀 本文完整介绍了如何在 Kubernetes 集群中部署 Grafana,包括服务暴露、容器部署、数据持久化配置、匿名访问控制,以及如何连接 Prometheus 并导入官方仪表盘,实现监控数据的可视化展示。

✅ 至此,我们已经完成了基于 Prometheus + Node Exporter + Alertmanager + Grafana 的 K8s 监控体系搭建,涵盖了从数据采集、规则告警到图形化展示的完整链路,具备实际生产可用性。

📌 本系列的监控实践方案到此告一段落,后续如有进一步扩展(如 Loki 日志可视化、Tempo 链路追踪、Prometheus Operator 自动化配置等),将视项目需求持续完善。

相关推荐
zizisuo2 小时前
9.3.云原生架构模式
云原生·架构
和计算机搏斗的每一天2 小时前
k8s之探针
云原生·容器·kubernetes
项目題供诗8 小时前
黑马k8s(四)
云原生·容器·kubernetes
杰克逊的日记8 小时前
大项目k8s集群有多大规模,多少节点,有多少pod
云原生·容器·kubernetes
小张童鞋。8 小时前
k8s之k8s集群部署
云原生·容器·kubernetes
long_21458 小时前
k8s中ingress-nginx介绍
kubernetes·ingress-nginx
luck_me58 小时前
k8s v1.26 实战csi-nfs 部署
linux·docker·云原生·容器·kubernetes
一直学下去9 小时前
K8S中构建双架构镜像-从零到成功
容器·kubernetes·cicd·多架构
hnlucky10 小时前
《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》
运维·数据库·nginx·云原生·容器·kubernetes·mariadb