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

CRDで遊んでみる

 CRDで遊んでみる

An introduction to kubernetes custom resource definitions and controllers with some toy problems (in Japanese)

Presented in Cloud Native Days Tokyo 2021.

IWAMOTO Toshihiro

November 24, 2021
Tweet

More Decks by IWAMOTO Toshihiro

Other Decks in Technology

Transcript

  1. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    1 CRD で遊んでみる VA Linux Systems Japan ( 株 ) 岩本俊弘
  2. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    2 • 背景 • CRD • Controller • Operator-sdk を使った CRD controller の作りかた • デモ ( 試作例 ) • まとめ 発表内容
  3. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    3 VA Linux のこれまでの取り組み VA Linux は、 Linux カーネルの開発に始まり、仮想化技術、 IaaS 基盤関連、ネットワーク、ストレージ、コンテナ技術 へとサービスの幅を広げてきました。 IaaS / Cloud / 車載向け OS Container/ AI Linux Kernel Hypervisor SDN / NFV / Storage 2000 ~ 2005 ~ 2010 ~ 2017 ~
  4. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    4 コンテナ関連のサービス パフォーマンス測定などの設計支援 技術調査、ソースコード解析調査 機能開発、強化、チューニング 運用ツールの開発 障害解析 性能解析、ボトルネック分析 実機検証、性能評価支援 導入支援 受託開発 サポート コミュニティへの機能提案 バグレポート、修正 コミュニティ活動支援 コミュニティ 対応 VA Linux は KCSP に 認定されています。
  5. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    5 技術ブログもやっています https://valinux.hatenablog.com/ ぜひ見に来てください!
  6. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    6 背景 • K8s の標準リソースをサポートしない API server がある – https://github.com/thetirefire/badidea – https://github.com/kcp-dev/kcp – 注 :↑ これらは今回は使いません • Pod 等のリソースを使わずに何が作れるか ? • k8s の API は本当にすばらしいのか ?
  7. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    7 CRD について • kind: CustomResourceDefinition • 各種オペレータでおなじみ • 定義した API resource が使えるようになる • OpenAPI で schema を書く
  8. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    8 Operator kube-apiserver foobar-operator Reconcile () { … } watch Get, list, create, update, ...
  9. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    9 Operator-sdk, kubebuilder • API 定義と Reconcile() を書けば後はやっ てくれるような仕掛け • yaml も自動生成 • kubebuilder のドキュメントがやたら充実 している
  10. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    11 デモ : 解説 • Cart • PriceList • 複数リソース間の連携がいまいち – たぶん想定された使いかたではない • Transaction の扱いがうまくない – .spec.checkout に代入 • 電卓でできる計算なのでいまいち • 在庫を確保とか出荷とかあまり上手く 書ける気がしない
  11. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    12 K8s API は spec にあわせて調整するとい うものであった ↓ 最適化問題ならどうか
  12. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    13 グラフ理論 • G=(V, E) • V: 頂点、 E: 辺 • 有向グラフと無向グラフがある • 辺には重み (weight) がある • 辺ごとに k8s リソースを定義 • graphviz で絵がかける
  13. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    14 最大フロー問題 • 有向グラフ上のフローを最大化 • Ford–Fulkerson アルゴリズム • インクリメンタルに解ける • 最小カットも同時に解ける
  14. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    15 最大カット問題 • 頂点を 2 つの集合に分ける • NP-hard • 0.878 近似アルゴリズムあり (Goemans and Williamson, 1995) • 今日は 0.5 近似
  15. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    17 まとめ • CRD と Operator(Controller) を試した • kubernetes の用意している仕掛けが活用で きる • プロトタイプ作成には向いてそう • K8s API は declarative なので適用対象は選 ぶ • 最適化問題 ( リソース最適化 ) と何かの制御を組みあわせる のはありかも
  16. Copyright VA Linux Systems Japan. All rights reserved. ⓒ      

    18 参考資料 • https://sdk.operatorframework.io/docs/ • https://book.kubebuilder.io/ • Max Flow, Min Cut, Kevin Wayne, 2004, https://www.cs.princeton.edu/courses/archive/spr04/cos226/lectures/maxflow .4up.pdf • Improved approximation algorithms for maximum cut and satisfiability problems using semidefinite programming, Michel X. Goemans, David P. Williamson, 1995, https://doi.org/10.1145/227683.227684 • Kubernetes カ ス タ ム コ ン ト ロ ー ラ の 開 発 例 , 森 克 彦 ,2020, https://valinux.hatenablog.com/entry/20201008 • https://github.com/toshiiw/cndt-cart-op • https://github.com/toshiiw/cndt-graph-op