バージョンアップ情報
Kustomize情報
Kustomizeとは
Kustomizeは、ベースとなるKubernetesマニフェストファイルに対して変更部分のパッチを定義して、そのパッチが適用された新しい環境用のマニフェストファイルを出力するコマンドラインツールです。
Kustomizeのバイナリをダウンロードして利用することも可能ですが、kubectlコマンドの1.14以降には、Kustomizeの機能が同梱されています。
Kubernetesのマニフェストを複数の異なる環境に展開する場合、それぞれの環境ごとに設定を微妙に変更することがほとんどです。
変更内容は、コンテキスト(名前空間、ラベル等)やイメージ(レポジトリ、タグ等)、アプリケーション構成(コマンド引数、環境変数等)、リソースパラメータ(CPU、メモリ、レプリカ数等)など様々です。
これらの違いはYAMLファイルの一部分ですが、その違いのために環境ごとにマニフェスト全体をコピーして作成してしまうと、ベースとなる共通部分に構成の変更が生じた場合に、すべての環境のマニフェストにもその変更を反映させる必要があり、構成管理が煩雑になります。
このような問題点を解決するためにKustomizeが開発されました。
Kustomizeでは、「ベース」という概念を用います。
これは、共通のリソース設定を持つマニフェストファイルの集まりです。
これに対して、異なる環境特有の設定を行うための「オーバーレイ」と呼ばれるパッチを作成します。
オーバーレイは、ベースに加えられる変更や追加を含み、これによって定義の重複を避けながらバージョン管理が可能になります。
たとえば、開発環境用のリソースと本番環境用のリソースを持っている場合、共通の設定をベースにし、それぞれの環境特有の設定をオーバーレイとして定義することができます。
これによって、単一のベースから多様な環境設定を簡単に生成できるのです。
このように、Kustomizeを利用すれば、環境ごとの差分はパッチをメンテナンスするだけでよくなり、共通部分に変更があったとしてもその影響を受けなくなります。
リソースの重複を最小限に抑えつつ、環境特有の設定を簡単に適用できるため、多くのプロジェクトで採用されている手法です。
こうした特徴から、KustomizeはKubernetes環境におけるリソース管理のベストプラクティスの一つとなっています。
主な特徴
テンプレートレス |
Kustomizeで使用するYAMLファイルはKubernetesでそのまま利用できるプレーンのYAMLファイルです。 |
---|---|
kubectlコマンドに同梱 |
kubectl 1.14 以降は、Kustomizeの機能がkubectlコマンドに同梱されており、Kustomizeを別途導入する必要がありません。
|
ジェネレーター |
ConfigMapやSecretをファイルもしくはリテラルのキーと値のペアから、生成することが可能です。 |
横断的な共通設定 |
Namespaceプレフィックス/サフィックス、Annotations |
リソースへのパッチ適用 |
kustomization.yamlにより、既存のマニフェストファイルに対して、変更箇所を示すパッチを指定することで、個々の環境に合わせたカスタマイズを実施することが可能です。 |
ベースとオーバーレイ |
kustomization.yamlを多段で組み合わせる(オーバーレイ)を実施することが可能です。 |
メリット・デメリット
メリット・必要性
- 柔軟性: 環境ごとに異なる構成を持つ場合でも、基本の設定を保持したままパッチを適用できるため、柔軟な管理が実現可能です。
- 重複排除: リソースの重複を避けることで、コードの保守性が向上します。
- バージョン管理: YAMLファイルがそのままバージョン管理可能なため、変更履歴の追跡が容易です。
- テストの容易さ: 環境ごとの設定を気軽にテストでき、CI/CDプロセスに組み込みやすくなります。
デメリット・注意点・課題
- 学習コスト: 初めて使う人にとっては、Kustomizeの概念や使用法に慣れるまでに時間がかかることがあります。
- 機能の限界: 複雑なテンプレート機能は提供されていないため、より柔軟なロジックを必要とする場合には不向きです。
- エコシステムの取り込み: KustomizeはKubernetesの一部として進化していますが、他のツールやライブラリとの統合時に、それぞれのツールのバージョンや設定が影響を及ぼす場合があります。
類似プロダクト
Kustomizeと類似の機能をもつOSSとしては、以下のようなものがあります。
- Helm
- Jsonnet
- ytt
動作環境
Linux、macOS、Windows版のバイナリモジュール、Dockerイメージが提供されています。もしくは、kubectl(1.14以上)が使える環境であれば、利用することができます。
Kustomizeのライセンス
KustomizeはApache License 2.0ライセンスのソフトウェアで、ユーザはそのソフトウェアの使用や頒布、修正、派生版の頒布をすることに制限を受けません。
製品ダウンロード
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
Kubernetes
クーバネティス。Dockerをはじめとするコンテナ化されたアプリケーションの展開、スケーリング、管理を行うオープンソースのプラットフォームです。
-
サポート対象
Helm
ヘルム。Kubernetesクラスタのためのパッケージマネージャで、Kubernetes向けパッケージマネージャとして現在最も人気のある製品となっています。