Slide 1

Slide 1 text

Kustomize v5 を含む最新機能と テクニックの紹介 koba1t Kubernetes Meetup Tokyo #56 1

Slide 2

Slide 2 text

自己紹介 name: 小林優吾 github: koba1t twitter: 0x6b6f62 Reviewer of kubernetes-sigs/kustomize 所属: ヤフー株式会社 (Engineer for CaaS, OSSデベロッパー) 2

Slide 3

Slide 3 text

kustomizeとは k8sに適用するyamlファイルをカスタマイズするcliツール - kubectlにサブコマンドとして入っている - `kubectl kustomize` や `kubectl apply -k` で実行できる - configMapの生成やk8sのyamlにpatchをすることができる 3

Slide 4

Slide 4 text

kustomizeとは k8sに適用するyamlファイルをカスタマイズするcliツール - kubectlにサブコマンドとして入っている - `kubectl kustomize` や `kubectl apply -k` で実行できる - configMapの生成やk8sのyamlにpatchをすることができる 4

Slide 5

Slide 5 text

kustomizeとは k8sに適用するyamlファイルをカスタマイズするcliツール - kubectlにサブコマンドとして入っている - `kubectl kustomize` や `kubectl apply -k` で実行できる - configMapの生成やk8sのyamlにpatchをすることができる 5

Slide 6

Slide 6 text

kustomizeとは k8sに適用するyamlファイルをカスタマイズするcliツール - kubectlにサブコマンドとして入っている - `kubectl kustomize` や `kubectl apply -k` で実行できる - configMapの生成やk8sのyamlにpatchをすることができる 6

Slide 7

Slide 7 text

Kustomize v5 7

Slide 8

Slide 8 text

8 https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.0.0

Slide 9

Slide 9 text

kustomize localize サブコマンド 9 - urlをダウンロードして、参照をローカルのpathに置き換える https://kubectl.docs.kubernetes.io/references/kustomize/cmd/localize/

Slide 10

Slide 10 text

kustomize localize サブコマンド 10 - urlをダウンロードして、参照をローカルのpathに置き換える https://kubectl.docs.kubernetes.io/references/kustomize/cmd/localize/

Slide 11

Slide 11 text

kustomize localize サブコマンド 11 - urlをダウンロードして、参照をローカルのpathに置き換える https://kubectl.docs.kubernetes.io/references/kustomize/cmd/localize/

Slide 12

Slide 12 text

sortOptions 12 - kustomize build で出力されるリソースの順番を変更できる https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/sortoptions/

Slide 13

Slide 13 text

sortOptions 13 - kustomize build で出力されるリソースの順番を変更できる - order: fifo - `resources` で読まれた順番に出力する - order: legacy - `orderFirst` : 最初に出力すべきリソース - `orderLast` : 最後に出力すべきリソース - この二種類の指定方法が可能 https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/sortoptions/

Slide 14

Slide 14 text

sortOptions 14 - kustomize build で出力されるリソースの順番を変更できる - order: fifo - `resources` で読まれた順番に出力する - order: legacy - `orderFirst` : 最初に出力すべきリソース - `orderLast` : 最後に出力すべきリソース - この二種類の指定方法が可能 https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/sortoptions/

Slide 15

Slide 15 text

replacementのwildcardサポート 15 - 値を置き換える機能にwildcardがサポートされた https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/replacements/

Slide 16

Slide 16 text

replacementのwildcardサポート 16 - 値を置き換える機能にwildcardがサポートされた

Slide 17

Slide 17 text

