KustomizeとHelmの違い

地面に座ってコンピューターで作業する2人

執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

KustomizeとHelm:何が違うのか

Kubernetesアプリケーションの管理とデプロイメントにおいて、常に注目されるツールが2つあります:KustomizeとHelmです。どちらもKubernetesデプロイメントの複雑さを簡素化しますが、同じ課題に対して本質的に異なるアプローチを取ります。

HelmはKubernetes向けのパッケージ・マネージャーで、アプリケーションに必要なすべてをHelmチャートと呼ばれる単一の再利用可能なパッケージにまとめます。KustomizeはKubernetesネイティブのツールで、テンプレート言語を使わずにパッチやオーバーレイを用いてベース構成を変更する宣言型アプローチを採用します。

これらのツールの選択は単なる技術的嗜好ではありません。開発チームの生産性、運用コスト、信頼性高いスケールの可否に直結します。多くの組織は両ツールを併用することで大きな価値を見いだしますが、それぞれを「いつ・なぜ」選ぶかを理解することが、効果的でスケーラブルなKubernetesのデプロイ/運用戦略の構築に不可欠です。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

Kubernetesとコンテナ化の基礎

KustomizeとHelmについて詳しく見る前に、最新のクラウドネイティブアプリケーションの基盤であるコンテナ化を理解しておくといいでしょう。

コンテナ化は、アプリケーションの実行に必要なコード、ライブラリー、構成をまとめて軽量で可搬性の高い単位であるコンテナにパッケージ化し、これらは一般にLinuxベースのシステム上で動作します。このプロセスにより、開発者のノートPCから本番のクラウド基盤まで、さまざまな環境で一貫してソフトウェアを実行できます。

Kubernetes(k8sまたはkubeとも呼ばれる)は、複数マシンのクラスタ全体にわたりデプロイ、スケーリング、リソース管理を自動化することで、コンテナ(通常はDockerベース)を大規模にオーケストレーションします。

Cloud Native Computing Foundation(CNCF)の2024年の調査によれば、調査対象組織におけるクラウドネイティブの採用率は過去最高の89%に達し、93%の組織がKubernetesを利用中、試験導入中、または評価中と回答しています。1

組織がシンプルなアプリケーションから複雑なマルチサービス・アーキテクチャーに移行するにつれて、Kubernetesのデプロイメントの管理に必要となる構成ファイルはますます複雑になっています。一般的なエンタープライズ・アプリケーションでは、数十の設定ファイルが必要になる場合があり、開発、ステージング、運用などの環境に合わせてそれぞれのファイルをカスタマイズする必要があります。

この複雑さにより、次のようなビジネス上の課題が生じます:

  • 環境間での一貫性を保つことが困難
  • 運用コストの増大
  • デプロイメント自動化の不足による手作業のミス
  • 新機能の市場投入までの時間の長期化

KustomizeとHelmはいずれもこうした課題に対処するために作られましたが、採用しているアプローチは大きく異なります。Helmは、Kubernetesアプリケーション管理の簡素化を目的とする初期のツールの一つとして、Deis(のちにMicrosoftが買収)が最初に市場に投入しました。2018年にDeisがCNCFへ寄贈したことでプロジェクトの信頼性はさらに高まり、2020年にはCNCFの卒業プロジェクトに認定されました。

一方、Kubernetesは2019年にリリースされたKubernetes 1.14で、Kustomizeをkubectlコマンドライン・インターフェース(CLI)に直接統合しました。

OpenShift

OpenShiftを使用してクラウドでコンテナを実行する方法をご覧ください

コンテナを使用すると、さまざまな環境間でアプリケーションを簡単に構築、実行、移動できます。このビデオでは、IBM Cloudを使用したOpenShiftでコンテナ化されたアプリケーションのチームによる効率的な管理を支援し、クラウド開発の迅速化と信頼性を高める方法を紹介します。

Kustomizeの動作

Kustomizeは宣言型の構成管理アプローチを採用します。特定の状態を実現する手順をスクリプト化するのではなく、DevOpsなどのチームは、最終的な構成のあるべき姿を記述します。

