https://github.com/kubernetes-sigs/kustomize/blob/master/docs/fields.md に記載されているkustomizeの仕様を読んでいたのですが、どうもおかしいな、、と思い調査しました。
kubectlに対応するkustomizeのバージョン
https://github.com/kubernetes-sigs/kustomize#kubectl-integration に記載がありました。
| kubectl version | kustomize version |
|---------|--------|
| v1.16.0 | v2.0.3 |
| v1.15.x | v2.0.3 |
| v1.14.x | v2.0.3 |
kubernetes v1.16.xを使っている場合はkustomizeはv2.0.3のようです。
kustomizeの最新版がv3.3.1とかなので結構古い・・
v1.17.xではどのバージョンなのか書かれていないが、ソースコードを見てみると
sigs.k8s.io/kustomize v2.0.3+incompatible
まだv2.0.3のようです。
kustomize v2.0.3の仕様
2つの方法がありました
kustoimze公式ドキュメントの古いバージョン
-
https://github.com/kubernetes-sigs/kustomize/tree/v2.0.3/docs から古いドキュメントを参照できます
- サンプルkustomization.yamlにコメントが丁寧に書いてあるので参考になりますhttps://github.com/kubernetes-sigs/kustomize/blob/v2.0.3/docs/kustomization.yaml
kubectlのドキュメント(こちらの方が読みやすい!)
- kubectlのドキュメントのkustomization.yamlのページ
これらに気づかず下記v3.3.1の仕様を読んでいて少しハマりました。
kustomize v3.3.1の仕様
先に調べてしまいましたが、この仕様はv1.17.0までのどのkubectlでも実行できません。
利用するにはkustomize v3.3.1をインストールする必要があります。
以降のドキュメントは https://github.com/kubernetes-sigs/kustomize/blob/master/docs/fields.md を読みながらのメモです。
Resources
- resources
- yamlファイルまたはkustomizaton.yamlを含むディレクトリ
-
bases
の方はv2.1.0から廃止
- CRDS
- CRDに含まれるリソース名なども適切に変換するような仕組みがあるらしい
Generators
- configMapGenerator
- ファイルからConfigMapを作る
- オブジェクトの名前に適切なハッシュを混ぜてくれる
- secretGenerator
- ファイルからSecretを作る
- オブジェクトの名前に適切なハッシュを混ぜてくれる
- genaratorOptions
- Generator周りの設定
- ラベル、アノテーション、ハッシュを名前につけるか
- Generator周りの設定
- generators
- pluginの設定
Transformers
- commonLabels
- 全てのリソースにつける共通のラベル
- commonAnnotations
- 全てのリソースにつける共通のアノテーション
- images
- コンテナイメージをさしかえる
- inventory
- kustomizeの実行結果を入れておくためのオブジェクトを指定する。
- 通常ConfigMapを使うようだ
- これを設定しておくとmanifestが変更された際に適切にpruneされるようになる予定
- 現状cli-experimentalでその実装が行われている
- last-applied-configrationと近い動きをしている
- namespace
- 全てのリソースにつけるNamespace
- namePrefix
- 全てのリソースにつけるPrefix
- nameSuffix
- 全てのリソースにつけるSuffix
- replicas
- 特定の名前のリソースのreplicaの上書き
- patches
- 特定のリソースに対するpatch
- patchesStrategicMerge
- 特定のリソースに対するpatch
- pathesJson6902
- 特定のリソースに対するpatch
- transformers
- pluginの設定
Meta
- vars
- マニフェストから参照できる変数を定義できる。定義は別のオブジェクトの特定のフィールドの参照という形で行う
- varは 変数名、オブジェクトへの参照、フィールドへの参照のタプルである
- varで参照できるのはstring型のみ。intやbool、arrayはできない
- 変数の参照は
'$(FOO)'
という形で行うが、これはkustomize内部で定義された特定のフィールドでのみ利用可能
- apiVersion
- kustomization.yamlのバージョン
- 今は
kustomize.config.k8s.io/v1beta1
- kind
-
Kustomization
で固定
-
まとめ
(kubernetes v1.17.x現在)kubectlから利用できるkustomizeは古いので気をつけましょう。