YAMLテンプレート利用への疑問
- YAMLテンプレートの利用がいつから一般的なものとして受け入れられたのか、そしてそれがどうして受け入れられうるのかという疑問を提起。
- cfgmgmtcamp 2019でKubernetes構成管理の必要性とkr8ソリューションについて発表。
- 発表の中でYAMLテンプレートへの疑問を提起し、オンラインやカンファレンスで活発な議論が起こる。
構成の問題
- アプリケーションとインフラがある程度以上の規模に成長すると、構成の複雑性という問題に直面する。
- さまざまな環境(開発、ステージング、プロダクション)や地域(ヨーロッパ、北米)でデプロイされるアプリケーションでは、構成がそれぞれ異なる場合がある。
- システム管理者やDevOpsエンジニアは構成管理の複雑さをよく理解しており、それぞれのツールがYAMLを使ってこの問題を解決している。
私たちは後退したのか?
- クラウドコンピューティングによって業界の要件が変化し、新しいツールが登場した。
- CloudFormationやHelmのようなツールは優れた構成ツールだが、YAMLテンプレートを設計する際に業界全体として誤りを犯したと考えている。
- Helmチャートがユーザー定義パラメータを受け取る例を挙げて説明する。
Helmチャート
- Helmチャートは
values.yamlファイルを通じて外部パラメータを受け取り、チャートをレンダリングする。
- 単純な文字列パラメータから始めて、オプションのフィールドや配列、マップを構成するときの複雑さを説明する。
- YAMLの厳格な空白要件とテンプレートシステムの限界を指摘する。
JSON, Jsonnet & YAML
- YAMLはJSONのスーパーセットであり、両形式間の変換は簡単である。
- Jsonnetはデータテンプレート言語であり、JSON構成を生成することを目的としている。
Jsonnetの教会
- JsonnetはKubernetesコミュニティの外ではあまり知られていない新しい言語である。
- Jsonnetを使うことで、外部変数を使用するJSON構成を簡単に生成できる。
- オプションのフィールド、マップ、パラメータの扱い方と、Jsonnetの追加機能について説明する。
Kr8
- Kr8は、複数のKubernetesクラスターの構成を容易かつシンプルに作成し操作するために使われる、あらゆる方法を活用している。
- ここで説明した概念に共感するなら、Kr8を確認してみることを勧める。
GN⁺の意見
- YAMLテンプレートの複雑性: この記事はYAMLテンプレートの複雑さと限界を指摘し、構成管理において業界が直面している問題をよく示している。
- Jsonnetの利点: JsonnetがYAMLテンプレートの代替として提示され、その使いやすさと柔軟性を強調することで、新しいツールへの関心を促している。
- 構成管理の未来: この記事は構成管理の未来に関する洞察を提供し、DevOpsやシステム管理者に新しいアプローチを模索する機会を与えている。
1件のコメント
Hacker Newsのコメント
YAML設定ファイルに対する不満は多い。GitHub Actionsでも最悪の部分と見なされており、他の独自設定言語(HCL、ASL など)についても同じように感じる。宣言的APIは良いが、宣言をプログラム的に生成できるようにしてほしいという要望がある。
コードで設定を宣言・生成するほうが、より良い体験を提供する。AWS CDKはこの点を正確に理解しており、型安全な言語とIDEサポートを通じて、設定やクラウドインフラの宣言的定義を記述できる。
YAMLのテンプレート化は不合理だという点に同意しており、複雑なロジックが必要なときは実際のプログラミング言語を使ってYAML/JSONなどを生成すべきだと主張している。そうすれば多くの問題を解決できる。
Kubernetesについての議論があり、Kubernetes APIは直感的でよく定義されたJSONスキーマを持っているにもかかわらず、人々はHelmチャートの使い方を学ぶのに多くの時間を費やしている。Jsonnet、Ksonnet、Nu、CUEは大きな人気を得られず、ほとんどの人は
kubectlに組み込まれたKustomizeを使っているようだ。開発者が設定をどう正しく扱うべきかについて、十分に考えていないという指摘がある。あらゆるプログラミングは実質的に設定の問題だと言え、すべての設定は結局どこかの関数の引数として渡される。設定を中央データベースに保存するほうがよいかもしれない。
CI/CDでYAMLがほとんどプログラミング言語のように使われることがあるが、これは非常に冗長で直感的ではなく、きちんと定義されていないベンダー固有の言語と見なされる。
Helmが勝ってしまったことに遺憾の意を示している。Helmチャート作業は非常に扱いづらく、エディタも助けにならず、すべてのデータを
indent 4で正しくそろえなければならない。HelmがKubernetesの終焉をもたらすだろうという予測もある。文字列補間を使って機械可読なコードを生成するのは望ましくないという個人的な哲学を持っている。SQLインジェクションやクロスサイトスクリプティングのような問題は今後も起こり続けるだろう。HTMLを生成するためにテンプレートファイルを使うべきではないと主張している。
YAMLを選ぶ人たちは問題を認識していないようだという意見がある。人間中心のデータ表現とコンピュータ中心のデータ表現の間には直接的な衝突がある。YAMLとJSONは実際には互いに異なるデータ形式だ。
YAMLは好きだが、Helmチャート作業では毎日呪いたくなるという意見もある。Helmは嫌いでも、みんなが使っているので結局は使い続けるという立場を示している。
cuelangへの移行を検討しており、これはJsonnetよりもうまく設計されていると考えている。Kubernetesにはすでに状態調整機能があるため、あとは削除機能だけを追加すればよい。