Skip to content
Latchkey

Kustomize vs Helm: Kubernetes の設定アプローチ

Kustomize はオーバーレイでプレーンな YAML にパッチを当て(テンプレートなし)、Helm は values と release ライフサイクルを持つテンプレート化された chart をパッケージ化します。

どちらも Kubernetes マニフェストを生成しますが、思想的に異なります。Kustomize はベース YAML を保持し、戦略的パッチで環境オーバーレイを重ねます。Helm は chart と values ファイルから Go テンプレートをレンダリングし、install/upgrade を release として管理します。

KustomizeHelm
アプローチプレーン YAML のオーバーレイ/パッチテンプレート化された chart + values
テンプレート化なし(宣言的パッチ)Go テンプレート
パッケージ化/共有限定的chart + リポジトリ
release ライフサイクルなし(マニフェストを apply)あり(install/upgrade/rollback)
kubectl への組み込みあり(kubectl -k)別ツール

Kustomize が優れている点

いくつかの環境にまたがる自分のマニフェストには、Kustomize は学ぶべきテンプレート言語なしで YAML を読みやすく保ち、kubectl に組み込まれています。オーバーレイは環境ごとの差分を明示的かつレビュー可能にします。Go テンプレートの認知的負荷を避けられます。

Helm が優れている点

アプリケーション、特にサードパーティソフトウェアのパッケージ化と配布には、Helm chart と values ファイルが事実上の標準であり、バージョン管理された release、rollback、巨大な chart エコシステムを備えます。テンプレート内の条件分岐やループは、オーバーレイが苦手とする高度に設定可能なアプリを扱えます。

両方を使う

多くのチームはサードパーティソフトウェアを Helm で install し、自分のサービスを Kustomize で管理します。中には Helm の出力をレンダリングしてから Kustomize でパッチを当てるところもあります。両者は排他的に選ばれるのではなく、しばしば組み合わせて使われます。

結論

自分のマニフェストとテンプレートなしのシンプルな環境オーバーレイには Kustomize を使い、release ライフサイクルを持つ設定可能なアプリのパッケージ化・共有・バージョン管理には Helm を使いましょう。両者の組み合わせは一般的で有効です。

関連ガイド