部署Grafana时如何配置默认JSON仪表盘及管理员账号
非全新安装Grafana设置默认仪表盘及管理员账号密码的可行方案
一、修复默认仪表盘导入问题
你的ConfigMap存在格式错误,且未配合Helm侧载容器(sidecar)的正确配置,导致仪表盘未生效,按以下步骤调整:
1. 修正ConfigMap配置
移除多余的(3)占位符,替换${indent(4, data)}为真实的仪表盘JSON内容,并添加overwrite: true确保覆盖已有仪表盘:
apiVersion: v1 kind: ConfigMap metadata: name: grafana-k8-dashboard namespace: monitoring labels: grafana_dashboard: "1" data: dashboard-k8.json: | { "uid": "k8s-cluster-dashboard", "title": "K8s Cluster Dashboard", "tags": ["kubernetes"], "schemaVersion": 38, "version": 1, "overwrite": true, "panels": [ // 此处替换为你的仪表盘面板具体JSON内容 ] }
2. 开启Helm侧载容器加载仪表盘
在values.yaml中配置sidecar,让Grafana自动同步ConfigMap中的仪表盘:
sidecar: dashboards: enabled: true label: grafana_dashboard labelValue: "1" folder: "/var/lib/grafana/dashboards/default"
3. 可选:设置为默认首页仪表盘
如果需要将该仪表盘设为默认首页,在values.yaml中添加:
grafana.ini: dashboards: default_home_dashboard_path: "/var/lib/grafana/dashboards/default/dashboard-k8.json"
二、修改管理员用户名/密码(非全新安装场景)
非全新安装时,Grafana会优先读取内置数据库中的已有账号信息,直接通过values.yaml的adminUser/adminPassword配置不会生效,推荐以下两种方案:
方案1:通过Grafana API修改(推荐)
- 先使用现有管理员账号获取API密钥:
curl -X POST http://<GRAFANA地址>:3000/api/auth/keys \ -H "Content-Type: application/json" \ -d '{"name":"temp-admin-key","role":"admin"}' \ -u "原管理员用户名:原管理员密码"
- 调用API修改管理员账号(默认admin用户ID为1,可通过
GET /api/users查询确认):
curl -X PUT http://<GRAFANA地址>:3000/api/users/1 \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 上一步获取的API密钥" \ -d '{"login":"新管理员用户名","password":"新管理员密码"}'
- (可选)删除临时API密钥:
curl -X DELETE http://<GRAFANA地址>:3000/api/auth/keys/<密钥ID> \ -H "Authorization: Bearer 上一步获取的API密钥"
方案2:挂载初始化脚本自动修改
- 创建包含初始化逻辑的ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: grafana-init-script namespace: monitoring data: init.sh: | #!/bin/bash # 等待Grafana服务就绪 until curl -s http://localhost:3000/api/health; do sleep 5 done # 获取临时API密钥 API_KEY=$(curl -s -X POST http://localhost:3000/api/auth/keys \ -H "Content-Type: application/json" \ -d '{"name":"init-key","role":"admin"}' \ -u "原管理员用户名:原管理员密码" | jq -r '.key') # 修改管理员账号 curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer $API_KEY" \ http://localhost:3000/api/users/1 \ -d '{"login":"新管理员用户名","password":"新管理员密码"}' # 删除临时API密钥 KEY_ID=$(curl -s -H "Authorization: Bearer $API_KEY" http://localhost:3000/api/auth/keys | jq -r '.[] | select(.name=="init-key") | .id') curl -X DELETE -H "Authorization: Bearer $API_KEY" http://localhost:3000/api/auth/keys/$KEY_ID
- 在
values.yaml中挂载脚本到Grafana容器的初始化目录:
extraVolumeMounts: - name: init-script mountPath: /docker-entrypoint-init.d/init.sh subPath: init.sh extraVolumes: - name: init-script configMap: name: grafana-init-script defaultMode: 0755
注意替换脚本中的原管理员用户名和原管理员密码为当前有效账号信息。
内容的提问来源于stack exchange,提问作者Varshaan
相关产品推荐
相关产品推荐

