Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[k8sjp #56] Kustomize v5 を含む最新機能とテクニックの紹介

[k8sjp #56] Kustomize v5 を含む最新機能とテクニックの紹介

yugo kobayashi

March 16, 2023
Tweet

More Decks by yugo kobayashi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. Kustomize v5
    7

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. その他
    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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. Mastering YAML Engineering with Kustomize
    21

    View Slide

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

    View Slide

  23. 何に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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. (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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  41. 参考
    - 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

    View Slide