ぷちコラム:YAMLエンジニアと長くなるYAMLの戦い
Kubernetesの運用をはじめていくとYAMLを書いている時間が長くなり、「YAMLエンジニア」と揶揄する方もいます。なるべく簡単にYAMLを扱いたい、同じようなYAMLをたくさん書きたくない、そういう時に以下のツールの導入を検討してみてはいかがでしょうか。
Kustomize
環境毎にマニフェストが少しだけ違う場合、なるべく修正を少なくするために差分だけ管理したいこともあるでしょう。このようなケースで利用できるのがKustomizeです。具体的には、マニフェストの共通部分はbaseというディレクトリで管理し、環境毎の差分をoverlaysというディレクトリ内のマニフェストで管理する、という使い方が可能です。
最終成果物はKustomzie buildというコマンドを用意してビルドします。実はkubectlもKustomize buildに対応しているのですが、kubectlが利用するKustomizeのバージョンは古いので注意してください。
Helm
Helm自体はパッケージマネージャとなっており、マニフェストを作成する以上のことが可能です。Chartというテンプレートを元に、helm installをすることでKubernetesクラスタにマニフェストをデプロイする仕組みになっています。Kustomizeに比べて「テンプレート」と言われた時に想像する形式と近い(ex. jinja2など)ため、シンプルでわかりやすいです。一方でテンプレートに書かれていること以上のことをやりたくなった場合、別の方法を検討したりテンプレートの設計を見直したりする必要が出てきます。
Jsonnet
KustomizeよりもHelmよりもかなり柔軟性が高いツールとなっています。こちらはYAMLではなくJSONを扱うツールなのでYAMLを出力したい場合はyqを使う必要があります。また、Jsonnet自体はKubernetesに特化したツールなわけではありません。JSONをプログラムチックに扱うことができるため、柔軟性が高くなんでもできてしまいます。柔軟性は高いですが、複雑なことを行おうとするとその分学習コストは必要になります。また、独自記法に慣れる必要があります。
自作テンプレート
どのツールでもうまくあてはまらない場合、テンプレートを自作する方法もあります。各言語にテンプレートライブラリが存在するので、自分の得意な言語でテンプレートを作ってみても良いでしょう。