k8s平台:手动部署Grafana

以下是一个可用于生产环境的 Kubernetes 部署 Grafana 的 YAML 文件。该配置包括 Deployment、Service、ConfigMap 和 PersistentVolumeClaim,确保 Grafana 的高可用性和数据持久化。


Grafana 生产部署 YAML 文件

☆实操示例

cat grafana-deployment.yaml

---
# Grafana Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: grafananamespace: monitoringlabels:app: grafana
spec:replicas: 2  # 副本数量,生产环境可根据需求调整selector:matchLabels:app: grafanatemplate:metadata:labels:app: grafanaspec:containers:- name: grafanaimage: harbor.fq.com/prometheus/grafana:9.5.3  # 建议使用固定版本,如 grafana/grafana:9.5.2ports:- containerPort: 3000  # Grafana 默认运行端口env:- name: GF_SECURITY_ADMIN_USERvalue: "admin"  # 管理员用户名,生产环境建议修改- name: GF_SECURITY_ADMIN_PASSWORDvalue: "Abc123!"  # 管理员密码,生产环境建议使用更强的密码- name: GF_INSTALL_PLUGINSvalue: "grafana-clock-panel,grafana-piechart-panel"  # 需要安装的 Grafana 插件readinessProbe:httpGet:path: /api/health  # 就绪探针,检测 Grafana 是否健康port: 3000initialDelaySeconds: 10  # 等待 10 秒后开始探测periodSeconds: 10  # 每 10 秒进行一次探测livenessProbe:httpGet:path: /api/health  # 存活探针,检测 Grafana 是否正常运行port: 3000initialDelaySeconds: 30  # 等待 30 秒后开始探测periodSeconds: 60  # 每 60 秒进行一次探测volumeMounts:- name: grafana-storagemountPath: /var/lib/grafana  # 挂载存储目录,存放 Grafana 数据- name: grafana-configmountPath: /etc/grafana/grafana.ini  # 挂载配置文件subPath: grafana.ini  # 只映射 configMap 中的 grafana.ini 文件volumes:- name: grafana-storageemptyDir: {}  # 使用 emptyDir,不持久化存储数据,Pod 重启后数据会丢失- name: grafana-configconfigMap:name: grafana-config  # 关联 ConfigMap,提供 Grafana 配置文件
---
# Grafana 配置文件 ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:name: grafana-confignamespace: monitoring
data:grafana.ini: |[server]http_port = 3000  # Grafana 监听端口root_url = %(protocol)s://%(domain)s:%(http_port)s/[database]type = sqlite3  # 默认使用 SQLite 数据库path = /var/lib/grafana/grafana.db  # 数据库存放路径[security]admin_user = admin  # 管理员用户名admin_password = Abc123!  # 管理员密码[users]default_theme = light  # 默认 UI 主题(light / dark)[auth.anonymous]enabled = true  # 允许匿名访问(默认 Viewer 权限)org_name = Main Org.org_role = Viewer
---
# Grafana Service (NodePort 方式暴露)
apiVersion: v1
kind: Service
metadata:name: grafananamespace: monitoringlabels:app: grafana
spec:type: NodePort  # 使用 NodePort 方式暴露 Grafanaports:- port: 3000  # Service 端口targetPort: 3000  # Grafana 容器内部端口protocol: TCPnodePort: 32000  # 指定 NodePort 端口,范围 30000-32767selector:app: grafana  # 关联到 app=grafana 的 Pod
---
# Grafana Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: grafananamespace: monitoringlabels:app: grafana
spec:replicas: 2  # 根据需求调整副本数selector:matchLabels:app: grafanatemplate:metadata:labels:app: grafanaspec:containers:- name: grafanaimage: grafana/grafana:latest  # 建议使用固定版本,如 grafana/grafana:9.5.2ports:- containerPort: 3000env:- name: GF_SECURITY_ADMIN_USERvalue: "admin"  # 生产环境建议使用更安全的用户名- name: GF_SECURITY_ADMIN_PASSWORDvalue: "StrongPassword123!"  # 生产环境建议使用强密码- name: GF_INSTALL_PLUGINSvalue: "grafana-clock-panel,grafana-piechart-panel"  # 可选:安装插件readinessProbe:httpGet:path: /api/healthport: 3000initialDelaySeconds: 10periodSeconds: 10livenessProbe:httpGet:path: /api/healthport: 3000initialDelaySeconds: 30periodSeconds: 60volumeMounts:- name: grafana-storagemountPath: /var/lib/grafana- name: grafana-configmountPath: /etc/grafana/grafana.inisubPath: grafana.inivolumes:- name: grafana-storagepersistentVolumeClaim:claimName: grafana-pvc- name: grafana-configconfigMap:name: grafana-config
---
# Grafana ConfigMap (配置文件)
apiVersion: v1
kind: ConfigMap
metadata:name: grafana-confignamespace: monitoring
data:grafana.ini: |[server]http_port = 3000root_url = %(protocol)s://%(domain)s:%(http_port)s/[database]type = sqlite3path = /var/lib/grafana/grafana.db[security]admin_user = adminadmin_password = StrongPassword123![users]default_theme = light[auth.anonymous]enabled = trueorg_name = Main Org.org_role = Viewer
---
# Grafana PersistentVolumeClaim (数据持久化)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: grafana-pvcnamespace: monitoring
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10Gi  # 根据需求调整存储大小storageClassName: standard  # 根据集群的 StorageClass 调整
---
# Grafana Service (暴露服务)
apiVersion: v1
kind: Service
metadata:name: grafananamespace: monitoringlabels:app: grafana
spec:type: ClusterIP  # 生产环境建议使用 ClusterIP,配合 Ingress 暴露服务ports:- port: 3000targetPort: 3000protocol: TCPselector:app: grafana
---
# Grafana Ingress (可选,用于外部访问)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: grafana-ingressnamespace: monitoringannotations:nginx.ingress.kubernetes.io/ssl-redirect: "true"nginx.ingress.kubernetes.io/force-ssl-redirect: "true"cert-manager.io/cluster-issuer: "letsencrypt-prod"  # 使用 cert-manager 自动管理 TLS 证书
spec:tls:- hosts:- grafana.example.com  # 替换为你的域名secretName: grafana-tlsrules:- host: grafana.example.com  # 替换为你的域名http:paths:- path: /pathType: Prefixbackend:service:name: grafanaport:number: 3000

