Helm がリリース情報を K8S Secret に保存しているしくみ¶
原文¶
Most Helm users don't know this
When you run helm install or helm upgrade, Helm stores release info in Kubernetes Secrets in the same namespace.
It contains: Release name / Deployment status / Applied manifests / Values used / Chart information
The secret data is compressed (gzip) + base64 encoded.
The secret name will be created in this pattern: sh.helm.release.v1.[release-name].v[revision]
When you run helm rollback, Helm reads these secrets to restore your application to an earlier version.
Helm doesn't need an external database. Everything is stored in your cluster as native Kubernetes secrets.
要約¶
helm install/upgrade を実行するたびに、Helm はリリース情報(マニフェスト・values・ステータス等)を K8S の Secret として同じ namespace に保存する。ロールバック時はこの Secret を読んで復元する。外部 DB 不要でクラスター内に完結。
解説¶
Helm の状態管理の仕組み¶
helm install myapp ./chart
→ namespace に Secret を作成
名前: sh.helm.release.v1.myapp.v1
helm upgrade myapp ./chart
→ 新しい Secret を作成
名前: sh.helm.release.v1.myapp.v2
(v1 は保持される)
helm rollback myapp 1
→ sh.helm.release.v1.myapp.v1 を読んで復元
Secret の中身¶
kubectl get secret sh.helm.release.v1.myapp.v1 -o json | \
jq -r '.data.release' | base64 -d | base64 -d | gunzip | jq .
含まれる情報:
- name:リリース名
- version:リビジョン番号
- status:deployed / failed / pending など
- manifest:適用された YAML マニフェスト全文
- chart:チャートのメタ情報
- config:使用した values
運用上の注意点¶
| 注意点 | 内容 |
|---|---|
| Secret の増加 | アップグレードのたびに Secret が増える → --history-max で制限 |
| RBAC | Helm の Secret を読める権限 = デプロイ内容が見える。適切な RBAC 設定が必要 |
| 大きなチャート | Secret のサイズ制限(1MB)を超える場合がある |
| バックアップ | etcd ごとバックアップすれば Helm のリリース履歴も保全される |
→ 関連: K8Sデプロイ設計判断、K8Sマニフェストのアノテーション