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

Recap: Customizing Kustomize with Client-Side Custom Resources

yugo kobayashi
October 27, 2021
150

Recap: Customizing Kustomize with Client-Side Custom Resources

yugo kobayashi

October 27, 2021
Tweet

Transcript

  1. Recap: Customizing Kustomize
    with Client-Side Custom Resources
    koba1t
    Kubernetes Meetup Tokyo #46

    View Slide

  2. 自己紹介
    name: 小林優吾
    github: koba1t
    twitter: 0x6b6f62
    所属: ヤフー株式会社
    2

    View Slide

  3. 引用元: https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%3ARegan.pdf 3

    View Slide

  4. Kustomize とは
    kubernetes のリソース設定をカスタマイズするためのcliツール
    yaml で設定でき
    特定の値にpatchを当てることや、configMapなどのリソースのgenerateができる
    https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/
    https://github.com/kubernetes-sigs/kustomize 4

    View Slide

  5. 5
    引用元: https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%3ARegan.pdf

    View Slide

  6. Custom Resource とは
    kubernetes で buildin ではない新しく定義したリソース
    6
    https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/

    View Slide

  7. Custom Resource とは
    kubernetes で buildin ではない新しく定義したリソース
    - cert-manager
    - knative
    - 各種Operator
    7
    https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/

    View Slide

  8. Custom Resource とは
    kubernetes で buildin ではない新しく定義したリソース
    - cert-manager
    - knative
    - 各種Operator
    8
    https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/
    https://kubernetes.io/ja/docs/concepts/extend-kubernetes/api-extension/custom-resources/

    View Slide

  9. Custom Resource とは
    kubernetes で buildin ではない新しく定義したリソース
    - cert-manager
    - knative
    - 各種Operator
    9
    https://github.com/prometheus-operator/kube-prometheus/blob/main/examples/example-app/prometheus-frontend.yaml

    View Slide

  10. kustomizeの拡張機能
    自作のリソースのジェネレータやトランスフォーマーをkustomizeで適用できる
    - generator
    > 任意のリソースを生成する(configMapGeneratorなど)
    - transformer
    > 各リソースに共通の値を入れる(共通のNamespaceやlabelの設定など)
    10
    https://kubectl.docs.kubernetes.io/guides/extending_kustomize/

    View Slide

  11. kustomizeの拡張機能
    自作のリソースのジェネレータやトランスフォーマーをkustomizeで適用できる
    - generator
    > 任意のリソースを生成する(configMapGeneratorなど)
    - transformer
    > 各リソースに共通の値を入れる(共通のNamespaceやlabelの設定など)
    kustomizeが内部的に使用しているリソース処理のレイヤー
    11
    https://kubectl.docs.kubernetes.io/guides/extending_kustomize/

    View Slide

  12. 12
    引用元: https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%3ARegan.pdf

    View Slide

  13. kustomizeの拡張機能
    自作のリソースのジェネレータやトランスフォーマーをkustomizeで適用できる
    - generator
    > 任意のリソースを生成する(configMapGeneratorなど)
    - transformer
    > 各リソースに共通の値を入れる(共通のNamespaceやlabelの設定など)
    kustomizeが内部的に使用しているリソース処理のレイヤー
    これらの機能を持つコードを書くことで、任意の処理を kustomize で適用できる
    13
    https://kubectl.docs.kubernetes.io/guides/extending_kustomize/

    View Slide

  14. Example
    14
    https://kubectl.docs.kubernetes.io/guides/extending_kustomize/

    View Slide

  15. 15
    引用元: https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%3ARegan.pdf

    View Slide

  16. 16
    引用元: https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%3ARegan.pdf

    View Slide

  17. 17
    引用元: https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%3ARegan.pdf

    View Slide

  18. [Demo]
    https://github.com/koba1t/krm-fn-app
    18

    View Slide

  19. kustomizeの拡張機能で処理を行うメリット
    - クラスタへの変更無しに使うことができる
    - 例えばNamespaceごとにapplication developerに払い出している場合などに便利
    - WebhookConfiguration や CRD などの cluster-wide なリソースを使わなくて良い
    - 利用者側が主導の運用の効率化ができる
    19

    View Slide

  20. kustomizeの拡張機能で処理を行うメリット
    - 開発が簡単
    - k8sクラスタ無しでpluginの適用が実行できる
    - pluginのversionをマニフェスト適用の段階で決められる
    - `kustomize build` で適用できるので既存のCI/CDフローに入れやすい
    - containerだと docker pull で imageを取って来てくれるので、 yamlを変更するだけで使える
    - yaml定義で完結する
    20

    View Slide

  21. kustomizeの拡張機能で処理を行うデメリット
    - クラスタの状態を見て動作を変える(Operatorのような)ことができない
    - Admission Webhook のように強制的に適用させることができない
    - (Container functions の場合は) CI/CD 環境で docker が実行できる必要がある
    21

    View Slide

  22. 参考
    - https://kubectl.docs.kubernetes.io/guides/extending_kustomize/containerized_krm_functions/
    - kustomizeの拡張 (Containerized KRM Functions) のドキュメント
    - (私が見た時は) transformers の内容が微妙に間違っていたので
    https://github.com/kubernetes-sigs/kustomize/blob/kustomize/v4.4.0/hack/krmFunctionBenchm
    ark/example_tshirt/containerfn/transf.yaml も参考に
    - https://pkg.go.dev/sigs.k8s.io/kustomize/[email protected]/fn/framework
    - https://static.sched.com/hosted_files/kccncna2021/da/Customizing%20Kustomize%20-%20Verey%
    3ARegan.pdf
    - kubeconの発表資料
    - https://github.com/koba1t/krm-fn-app
    - demoのrepo
    22

    View Slide