关键配置说明

  1. Deployment

    • 使用 replicas: 2 确保高可用性。
    • 通过环境变量设置管理员用户名和密码。
    • 配置了 readinessProbelivenessProbe 以确保 Grafana 的健康状态。
    • 挂载了持久化存储卷 (PersistentVolumeClaim) 和配置文件 (ConfigMap)。
  2. ConfigMap

    • 包含 grafana.ini 配置文件,用于自定义 Grafana 的行为。
    • 配置了匿名访问、数据库路径等。
  3. PersistentVolumeClaim

    • 使用持久化存储确保 Grafana 的数据(如仪表盘、用户配置)不会丢失。
    • 可以根据需求调整存储大小和 StorageClass
  4. Service

    • 使用 ClusterIP 类型,仅在集群内部暴露服务。
    • 如果需要外部访问,可以通过 Ingress 暴露。
  5. Ingress(可选):

    • 使用 Ingresscert-manager 自动管理 TLS 证书。
    • 配置了 HTTPS 强制跳转以提高安全性。

部署步骤

  1. 将上述 YAML 文件保存为 grafana-deployment.yaml

  2. 使用 kubectl 部署 Grafana:

    kubectl apply -f grafana-deployment.yaml
  3. 检查部署状态:

    kubectl get pods -n monitoring
    kubectl get svc -n monitoring
    kubectl get ingress -n monitoring
  4. 访问 Grafana:

    • 如果使用了 Ingress,可以通过 https://grafana.example.com 访问。

    • 如果未使用 Ingress,可以通过 kubectl port-forward 临时访问:

      kubectl port-forward svc/grafana -n monitoring 3000:3000

      然后访问 http://localhost:3000