その他 17 - 内部で使ってるopenapiの形式変更やリファクタによって kustomize build が高速 化(#4568, #4791, #4944, #4809) - kustomize version の出力結果が短くなった(#5000) - - kubectl version が出力形式を変更する計画があるので、それに合わせた形 - `helmCharts` でより多くの引数をサポート(#4926 #4808) - krm exec functionで実行可能ファイルを検索するworking dirが、exec functionを 実行したkustomization.yamlが存在するディレクトリに変更 - どちらかというとバグ修正の範囲かも https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.0.0

Slide 18

Slide 18 text

非推奨な機能 18 - 長い間非推奨だった古い `patch` syntax が削除(#4911) - kustomize v4のリリース時に`patchStrategicMerge` へリネームされた方 - これは完全削除 - 使われていなかったサブコマンド(`kustomize fn`, `kustomize cfg`)が削除(#4930) - いくつかのsyntaxが非推奨化(#4723, #4923:) - patchesStrategicMerge, patchesJson6902, vars, imageTags など - こっちは Warning メッセージが出力されるだけでまだ使える。 - `kustomize edit fix` を実行すると(vars 以外は) 自動的に修正してくれます

Slide 19

Slide 19 text

非推奨な機能 19 - 長い間非推奨だった古い `patch` syntax が削除(#4911) - kustomize v4のリリース時に`patchStrategicMerge` へリネームされた方 - これは完全削除 - 使われていなかったサブコマンド(`kustomize fn`, `kustomize cfg`)が削除(#4930) - いくつかのsyntaxが非推奨化(#4723, #4923:) - patchesStrategicMerge, patchesJson6902, vars, imageTags など - こっちは Warning メッセージが出力されるだけでまだ使える。 - `kustomize edit fix` を実行すると(vars 以外は) 自動的に修正してくれます

Slide 20

Slide 20 text

非推奨な機能 20 - 長い間非推奨だった古い `patch` syntax が削除(#4911) - kustomize v4のリリース時に`patchStrategicMerge` へリネームされた方 - これは完全削除 - 使われていなかったサブコマンド(`kustomize fn`, `kustomize cfg`)が削除(#4930) - いくつかのsyntaxが非推奨化(#4723, #4923:) - patchesStrategicMerge, patchesJson6902, vars, imageTags など - こっちは Warning メッセージが出力されるだけでまだ使える。 - `kustomize edit fix` を実行すると(vars 以外は) 自動的に修正してくれます

Slide 21

Slide 21 text

Mastering YAML Engineering with Kustomize 21

Slide 22

Slide 22 text

Demo: https://github.com/koba1t/kustomize-demo 22

Slide 23

Slide 23 text

何にkustomizeを使っているか 23 - CaaS(KaaS) Platformに管理用 component をデプロイするため - 1200 over のk8sクラスタに共通コンポーネントをデプロイする際の設定の差分管理に使用 - 規模の詳細は `[SRE NEXT 2022]KaaS桶狭間の戦い 〜Yahoo! JAPANのSLI/SLOを用いた統合監視〜 ` を https://speakerdeck.com/srenext/slowoyong-itatong-he-jian-shi

Slide 24

Slide 24 text

何にkustomizeを使っているか 24 - base <- 環境別base <- クラスタ別config - の構成になっている - 環境(dev,prodの用途, DCの位置など)の組み合わせ が多い - 単純にクラスタ数が多い

Slide 25

Slide 25 text

何にkustomizeを使っているか 25 - base <- 環境別base <- クラスタ別config - の構成になっている - 環境(dev,prodの用途, DCの位置など)の組み合わせ が多い - 単純にクラスタ数が多い

Slide 26

Slide 26 text

merge configMap - base と overlay で設定した値をmergeして configMap を作成 26

Slide 27

Slide 27 text

merge configMap - base と overlay で設定した値をmergeして configMap を作成 27

Slide 28

Slide 28 text

merge configMap - base と overlay で設定した値をmergeして configMap を作成 28 https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/configmapgenerator/

Slide 29

Slide 29 text

edit inline domain - 文字列の中の一部だけを変えたい -> replacements の delimiter で可能 - ingressのサブドメインだけ変えたいとか 29

Slide 30

Slide 30 text

edit inline domain - 文字列の中の一部だけを変えたい -> replacements の delimiter で可能 - ingressのサブドメインだけ変えたいとか 30

Slide 31

Slide 31 text

edit inline domain - 文字列の中の一部だけを変えたい -> replacements の delimiter で可能 - ingressのサブドメインだけ変えたいとか 31

Slide 32

Slide 32 text

(tips) kustomize build のした結果に表示しない - `config.kubernetes.io/local-config: "true"` という annotation を付けたリソースは `kustomize build` の output に表示されない 32 https://github.com/kubernetes-sigs/kustomize/blob/dd520f8889a52ddd592bb4773fe512b9 90fea698/cmd/config/docs/api-conventions/manifest-annotations.md

Slide 33

Slide 33 text

fill data from cluster info - `components` を利用するとより自在に操作できる - configuration logic を再利用可能にする物 - 複数箇所へyamlを操作するロジックを適用できる - これを利用すると string を変えるだけで様々な場所を変更できる 33 https://kubectl.docs.kubernetes.io/guides/config_management/components/

Slide 34

Slide 34 text

fill data from cluster info - `components` を利用するとより自在に操作できる - configuration logic を再利用可能にする物 - 複数箇所へyamlを操作するロジックを適用できる - これを利用すると string を変えるだけで様々な場所を変更できる 34 https://kubectl.docs.kubernetes.io/guides/config_management/components/

Slide 35

Slide 35 text

fill data from cluster info - `components` を利用するとより自在に操作できる 35 クラスタの情報を持たせたconfigMapを各クラスタに読ませる

Slide 36

Slide 36 text

fill data from cluster info - `components` を利用するとより自在に操作できる 36 components にドメインの一部を置き換える処理を replacements で記載する

Slide 37

Slide 37 text

fill data from cluster info - `components` を利用するとより自在に操作できる 37 各クラスタの kustomization.yamlから components と configMap を参照する (kustomization.yaml の内容は同じ物になる)

Slide 38

Slide 38 text

fill data from cluster info - `components` を利用するとより自在に操作できる 38 kustomize build すると各クラスタの情報が共通のreplacements で埋め込まれる

Slide 39

Slide 39 text

fill data from cluster info - `components` を利用するとより自在に操作できる 39 kustomize build すると各クラスタの情報が共通のreplacements で埋め込まれる

Slide 40

Slide 40 text

kustomize を使いこなして senior yaml engineer になろう!!! 40 https://speakerdeck.com/koba1t/kustomizefalseamarizhi-rareteinaiga-bian-li-naji-neng-kust omize-edit-create-falseshao-jie

Slide 41

Slide 41 text

参考 - demo: https://github.com/koba1t/kustomize-demo - https://github.com/kubernetes-sigs/kustomize - https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.0.0 - https://kubectl.docs.kubernetes.io/references/kustomize/cmd/localize/ - https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/sortoptions/ - https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/replacements/ - - SRENEXT2022 の講演: https://speakerdeck.com/srenext/slowoyong-itatong-he-jian-shi - https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/configmapgenerator/ - local-config : https://github.com/kubernetes-sigs/kustomize/blob/dd520f8889a52ddd592bb4773fe512b990fea698/cmd/config/docs/api-conve ntions/manifest-annotations.md - https://kubectl.docs.kubernetes.io/guides/config_management/components/ - https://speakerdeck.com/koba1t/kustomizefalseamarizhi-rareteinaiga-bian-li-naji-neng-kustomize-edit-create-falseshao-jie 41