本ツールは「ベースとオーバーレイ」という方法論を用います。チームは、アプリケーションの本質的な特性を捉えた標準的なベース構成を維持し、各環境やバリアントごとに、その文脈で必要となる差分だけを指定するオーバーレイを作成します。

例えば、標準的なリソース要件と基本的なネットワーク設定を定義したWebアプリケーションのベース構成を考えてみましょう。開発向けのオーバーレイではコスト削減のためにリソース上限やレプリカ数を下げ、本番向けのオーバーレイではセキュリティー設定を強化し、監視コンポーネントを追加できます。Kustomizeは、これらの構成をマージして、Kubernetesリソースの意図する状態を記述する最終的なデプロイ用マニフェスト(YAMLまたはJSONファイル)を生成します。

Kustomizeは、deployment.yamlなどのネイティブなYAMLマニフェスト・ファイルに直接対応し、apiVersionのような標準的なKubernetesフィールドをそのまま扱います。このアプローチによりテンプレート言語は不要となり、標準のKustomize用YAML設定以外のコーディング構文を新たに学習せずに導入できます。その結果、既に慣れ親しんだKubernetesのYAML構文を使いながら、高度な構成管理を迅速に実装できます。

Helmの動作

市場で最も広く使われているKubernetesパッケージ・マネージャーであるHelmは、Kubernetesアプリケーション向けのアプリストアのように機能し、事前パッケージ化されたアプリケーションの管理とインストールを容易にします。最近のCNCF調査によれば、Kubernetesを運用する組織の75%がHelmを優先的なパッケージ・マネージャーとして採用しています。2

Helmはアプリケーションを「Helmチャート」にパッケージ化します。これは、チームが単一ユニットとしてインストール、アップグレード、管理できる、事前設定済みのKubernetesリソースの集合体です。各チャートにはchart.yamlなどの設定ファイルが含まれ、入力値に基づく動的な設定を可能にするGoテンプレートを使用します。

Helmの強みは、そのテンプレート・エンジンとパッケージ管理機能にあります。類似した構成の複数バージョンを個別に維持するのではなく、Helmではプレースホルダーを含むチャートを作成し、values.yamlなどの別個の値ファイルを用いてデプロイ時にそれらを埋め込めます。クラスタに適用する前に、helm templateを使って最終的なレンダリング結果をプレビューすることもできます。

Helmはテンプレートに加え、デプロイメントのロールバック、リリース管理、デプロイメント履歴の追跡など、包括的なライフサイクル管理機能を提供します。これらの機能を備えたHelmは、オーケストレーション機能とロールバック機能が重要となる複雑なアプリケーション・ポートフォリオを管理する組織にとって有用です。

例えば、eコマース企業は、オンライン・ストア向けに1つのチャートを用意しつつ、環境ごとにカスタマイズできます。テストではサーバーを少なく、本番ではサーバーを多くするといった調整を、個別の設定ファイルを増やさずに実現できます。

これらのチャートをデプロイするために、チームはhelm installを使用します。これにより、アプリケーション・プログラミング・インターフェース(API)を通じて、すべての参考情報がターゲットとなるKubernetesクラスターに自動的に適用されます。Helmはバージョン管理と依存関係管理を自動的に処理することで、一貫性があり信頼性の高いデプロイメントを実現します

HelmとKustomizeの使い分け

KustomizeとHelmのどちらを選択すべきかは、デプロイメントにおける課題とビジネスの目標によります。複数の環境において同じアプリケーションをカスタマイズしている組織は、通常、Kustorizeの恩恵を最も享受します。複数のアプリケーションを管理する場合や、高度なデプロイメント制御が必要な場合には、Helmが適しています。

次のセクションでは、それぞれの解決策をいつ使うべきかを詳しく説明します。

Kustomizeを選ぶとき

マルチ環境デプロイ

ほとんどの組織は、微妙ながら大きな違いのある開発環境、ステージング環境、本番環境に同じアプリケーションをデプロイする必要があります。Kustomizeはこのような場面を得意としており、チームは環境固有の修正を適用しながら、信頼できる唯一の情報源を維持することができます。

