組織の壁と戦うための Hierarchical Namespace #InfraStudy / Infra Study Meetup 5th

332f89cc697355902a817506b6995f2b?s=47 y_taka_23
August 31, 2020

組織の壁と戦うための Hierarchical Namespace #InfraStudy / Infra Study Meetup 5th

Infra Study Meetup #5 で使用したスライドです。

複数のチームでひとつの Kubernetes クラスタを共有したい場合、Namespace に紐づいた Role や Policy を使用することでチームごとに環境の管理が容易になります。しかし通常の Namespace はフラットな構造しか表現できないため、ある程度複雑な組織では Namespace を用いた各チームへの管理の移譲がうまくいかないケースがあります。

この問題を解決するために、階層構造を持つ Namespace を仮想的に扱うためのツール Hierarchical Namespace Controller (HNC) の開発が進められています。本セッションでは、デモを交えて HNC の仕組みについて紹介しました。

イベント概要:https://forkwell.connpass.com/event/183909/
録画:https://youtu.be/P04oTmX2S3E?t=5290

332f89cc697355902a817506b6995f2b?s=128

y_taka_23

August 31, 2020
Tweet

Transcript

  1. 組織の壁と戦うための Hierarchical Namespace チェシャ猫 (@y_taka_23) Infra Study Meetup #5 (31st

    Aug. 2020)
  2. \Kubernetes クラスタをチーム間で共有/

  3. Namespace が分割の基本単位 • Role / RoleBinding ◦ 操作できるリソースを制限 • ResourceQuota

    / LimitRange ◦ 巨大・大量 Pod のリソース消費を制限 • NetworkPolicy ◦ Namespace 間の通信を制限
  4. Namespace 自体は Namespaced なリソースではない

  5. 階層的な組織の憂鬱 • Namespace はフラットな構造 • 階層を表現するのが難しい ◦ 親レベルで定義されるべき設定のコピーが必要 ◦ 子

    Namespace を作成するのに強い権限が必要
  6. Hierarchical Namespace Controller

  7. DEMO:階層構造の作成

  8. 階層構造の作成

  9. 階層構造の作成 kubectl プラグインを介して 親子関係を作成

  10. 階層構造の作成 kubectl プラグインを介して木構造を確認

  11. 階層構造の作成(直接)

  12. 階層構造の作成(直接) SubnamespaceAnchor カスタムリソース

  13. 階層構造の作成(直接) SubnamespaceAnchor 自身は myapp-dev に 属する = 権限が myapp-dev 内で完結する

  14. 階層構造の作成(直接) 子 Namespace が自動で作成される + 親から子へのリンク

  15. DEMO:リソースの伝播

  16. リソースの伝播

  17. リソースの伝播 親に対して作成した Role が 自動的に子にも伝搬

  18. リソースの伝播 伝播元を削除すると全て消滅

  19. リソースの伝播

  20. リソースの伝播 伝播元となった Namespace を Label で管理

  21. DEMO:整合性の担保

  22. Admission Webhook による整合性

  23. Admission Webhook による整合性 伝播された側のリソースは直接消せない

  24. Admission Webhook による整合性 子 Namespace は直接消せない

  25. Admission Webhook による整合性 代わりに SubnamespaceAnchor (subns) を削除

  26. DEMO:伝播するリソースの指定

  27. 伝播するリソースの指定

  28. 伝播するリソースの指定 伝播に関する設定は HncConfiguration リソースが保持

  29. 伝播するリソースの指定 デフォルトでは Role / RoleBinding のみ伝播対象

  30. 伝播するリソースの指定

  31. 伝播するリソースの指定 kubectl プラグイン経由で伝播対象を追加可能

  32. まとめ • Namespace によるクラスタの分割 ◦ フラットな構造なので階層型管理とは相性悪い • Hierarchical Namespace Controller

    (HNC) ◦ 階層を定義し、親から子へリソースを伝播させる ◦ 伝播するリソースは設定で変更できる • 実体は SubnamespaceAnchor ◦ kubectl のプラグインを通して操作できる
  33. Enjoy the (In)Flexible Hierarchy! Presented by チェシャ猫 (@y_taka_23)