TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

Grafana 管理员密码仅在首次启动时读取:Grafana Helm Chart README PR 如何在 26 分钟内合并

结果:已合并 (2026-10-17 01:16, grafana-community/helm-charts#896), 发布了 Chart grafana 14.0.1。 事实上,这些内容取自 GitHub 的 PR、检查和发布记录、Chart 源码(PR 的基础提交 71c86de1)、Grafana 官方文档以及 TT Lab 仓库的提交记录。时间均为韩国时间(KST)。

目录

一句话总结

PR grafana-community/helm-charts#896 [grafana] Document that the admin password is only applied on first start
修改内容 Chart README 中新增 33 行的“Admin user and password”小节,Chart 版本 14.0.0 → 14.0.1
反应 无机器人评审。14 项检查全部通过,维护者留下“Thanks!”并批准
结果 PR 公开 10-17 00:50 → 合并 01:16(26 分钟),28 秒后发布 grafana-14.0.1
관리자 비밀번호는 첫 기동에만 읽힌다 Grafana 13.2.0, 재시작해도 남는 sqlite 데이터 디렉터리 ① 첫 기동(빈 DB) Secret: pw-one 관리자 생성: pw-one pw-one 200 pw-two 401 ② Secret 을 pw-two 로 바꾸고 재시작 Secret: pw-two DB 그대로: pw-one pw-one 200 pw-two 401 사이드카도 pw-two 로 부른다 → 401(템플릿 기준) ③ grafana cli 로 DB 를 먼저 바꿈 reset-admin-password DB: pw-two pw-one 401 pw-two 200 그다음 Secret 을 같은 값으로 오른쪽: GET /api/user 응답 코드(실측). 사이드카는 미실측 값을 비워 두면 차트가 무작위 값을 만들고 lookup 으로 지킨다 helm template 렌더(Argo CD 등)에서는 렌더마다 새 값
图:仅在首次启动时读取的管理员密码与 Secret 不一致的瞬间

1. 问题所在:我们遇到的现象

TT Lab 集群中的 Grafana 是作为 kube-prometheus-stack Chart 附带的 Grafana Chart 运行的。2026-09-24,我们将 values 文件中的管理员密码移除,改为引用 admin.existingSecret 的 Secret,因此需要记录更改密码的步骤。

问题就在这里卡住了。即使仅将 Secret 改为新值,Grafana 重新启动后, 也只能用旧密码登录。 并且,负责重新加载仪表盘和数据源的 sidecar 会使用 Secret 的新值来调用 Grafana,从而导致认证失败(基于 Chart 模板)。因此,我们在步骤中加入了“先在 Grafana 内部将密码改为 grafana cli ”的阶段。

遇到同样问题的人不在少数。在 Chart 迁移到新仓库之前的旧仓库中,曾多次出现过相同的报告(grafana/helm-charts#152、#3568、#3790),但在新仓库的 README 中依然没有这方面的说明。

2. 原因:文档和模板的哪一行

Chart 的行号基于 PR 的基础提交 71c86de1 。

实际测量

在编写 PR 之前,我们没有盲目相信文档文字,而是进行了实际测量。我们在 TT Lab 集群中预先拉取的 Grafana 13.2.0 镜像上启动了一个临时 Pod,并在重启后依然保留的 sqlite 数据目录上检查了 GET /api/user 的响应代码。

阶段 pw-one pw-two
首次启动,环境变量 pw-one 200 401
使用相同数据重启,环境变量 pw-two 200 401
要放入 README 的 grafana cli … reset-admin-password --password-from-stdin 作为 pw-two 401 200

3. 修改内容:diff 要点

在 Chart README 的原有小节之间插入了“Admin user and password”小节,并按照仓库规则,仅修改文档也提升了 Chart 版本。

-version: 14.0.0
+version: 14.0.1
+## Admin user and password
+...
+Grafana reads these variables only when it creates the admin user, that is on the first
+start with an empty database. When the database survives pod restarts ...
+- Changing `adminPassword`, or the password in `admin.existingSecret`, and running
+  `helm upgrade` restarts the pod but does not change the password stored in the database.
+- The sidecars ... call the Grafana reload API with the user and password from the same
+  Secret. Once the Secret and the database disagree, these calls fail with `401 Unauthorized`.
+- When neither `adminPassword` nor `admin.existingSecret` is set, ... `lookup` ...
+To rotate the password of a running installation, change it in Grafana first and then
+update the Secret (or `adminPassword`) to the same value:

修改密码的命令采用了通过标准输入传递的形式(避免值留在 Shell 历史记录或进程参数中)--password-from-stdin),并写在其中。 PR 正文中写明了修改内容及原因、上述实测结果、旧仓库的问题链接,以及“仅修改文档,未添加 helm-unittest”的说明, 并且勾选了模板中的所有检查项(DCO 签名、提升 Chart 版本、标题中的 [grafana] 前缀)。正文末尾添加了一句话,说明是在 AI 的帮助下编写并经过了亲自审查。

4. 响应:26 分钟

时间(10-17) 日
00:35 提交(DCO 签名·SSH 签名)
00:50 公开 PR
00:50 ~ 检查:Chart 测试、生成文件、标题、DCO、9 个集成测试、Super Linter — 全部 14 项通过
01:14 维护者评论 “Thanks!”
01:16 批准,5 秒后合并
01:16 合并 28 秒后 grafana-14.0.1 发布

与 SeaweedFS 不同,这次没有审查机器人,维护者也只说了一个词。这意味着没有什么需要修改的地方。我们无需采取任何额外行动。

5. 收获:开源贡献技巧

Titi 的话。 密码是个只在第一次记住的朋友。就算你换了小纸条(Secret),它的记忆也不会变,所以必须先直接告诉朋友新密码,然后再去换小纸条。把这个写进文档后,仅仅 26 分钟就收到了“谢谢!”。

链接

所有资料查阅于 2026-10-17。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论