Helmfile vs Kustomize: 多数の release の管理
Helmfile は環境をまたいで多数の Helm release を宣言的に管理し、Kustomize はオーバーレイで素のマニフェストにパッチを当て、Helm を使いません。
Helmfile は Helm の上に位置し、release の集合全体(chart、values、環境)を一つのファイルで宣言します。Kustomize はまったく別のモデルで、chart もテンプレートもなく、ベースマニフェストにオーバーレイパッチを加えるだけです。
| Helmfile | Kustomize | |
|---|---|---|
| 基盤 | Helm | プレーン YAML |
| スコープ | 多数の release をオーケストレーション | 一連のマニフェストにパッチ |
| テンプレート化 | Helm chart 経由 | なし |
| 環境 | ファーストクラス(environments) | オーバーレイ経由 |
| 適する場面 | 調整すべき chart が多い | 自前のマニフェスト、Helm なし |
Helmfile が優れている点
多数の Helm chart(自分のアプリとサードパーティソフトウェア)を deploy し、どの release、values、環境を適用するかについて一つの宣言的な信頼できる情報源が欲しいなら、Helmfile は集合全体の diff と sync を含めてこれをきれいに調整します。Helm release の群れのために作られています。
Kustomize が優れている点
Helm もテンプレートもまったく使いたくないなら、Kustomize はマニフェストをプレーンでレビュー可能な YAML としてオーバーレイパッチで保ち、kubectl に組み込まれています。自前のマニフェストを書き、Go テンプレートを好まないチームにはよりシンプルです。
CI では
Helmfile は Helm 中心のパイプライン(helmfile diff、helmfile apply)と組み合わさり、Kustomize は kubectl apply -k または GitOps コントローラと組み合わさります。この判断は主に、スタックが Helm ベースかマニフェストベースかに従います。
結論
多数の Helm release を宣言的にオーケストレーションするには Helmfile を、プレーン YAML のオーバーレイで Helm を使いたくないなら Kustomize を使いましょう。この選択は deploy が chart ベースかどうかに追随します。