- Authors

- Name
- Youngju Kim
- @fjvbn20031
- 1. リリース保存構造
- 2. Installフロー
- 3. Upgradeフロー
- 4. Rollbackフロー
- 5. Hookシステム
- 6. Uninstallフロー
- 7. Atomicインストールとwait
- 8. リリース情報の照会
- 9. まとめ
1. リリース保存構造
1.1 Secretに保存されるリリースデータ
Helmはリリースの全リビジョンをKubernetes Secretとして管理します。
kubectl get secrets -l owner=helm,name=my-release -n default
# sh.helm.release.v1.my-release.v1 helm.sh/release.v1 1 30m
# sh.helm.release.v1.my-release.v2 helm.sh/release.v1 1 15m
1.2 リリース履歴
helm history my-release
helm upgrade my-release ./my-chart --history-max 5
2. Installフロー
1. チャートの読み込みと依存関係の解決
2. valuesのマージ(デフォルト値 + ユーザー値)
3. テンプレートのレンダリング
4. YAMLの妥当性検証
5. CRDのインストール(crds/ディレクトリ)
6. pre-installフックの実行
7. Kubernetes APIでリソースを作成
8. リリースSecretの保存(status: deployed)
9. post-installフックの実行
10. NOTES.txtの出力
helm install my-release ./my-chart -n production --create-namespace
helm install my-release ./my-chart --atomic --timeout 5m
helm install my-release ./my-chart --wait --timeout 10m
helm install my-release ./my-chart --dry-run=server
3. Upgradeフロー
3.1 Three-way Strategic Merge Patch
Helm 3の核心的な改善点です。3つの状態を比較します:
前回リリースのマニフェスト(Old Chart)
- 比較 -
現在のライブ状態(Live State)
- 比較 -
新しいリリースのマニフェスト(New Chart)
メリット:
- kubectlで直接変更した内容を認識
- 不要なリソース再作成を防止
- ユーザーの手動変更を安全にマージ
helm upgrade my-release ./my-chart -f new-values.yaml
helm upgrade --install my-release ./my-chart
helm upgrade my-release ./my-chart --reuse-values --set image.tag=v2.1.0
4. Rollbackフロー
1. 対象リビジョンのリリースデータを読み込み
2. そのリビジョンのマニフェストを「新しいマニフェスト」として使用
3. Three-way mergeで変更点を計算
4. pre-rollbackフックの実行
5. リソースの適用
6. 新しいリビジョン番号でリリースを保存
7. post-rollbackフックの実行
helm rollback my-release # 前のリビジョン
helm rollback my-release 2 # 特定のリビジョン
重要: ロールバックは前のマニフェストを復元するのではなく、前のリビジョンのチャートとvaluesに基づいて新しいリビジョンを作成します。
5. Hookシステム
5.1 Hookの種類
| Hook | 実行タイミング |
|---|---|
| pre-install | テンプレートレンダリング後、リソース作成前 |
| post-install | 全リソースがクラスタにロードされた後 |
| pre-upgrade | アップグレード時、リソース更新前 |
| post-upgrade | リソース更新後 |
| pre-rollback | ロールバック時、リソースロールバック前 |
| post-rollback | リソースロールバック後 |
| pre-delete | 削除要求時、リソース削除前 |
| post-delete | 全リソース削除後 |
| test | helm test実行時 |
5.2 Hook定義例
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "my-chart.fullname" . }}-db-migrate
annotations:
"helm.sh/hook": pre-upgrade,pre-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation
spec:
template:
spec:
restartPolicy: Never
containers:
- name: migrate
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
command: ["./migrate", "--up"]
5.3 Hook削除ポリシー
| ポリシー | 説明 |
|---|---|
| before-hook-creation | 新しいHook実行前に前のHookリソースを削除 |
| hook-succeeded | Hook成功時に削除 |
| hook-failed | Hook失敗時に削除 |
6. Uninstallフロー
helm uninstall my-release
helm uninstall my-release --keep-history
注意: CRDはuninstallで削除されません。手動削除が必要です。
7. Atomicインストールとwait
7.1 --waitフラグ
Deployment/StatefulSetの全Pod Ready、Service IP割り当て、Job Complete、PVC Boundまで待機。
7.2 --atomicフラグ
--waitを含み、さらにインストール失敗時に自動uninstall、アップグレード失敗時に自動rollback。
helm install my-release ./my-chart --atomic --timeout 5m
8. リリース情報の照会
helm list --all-namespaces
helm status my-release
helm get values my-release --all
helm get manifest my-release
helm get all my-release
9. まとめ
Helmリリースライフサイクルの要点:
- Secretベースのリビジョン管理: 全リリース履歴をKubernetes Secretで管理
- Three-way Merge: 前のマニフェスト、ライブ状態、新しいマニフェストの比較による安全なアップグレード
- Hookシステム: ライフサイクルの各段階にカスタムロジックを挿入
- Atomicデプロイ: 失敗時の自動ロールバックで安定性を保証
- 履歴ベースのロールバック: 前のリビジョンのチャート/valuesに基づいて新しいリビジョンを生成