用 Helm 在 Kubernetes 上部署 Grafana
Helm 部署 Grafana 到 K8s:grafana chart 安装、持久化配置、数据源与仪表盘的 provisioning、Ingress 暴露与安全注意事项。
Grafana 是 Prometheus 数据可视化的标准搭档。用 Helm 在 K8s 上部署只需几分钟,但持久化和数据源预置这两个生产要点必须一步到位,否则 Pod 重建后仪表盘全丢。
快速安装
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana -n monitoring --create-namespace
获取初始管理员密码:
kubectl get secret -n monitoring grafana -o jsonpath="{.data.admin-password}" | base64 -d
本地验证:
kubectl port-forward -n monitoring svc/grafana 3000:80
# 浏览器打开 http://localhost:3000,admin + 上面取到的密码
生产配置:values.yaml
# values.yaml
persistence:
enabled: true # ← 最重要!默认 false,Pod 一重建数据全丢
size: 10Gi
adminPassword: "强密码" # 或用 existingSecret 引用 K8s Secret
# 预置数据源:Prometheus 自动可用
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus-server.monitoring.svc
isDefault: true
# 预置仪表盘
dashboardProviders:
dashboardproviders.yaml:
apiVersion: 1
providers:
- name: default
folder: ''
type: file
options:
path: /var/lib/grafana/dashboards
dashboards:
default:
node-exporter:
gnetId: 1860 # Node Exporter Full
datasource: Prometheus
helm upgrade grafana grafana/grafana -n monitoring -f values.yaml
对外暴露:Ingress
ingress:
enabled: true
hosts: [grafana.example.com]
tls:
- secretName: grafana-tls
hosts: [grafana.example.com]
安全提醒:Grafana 后台能看到所有监控数据(包含大量内部拓扑信息),必须启用强认证、HTTPS,必要时限制来源 IP。不要长期用 port-forward 凑合。
与 kube-prometheus-stack 的关系
如果你装了 kube-prometheus-stack,它已经内置了 Grafana——不用再单独装这个 chart,在 stack 的 values 里定制 grafana: 段落即可:
# kube-prometheus-stack 的 values.yaml
grafana:
persistence:
enabled: true
adminPassword: "强密码"
观测云对照
如果部署 Grafana 的目的只是"给 Prometheus 数据看图",值得评估观测云这类一体化平台:仪表盘、告警、日志、Trace 统一在同一处,免维护 Grafana 本身的升级与持久化;已有 Grafana 面板习惯的团队,也可以把观测云作为数据源继续用 Grafana 出图,两条路都通。
常见问题(FAQ)
Q:Pod 重建后我的仪表盘全没了?
A:persistence.enabled 没开。chart 安装输出里其实有黄色警告——持久化关掉时数据是临时的。开持久化后已丢的配置无法找回,重建吧。
Q:admin 密码忘了怎么重置?
A:kubectl edit secret -n monitoring grafana 改 admin-password(base64),或用 values 里 adminPassword 重新 upgrade。
Q:能用 GitOps 管理仪表盘吗?
A:能。dashboardProviders + ConfigMap 挂载 JSON 文件,或用 sidecar 从 Git 仓库同步(sidecar.dashboards.enabled)。