開発環境ではコスト削減のためにリソース上限を抑える一方で、本番環境ではセキュリティー設定を強化し、異なるConfigMapや監視コンポーネントが必要になる場合があります。Kustomizeを使えば、これらの差分を、構成ファイル全体を複製せずに定義できます。

構成コンプライアンス

デプロイメントの状況によっては、異なるセキュリティー・ポリシーやコンプライアンス要件が求められることもあります。Kustomizeを使えば、こうした要件をベース構成にオーバーレイとして重ねるだけで済み、完全に別の構成一式を新たに作成する必要はありません。この機能は、複数の地域や業界にまたがって事業を行い、地域・業界ごとに異なる規制要件に対応する必要がある組織にとって有用です。

構成の段階的ロールアウト

大規模なアプリケーション群に構成変更を段階的に展開する際にも、Kustomizeは全体の構成を崩すことなくインクリメンタルに変更できるため、リスク低減につながり、設定ミスやデプロイ失敗といった問題の特定と修正が容易になります。

Helmを選ぶとき

アプリケーション配布

Helmの主な利点の一つはパッケージング機能であり、プラットフォームを構築する組織や、チーム横断でアプリケーションのデプロイを標準化したい組織に特に有効です。

ベスト・プラクティスや社内標準を取り込んだ再利用可能なチャートを作成し、企業全体に配布できます。

複雑なアプリケーション・ライフサイクル管理

多段階のロールアウト、依存関係の管理、ロールバック機能など、洗練されたデプロイ・オーケストレーションを要するアプリケーションは、Helmのリリース管理機能に適しています。問題が発生した場合でも、Helmは直ちに直前の稼働バージョンへロールバックでき、ユーザーへの影響を最小化します。

サードパーティー・アプリケーションの連携

一般的なオープンソースアプリケーションやベンダーのソリューションを統合する場合、Helmの多岐に渡るチャート・リポジトリ(chart repo)のおかげで、実装時間を大幅に短縮するビルド済みパッケージを入手できます。

ゼロから構築するのではなく、コミュニティが管理するデータベース、監視システムの継続的インテグレーションまたは継続的デリバリー(CI/CD)パイプライン、およびその他の標準ITインフラストラクチャーコンポーネント向けのチャートを活用できます。

マルチテナント展開

SaaSプラットフォームでは、アプリケーションの顧客別デプロイメントを管理するためにHelmを使用することがよくあります。別々のネームスペースで、構成の異なる同一アプリケーションを複数回デプロイします。 このアプローチにより、マルチテナント・アーキテクチャーに必要な分離性とカスタマイズ性が得られます。

Kustomizeのメリット

Kubernetesの構成管理をするうえで、Kustomizeの使用は次のようなメリットがあります。

学習曲線の短縮

Helmと比較して、KustomizeはネイティブなKubernetesのYAMLファイルを扱うため、チームはより迅速に採用できます。 この特性は、組織にとってのオンボーディングの迅速化とトレーニング・コストの削減につながります。

構成の透明性

Kustomizeを介して行う変更はすべて明示的で追跡可能です。 この透明性は、厳格な監査要件を持つ組織、構成上の問題をデバッグする際、または自社アプリケーションの構成内容を正確に把握したい企業にとって極めて重要です。

最小限のツールのオーバーヘッド

Kustomizeはkubectlコマンドライン・ツールに組み込まれているため、他のソフトウェアのインストールや保守をせずともkubectlloyコマンドを使用できます。これにより複雑な運用から解放され、起こりうる障害点を軽減します。

バージョン管理との統合

KustomizeはプレーンなYAMLファイルで動作するため、GitやGitHubのような標準的なバージョン管理システムを通じて、すべての構成変更を追跡できます。これにより、共同作業と変更管理のワークフローを強化できます。

Helmのメリット

組織は、次のような利点のためにHelmを選択します。

リリース管理

Helmに組み込まれているリリース管理にはデプロイメントの追跡、ロールバック機能、アップグレードオーケストレーションが備わっています。アップグレードが失敗したり問題が発生した場合でも、チームはコマンド一つで、正常に動作していた以前のバージョンに即座に戻すことができます。

標準化と再利用性

