コンテンツにスキップ

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 のリリース履歴も保全される
# リリース履歴の確認
helm history myapp

# Secret の一覧
kubectl get secrets | grep helm.release

→ 関連: K8Sデプロイ設計判断K8Sマニフェストのアノテーション

リンク