トップ OSS紹介 Kustomize

Kustomize

サポート対象

NRIのOpenStandiaが提供するKustomize最新情報

バージョンアップ情報

Kustomize情報

Kustomizeとは

Kustomizeは、ベースとなるKubernetesマニフェストファイルに対して変更部分のパッチを定義して、そのパッチが適用された新しい環境用のマニフェストファイルを出力するコマンドラインツールです。
Kustomizeのバイナリをダウンロードして利用することも可能ですが、kubectlコマンドの1.14以降には、Kustomizeの機能が同梱されています。

Kubernetesのマニフェストを複数の異なる環境に展開する場合、それぞれの環境ごとに設定を微妙に変更することがほとんどです。
変更内容は、コンテキスト(名前空間、ラベル等)やイメージ(レポジトリ、タグ等)、アプリケーション構成(コマンド引数、環境変数等)、リソースパラメータ(CPU、メモリ、レプリカ数等)など様々です。
これらの違いはYAMLファイルの一部分ですが、その違いのために環境ごとにマニフェスト全体をコピーして作成してしまうと、ベースとなる共通部分に構成の変更が生じた場合に、すべての環境のマニフェストにもその変更を反映させる必要があり、構成管理が煩雑になります。
このような問題点を解決するためにKustomizeが開発されました。

Kustomizeでは、「ベース」という概念を用います。
これは、共通のリソース設定を持つマニフェストファイルの集まりです。
これに対して、異なる環境特有の設定を行うための「オーバーレイ」と呼ばれるパッチを作成します。
オーバーレイは、ベースに加えられる変更や追加を含み、これによって定義の重複を避けながらバージョン管理が可能になります。
たとえば、開発環境用のリソースと本番環境用のリソースを持っている場合、共通の設定をベースにし、それぞれの環境特有の設定をオーバーレイとして定義することができます。
これによって、単一のベースから多様な環境設定を簡単に生成できるのです。

このように、Kustomizeを利用すれば、環境ごとの差分はパッチをメンテナンスするだけでよくなり、共通部分に変更があったとしてもその影響を受けなくなります。
リソースの重複を最小限に抑えつつ、環境特有の設定を簡単に適用できるため、多くのプロジェクトで採用されている手法です。
こうした特徴から、KustomizeはKubernetes環境におけるリソース管理のベストプラクティスの一つとなっています。

主な特徴

テンプレートレス

Kustomizeで使用するYAMLファイルはKubernetesでそのまま利用できるプレーンのYAMLファイルです。
固有のDSL(Domain Specific Language)で記載されたテンプレートファイルなどを作成したりする必要がないので、導入が容易です。

kubectlコマンドに同梱

kubectl 1.14 以降は、Kustomizeの機能がkubectlコマンドに同梱されており、Kustomizeを別途導入する必要がありません。

  • kustomizationされたリソースの確認
    kubectl kustomize <kustomization_directory>
  • kustomizationされたリソースの適用
    kubectl apply –k <kustomization_directory>

ジェネレーター

ConfigMapやSecretをファイルもしくはリテラルのキーと値のペアから、生成することが可能です。

横断的な共通設定

Namespaceプレフィックス/サフィックス、Annotations
Labelsを横断的に設定することが可能です。

リソースへのパッチ適用

kustomization.yamlにより、既存のマニフェストファイルに対して、変更箇所を示すパッチを指定することで、個々の環境に合わせたカスタマイズを実施することが可能です。
patchesStrategicMergeにより適用するパッチファイルを指定したり、patchesJson6902 により、指定したターゲットにJSONパッチを適用することが可能です。
よくある例としては、ベース環境、開発環境、本番環境用にリソースのカスタマイズを行うようなユースケースです。

ベースとオーバーレイ

kustomization.yamlを多段で組み合わせる(オーバーレイ)を実施することが可能です。
共通のベースを持ちながら、各環境によって、微妙に構成が異なるマニフェストを作成することができるようになります。

メリット・デメリット

メリット・必要性

  • 柔軟性: 環境ごとに異なる構成を持つ場合でも、基本の設定を保持したままパッチを適用できるため、柔軟な管理が実現可能です。
  • 重複排除: リソースの重複を避けることで、コードの保守性が向上します。
  • バージョン管理: YAMLファイルがそのままバージョン管理可能なため、変更履歴の追跡が容易です。
  • テストの容易さ: 環境ごとの設定を気軽にテストでき、CI/CDプロセスに組み込みやすくなります。

デメリット・注意点・課題

  • 学習コスト: 初めて使う人にとっては、Kustomizeの概念や使用法に慣れるまでに時間がかかることがあります。
  • 機能の限界: 複雑なテンプレート機能は提供されていないため、より柔軟なロジックを必要とする場合には不向きです。
  • エコシステムの取り込み: KustomizeはKubernetesの一部として進化していますが、他のツールやライブラリとの統合時に、それぞれのツールのバージョンや設定が影響を及ぼす場合があります。

類似プロダクト

Kustomizeと類似の機能をもつOSSとしては、以下のようなものがあります。

動作環境

Linux、macOS、Windows版のバイナリモジュール、Dockerイメージが提供されています。もしくは、kubectl(1.14以上)が使える環境であれば、利用することができます。

Kustomizeのライセンス

KustomizeはApache License 2.0ライセンスのソフトウェアで、ユーザはそのソフトウェアの使用や頒布、修正、派生版の頒布をすることに制限を受けません。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Kubernetes
    サポート対象

    Kubernetes

    クーバネティス。Dockerをはじめとするコンテナ化されたアプリケーションの展開、スケーリング、管理を行うオープンソースのプラットフォームです。

  • Helm
    サポート対象

    Helm

    ヘルム。Kubernetesクラスタのためのパッケージマネージャで、Kubernetes向けパッケージマネージャとして現在最も人気のある製品となっています。

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。