結果:マージ(2026-10-17 01:16、 grafana-community/helm-charts#896)、チャート grafana 14.0.1 としてリリース。 実際はGitHubのPR・チェック・リリース履歴、チャートのソース(PRのベースコミット
71c86de1)、Grafana公式ドキュメント、TT Labリポジトリのコミット履歴から 取得しました。時刻は韓国時間です。
目次
- 一言まとめ
- 1. 何が問題だったのか:私たちが経験した症状
- 2. 原因:ドキュメントとテンプレートのどの行か
- 3. 何を変更したのか:diffの要点
- 4. 反応:26分
- 5. 学んだこと:オープンソースコントリビューションのコツ
- リンク
一言まとめ
| PR | grafana-community/helm-charts#896 [grafana] Document that the admin password is only applied on first start |
| 変更点 | チャートのREADMEに「Admin user and password」の節33行、チャートバージョン 14.0.0 → 14.0.1 |
| 反応 | ボットのレビューなし。チェック14個通過、メンテナーによる「Thanks!」と承認 |
| 結果 | PR公開 10-17 00:50 → マージ 01:16(26分)、28秒後に grafana-14.0.1 リリース |
1. 何が問題だったのか:私たちが経験した症状
TT LabクラスターのGrafanaは kube-prometheus-stack チャットについてきたGrafanaチャートで稼働しています。2026-09-24、管理者パスワードを値ファイルから
削除し、 admin.existingSecret でSecretを参照するように変更した際、パスワードを変更する手順を記載する必要がありました。
ここで引っかかりました。Secretのみを新しい値に変更するとGrafanaは再起動しますが、 ログインは古いパスワードでしかできません。 そしてダッシュボードやデータ
ソースを再読み込みさせるサイドカーはSecretの新しい値でGrafanaを呼び出すため、認証に失敗することになります(チャートテンプレート基準)。そのため手順に「Grafana内のパスワードを
grafana cli で先に変更する」というステップを追加しました。
同じ経験をした人が多くいました。チャートが移行される前の旧リポジトリに同様の報告が複数あり(grafana/helm-charts#152、#3568、#3790)、 新しいリポジトリのREADMEにはこの話がまだ載っていませんでした。
2. 原因:ドキュメントとテンプレートのどの行か
チャートの行番号はPRのベースコミット 71c86de1 基準です。
- Grafanaは管理者パスワードを一度しか読み込みません。 設定ドキュメントの
admin_password項目にはこの値が「Set once on first-run」と記載されています。チャートはこの値をGF_SECURITY_ADMIN_PASSWORD環境変数として渡し、DBが再起動を 跨いで生存する場合(永続ボリュームや外部DB)、2回目の起動以降はこの変数は使用されません。 - サイドカーはSecretの値で認証します。
templates/_pod.tplはサイドカーごとにREQ_USERNAME·REQ_PASSWORDを同じSecretから取り出して挿入します。SecretとDBが食い違う瞬間、サイドカーのreload呼び出しが401を受け取ります。 - 値を空にするとチャートが生成したランダムな値は
lookupに依存します。templates/_helpers.tpl131–138行目 のgrafana.passwordはクラスターにあるSecretをlookupとして読み込んでその値を使用し、なければ40文字のランダムな値を生成します。helm templateでレンダリングするツール(Argo CDなど)では、lookupが何も返さないためレンダリングのたびに新しい値が生成されます。
直接測定した内容
PRを作成する前にドキュメントの文章だけに頼らず測定しました。TT Labクラスターにすでに取得してあった Grafana 13.2.0 イメージで一時的なPodを1つ起動し、
再起動しても残る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 |
helm template(Helm v3.18.2)をadminPasswordなしで2回実行するとadmin-passwordの値が2回で異なり、--set adminPassword=xを 指定すると同じになりました。- チャートのベースイメージ(13.2.4-distroless)にはシェルがありませんが、
/usr/share/grafana/binがPATHにあるためkubectl execでgrafana cliを直接 呼び出すことができ、チャートがGF_PATHS_DATAを設定しているため CLI がサーバーと同じ DB を開きます。これも確認して PR の本文に記載しました。 - サイドカーの
401はテンプレートと上記の計測から導き出される結論であり、サイドカーのログで直接確認したものではありません(未計測)。
3. 変更内容: diff の要点
チャートの README の既存セクションの間に「Admin user and password」セクションを追加し、リポジトリのルールに従ってドキュメントの変更だけでもチャートのバージョンを上げました。
-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:
パスワードを変更するコマンドは、値がシェル履歴やプロセス引数に残らないように標準入力で渡す形式(--password-from-stdin)で記述しました。
PR 本文には、何をなぜ変更するのか、上記の計測結果、旧リポジトリのイシューへのリンク、「ドキュメントの変更のみのため helm-unittest は追加していない」という説明を書き、
テンプレートのチェックリスト(DCO 署名、チャートのバージョンアップ、タイトルの [grafana] プレフィックス)をすべて埋めました。本文の最後には、AI の助けを借りて作成し、自身で
確認したという一文を入れました。
4. 反応: 26分
| 時刻(10-17) | 日 |
|---|---|
| 00:35 | コミット(DCO 署名・SSH 署名) |
| 00:50 | PR 公開 |
| 00:50 ~ | チェック: チャートテスト、生成ファイル、タイトル、DCO、統合テスト9件、Super Linter — 14件すべて合格 |
| 01:14 | メンテナーのコメント「Thanks!」 |
| 01:16 | 承認、5秒後にマージ |
| 01:16 | マージの28秒後に grafana-14.0.1 リリース |
SeaweedFS の時とは異なりレビューボットはおらず、メンテナーの言葉も一言だけでした。修正すべき点がなかったということです。こちらで個別に対応すべき事項はありませんでした。
5. 学んだこと: オープンソースへの貢献のコツ
- 移転先のリポジトリには古いイシューが残っています。 チャートが新しい組織に移行した際、旧リポジトリの報告が新しい README に反映されていませんでした。 旧リポジトリのイシュー番号を本文に記載することで、「個人の不満」ではなく「既知の古い問題」であることをメンテナーが即座に理解できます。
- ドキュメントの1文と応答コードの表をセットで記載します。 「Set once on first-run」はその通りですが短すぎます。200/401の表はその文言が実際の運用において何を意味するのかを示しています。
- README に記載するコマンドは実際に実行してみます。 distroless イメージにおいて
grafana cliがPATHに存在するか、同じ DB を開くかまで確認した 上で記載しました。読者がコピー&ペーストするコマンドが間違っていれば、ドキュメントはない方がマシです。 - リポジトリのルールにまず従います。 ドキュメントの変更だけでもチャートのバージョンを上げるルール、タイトルのプレフィックス、DCO 署名。チェックリストをすべて満たした PR は メンテナーの確認事項が少なくなります。今回はマージとリリースまで自動的に行われました。
- 同じ罠を自社の運用ドキュメントにも記載します。 アップストリームのドキュメントはすべての人のためのものであり、運用手順は TT Lab クラスターでそのまま実行できる必要があります。今回の PR のローテーション順序(Grafana が先、Secret が後)は、私たちの運用手順にすでに存在していました。
TT の一言。 パスワードは最初に一度だけ覚えるタイプの友達です。Secret を変更しても記憶はそのままなので、まず友達に直接新しいパスワードを教えてから Secret を変更しなければなりません。それをドキュメントに書いたら、26分で「ありがとう!」が返ってきました。
リンク
すべての資料は 2026-10-17 に閲覧しました。
- PR: grafana-community/helm-charts#896 (マージコミット
e45de0a3) - リリース: grafana-14.0.1
- Grafana 設定ドキュメント
admin_password: https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#admin_password - Grafana CLI による管理者パスワードのリセット: https://grafana.com/docs/grafana/latest/administration/cli/#reset-admin-password
- 旧リポジトリの報告: grafana/helm-charts#152
- チャートのソース(ベースコミット):
templates/_pod.tpl,templates/_helpers.tpl