最稳、最省事的方式是直接用 helm 部署 grafana/grafana chart;手写 yaml 易漏 readinessprobe、持久化权限、密码加密逻辑,导致 crashloopbackoff,且生产环境常因 securitycontext 或空目录丢失数据。

直接用 Helm 部署 grafana/grafana Chart 是最稳、最省事的方式;手写 YAML 容易漏掉 readinessProbe、持久化卷权限、或 GF_SECURITY_ADMIN_PASSWORD 环境变量加密逻辑,导致 Pod 一直 CrashLoopBackOff。
为什么不用裸 deploy + service 手写 YAML?
手写 YAML 看似可控,但实际踩坑密集:
-
securityContext.runAsUser设为0(root)在多数生产集群被PodSecurityPolicy或PodSecurityAdmission拒绝,必须显式设为472或使用fsGroup配合volumeMounts.subPath -
readinessProbe若只查/api/health,Grafana 启动时可能因插件加载慢而超时失败,需加initialDelaySeconds: 90 - 没配
persistence.storageClassName时,Helm 默认用emptyDir,Pod 重建后所有 dashboard、用户、数据源全丢 - 密码明文写进 env 会被
kubectl get pod -o yaml直接看到,应改用adminPasswordSecret引用 Secret
helm install grafana/grafana 的最小可行配置
只需一个 values.yaml,覆盖三个关键点即可跑通:
adminPassword: "changeme123" persistence: enabled: true storageClassName: "nfs-client" # 替换为你集群真实的 StorageClass size: 5Gi service: type: NodePort nodePort: 30300
执行命令:
helm repo add grafana https://grafana.github.io/helm-chartshelm repo updatehelm install grafana grafana/grafana --namespace monitoring --create-namespace -f values.yaml
注意:adminPassword 只在首次安装生效;升级时若想保留密码,得用 admin.existingSecret 显式指定已有 Secret。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
如何让 Grafana 自动连上 Prometheus 数据源?
不靠手动填 Web UI,而是用 Helm 的 datasources 字段注入:
datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus-server.monitoring.svc.cluster.local:9090
access: proxy
isDefault: true
这段会自动挂载为 ConfigMap,并通过 initContainer 写入 /etc/grafana/provisioning/datasources/;Grafana 启动时自动加载,无需重启 Pod。
常见错误:url 写成 http://localhost:9090(容器内 localhost 指自己)、或 Service 名写错命名空间(如漏掉 .monitoring.svc.cluster.local),会导致 dashboard 显示 Data source connected, but no data returned。
暴露 Grafana 到集群外的两种安全方式
别用 type: LoadBalancer 直曝公网——除非你已配好 GF_AUTH_PROXY_ENABLED 和反向代理认证:
- 用 Ingress + cert-manager:确保
ingress.enabled=true且ingress.hosts[0]设为域名(如grafana.example.com),否则 TLS 证书申请会失败 - 用 port-forward 临时调试:
kubectl port-forward -n monitoring svc/grafana 3000:80,此时访问http://localhost:3000即可,但仅限本地
真正容易被忽略的是:Ingress 路径必须是 /,不能设 path: /grafana —— Grafana 的前端路由和 root_url 强耦合,路径非根会导致 JS 加载 404、仪表盘空白。










