Kubernetes Meetup Tokyo #29 で使用したスライドです。
扱う環境やアプリケーションごとに Kubernetes Manifest の内容を変えたいとき、代表的な方法が二種類あります。
ひとつは Helm のように「穴」が空いたテンプレートを用意しておき、必要に応じて値を当てはめて最終的な YAML を生成する方法。この方法はわかりやすいですが、カスタマイズできるポイントが最初から決まっており、さらに共通した構造を持つテンプレートを階層化することもできないため、全体として自由度が乏しくなるという欠点があります。
もう一つは Kustomize のようにベースとなる YAML を用意して、必要に応じて部分的に上書きしていく方法。こちらの方法ではカスタマイズできるポイントは限定されず、さらに作成した YAML をベースにして追加カスタマイズを加えることも可能ですが、出力される YAML は合成の順番に依存するため最終的な結果がわかりづらいのが欠点です。
これらに対して今回紹介する CUE では、型を「値が取りうる範囲」と捉え、値に対する制約の階層構造を考えます。拡張の柔軟性は残したまま、合成の順番に依存せず最終的な結果を得ることができるのが特徴です。