ベスト・プラクティスや社内ポリシーを反映した標準化チャートを作成し、複数のアプリケーションやチームにわたって再利用できます。 このアプローチにより、開発時間を短縮しつつ一貫性を確保できます。

依存関係の管理

Helmは複雑なアプリケーションの依存関係を管理し、必要なコンポーネントを正しい順序で自動的にインストールし、構成します。この機能はマイクロサービスアーキテクチャや多層Webアプリケーションのような、複数の相互接続されたサービスを持つアプリケーションにとって有用です。

KustomizeとHelmを組み合わせるユースケース

KustomizeとHelmを競合するソリューションと見なすのではなく、両者を併用することで大きな価値を見いだす組織も少なくありません。 このハイブリッドなアプローチは、それぞれの強みを活かしつつ、弱点を補います。

代表的なユースケースを以下に示します:

  • 初期デプロイと環境別のカスタマイズ
  • カスタム構成を持つサードパーティ製アプリケーション
  • 複数チーム環境

初期デプロイと環境別カスタマイズ

両者の組み合わせとしては、アプリケーションの初期パッケージングとデプロイメントにHelmを実装し、その後、Kustomizeを使用して環境固有のカスタマイズを適用する方法が一般的です。こうすることで、継続的な構成管理におけるKustomizeのシンプルさと透明性を確保しつつ、Helmのパッケージ管理とリリース機能が持つメリットを享受できます。

例えば、組織はHelmチャートを使って、依存関係を含むマイクロサービス・アプリケーションをデプロイし、その次の段階でKustomizeのオーバーレイを用い、本番向けのセキュリティー・ポリシーを追加したり、ステージング向けに異なるKubernetes Ingressルールを設定したりします。

カスタム構成を伴うサードパーティー・アプリケーション

組織は多くの場合、Helmを使用して豊富なチャートリポジトリからサードパーティアプリケーションをデプロイし、構成管理をより直接的に制御したいカスタムアプリケーションにはKustomizeを使用します。

この組み合わせにより、監視システムやメッセージ・キューなどの一般的なツールについてはコミュニティーがメンテナンスするチャートを活用しつつ、自社アプリケーションに対する完全なコントロールを維持できます。

マルチチーム環境

大規模組織で複数の開発チームがある場合、プラットフォーム・チームが、組織のベスト・プラクティスやコンプライアンス要件を組み込んだ標準化Helmチャートを作成することがよくあります。 これらのチャートは、Infrastructure as Code(IaC)ツール(Terraformなど)と連携し、デプロイメント・パイプライン全体を管理します。

そのうえで各開発チームは、ベースのチャートを変更することなく、Kustomizeを使って自分たちのアプリケーションや環境に合わせてカスタマイズします。 このアプローチにより、ArgoCDなどのGitOpsツールとシームレスに統合できる、クリーンな分離が実現し、自動化されたデプロイメント・ワークフローを構築できます。

まとめ

効果的なKubernetesの構成管理には、変化するアプリケーションの要件に適応できる柔軟な戦略が必要です。

HelmとKustomizeの違いを理解し、それらを効果的に統合する方法を把握しておくことで、複雑さを抑えつつ一貫性を維持できます。 その結果、保守性と拡張性に優れたKubernetes環境を実現できます。

関連ソリューション
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloudは、フルマネージドのOpenShiftコンテナ・プラットフォーム(OCP)です。

Red Hat OpenShiftの詳細はこちら
コンテナ・ソリューション

コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントにより、コンテナ化されたワークロードを実行およびスケールアップします。

コンテナの詳細はこちら
クラウド・コンサルティング・サービス 

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

IBMのコンテナ・ソリューションでインフラストラクチャーをモダナイズします。IBMの包括的なコンテナ・プラットフォームを使用して、柔軟性、セキュリティー、効率性を備えたコンテナ化されたワークロードを環境全体で実行、拡張、管理します。

コンテナ・ソリューションの詳細はこちら 無料のIBM Cloudアカウントを作成
脚注

1. Cloud Native 2024:コード、クラウド、変革の10年に向けて(英語)、Cloud Native Computing Foundation、2025年4月1日

2. CNCF 2023年年次調査(英語)、Cloud Native Computing Foundation、2023年