生产环境建议

  1. 使用固定版本的镜像

    • 避免使用 latest 标签,改为固定版本(如 grafana/grafana:9.5.2)。
  2. 启用身份验证

    • 配置 OAuth、LDAP 或 SAML 集成,避免使用默认的管理员账号。
  3. 备份数据

    • 定期备份 Grafana 的持久化数据(如 /var/lib/grafana)。
  4. 监控 Grafana

    • 使用 Prometheus 监控 Grafana 的性能和健康状态。

希望这个配置能帮助你顺利部署 Grafana!如果有其他问题,请随时告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

农产品园区展示系统——仙盟创梦IDE开发

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>农业大数据平台</title><style>* {margi…

每日Bug:(2)共享内存

对于整个系统而言&#xff0c;主存与CPU的资源都是有限的&#xff0c;随着打开进程数量的增加&#xff0c;若是将所有进程运行所需的代码/数据/栈/共享库都存放在主存中&#xff0c;那么开启一部分进程就可以将主存占用完。 虚拟内存就是解决以上问题的方法&#xff0c;使用虚…

C语言Makefile编写与使用指南

Makefile 详细指南&#xff1a;编写与使用 Makefile 是 C/C 项目中常用的自动化构建工具&#xff0c;它定义了项目的编译规则和依赖关系。下面我将详细介绍 Makefile 的编写和使用方法。 一、Makefile 基础 1. 基本结构 一个典型的 Makefile 包含以下部分&#xff1a; mak…

Centos离线安装Docker(无坑版)

1、下载并上传docker离线安装包 官方地址&#xff1a;安装包下载 2、上传到离线安装的服务器解压 tar -zxvf docker-28.1.1.tgz#拷贝解压二进制文件到相关目录 cp docker/* /usr/bin/ 3、创建docker启动文件 cat << EOF > /usr/lib/systemd/system/docker.servic…

OceanBase数据库-学习笔记4-租户

租户 租户偏向于资源层面的逻辑概念&#xff0c;是在物理节点上划分的资源单元&#xff0c;可以指定其资源规格&#xff0c;包括 CPU、内存、日志盘空间、IOPS 等。 租户类似于传统数据库的数据库实例&#xff0c;租户通过资源池与资源关联&#xff0c;从而独占一定的资源配额…

UNIAPP项目记录

一、通过 vue-cli 创建 uni-app 项目 创建 vue3 项目 创建以 javascript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 gitee 下载模板&#xff09; npx degit dcloudio/uni-preset-vue#vite my-vue3-project复制代码 npx degit dcloudio/uni-preset-vue#vit…

华为发布全球首个L3商用智驾ADS4.0

2024年10月2024世界智能网联汽车大会上&#xff0c;余承东讲到&#xff1a;“华为ADS 4.0将于2025年推出高速L3级自动驾驶商用及城区L3级自动驾驶试点&#xff0c;希望加快L3级自动驾驶标准的进程&#xff0c;推动L3级自动驾驶技术的普及。” 世界智能网联汽车大会演讲PPT 所以…

【Python学习路线】零基础到项目实战

目录 &#x1f31f; 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 &#x1f9e0; 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 &#x1f4bb; 二、实战演示环境配置要求核心代码实现运行结果验证 ⚡ 三、性能对比测试方法论量化数据对比…

解决redis序列号和反序列化问题

最近遇到了一个问题,将 List<Map<String, Object>> 类型数据以list形式存入到redis之后,发现取出来时数据格式完全不对,根据报错信息发现是反序列化问题,遇到类似问题,主要有两种解决方案1.使用序列号工具 例如&#xff0c;Java中常用的序列化工具有Jackson、Gso…

Android学习总结之设计场景题

设计图片请求框架的缓存模块 核心目标是通过分层缓存策略&#xff08;内存缓存 磁盘缓存&#xff09;提升图片加载效率&#xff0c;同时兼顾内存占用和存储性能。以下是针对 Android 面试官的回答思路&#xff0c;结合代码注释说明关键设计点&#xff1a; 一、缓存架构设计&…

Webug3.0通关笔记14 第十四关:存储型XSS

目录 第十四关:存储型XSS 1.打开靶场 2.源码分析 3.渗透实战 第十四关:存储型XSS 本文通过《webug3靶场第十四关 存储型XSS》来进行存储型XSS关卡的渗透实战。 存储型 XSS&#xff08;Stored Cross - Site Scripting&#xff09;&#xff0c;也被称为持久型 XSS&#xff…

Java父类、子类实例初始化顺序详解

1、完整的初始化顺序&#xff08;含继承&#xff09; 1、父类的静态初始化 父类静态变量默认值 → 父类静态变量显式赋值 父类静态代码块&#xff08;按代码顺序执行&#xff09;。 2、子类的静态初始化 子类静态变量默认值 → 子类静态变量显式赋值 子类静态代码块&…

13.组合模式:思考与解读

原文地址:组合模式&#xff1a;思考与解读 更多内容请关注&#xff1a;7.深入思考与解读设计模式 引言 在软件开发中&#xff0c;是否曾经遇到过这样一种情况&#xff1a;你有一个对象&#xff0c;它本身很简单&#xff0c;但是它包含了其他类似的对象。随着系统变得越来越复…

OpenCV实战教程 第一部分:基础入门

第一部分&#xff1a;基础入门 1. OpenCV简介 什么是OpenCV及其应用领域 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;于1999年由Intel公司发起&#xff0c;现在由非营利组织OpenCV.org维护。Ope…

虚幻商城 Quixel 免费资产自动化入库(2025年版)

文章目录 一、背景二、问题讲解1. Quixel 免费资产是否还能一键入库?2. 是不是使用了一键入库功能 Quixel 的所有资产就能入库了?3. 一键入库会入库哪些资产?三、实现效果展示四、实现自动化入库五、常见问题1. 出现401报错2. 出现429报错3. 入库过于缓慢4. 入库 0 个资产一…

uni-app - 小程序使用高德地图完整版

文章目录 🍉功能描述🍉效果🍉开发环境🍉代码部分🍉功能描述 页面自动通过定位获取用户位置并展示周边POI数据,同时支持关键词输入实时联想推荐关联地点信息, 实现精准智能的地点发现与检索功能。 🍉效果 🍉开发环境 unibest2.5.4nodev18.20.5pnpm9.14.2wot-des…

牛客:AB4 逆波兰表达式求值

链接&#xff1a;逆波兰表达式求值_牛客题霸_牛客网 题解&#xff1a; 利用栈&#xff0c;遍历字符串数组&#xff0c;遇到运算数则入栈&#xff0c;遇到运算符则取出栈顶两个运算数进行运算&#xff0c;并将运算结果入栈。 class Solution { public:/*** 代码中的类名、方法…

Ant(Ubuntu 18.04.6 LTS)安装笔记

一、前言 本文与【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安装笔记】同批次&#xff1a;先搭建数据库&#xff0c;再安装JDK&#xff0c;后面肯定就是部署Web应用。其中Web应用的部署使用 Ant 方式&#xff0c;善始善终&#xff0c;特以笔记。 二、准备 &#xf…

ultralytics 目标检测 混淆矩阵 背景图像 没被记录

修改 utils/metrics.py ConfusionMatrix def process_batch(self, detections, gt_bboxes, gt_cls):"""Update confusion matrix for object detection task.Args:detections (Array[N, 6] | Array[N, 7]): Detected bounding boxes and their associated inf…

iview 如何设置sider宽度

iview layout组件中&#xff0c;sider设置了默认宽度和最大宽度&#xff0c;在css样式文件中修改无效&#xff0c;原因是iview默认样式设置在了element.style中&#xff0c;只能通过行内样式修改 样式如下&#xff1a; image.png image.png 修改方式&#xff1a; 1.官方文档中写…