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

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

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

y_taka_23

August 31, 2020
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. Namespace が分割の基本単位
    ● Role / RoleBinding
    ○ 操作できるリソースを制限
    ● ResourceQuota / LimitRange
    ○ 巨大・大量 Pod のリソース消費を制限
    ● NetworkPolicy
    ○ Namespace 間の通信を制限

    View Slide

  4. Namespace 自体は
    Namespaced なリソースではない

    View Slide

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

    View Slide

  6. Hierarchical Namespace
    Controller

    View Slide

  7. DEMO:階層構造の作成

    View Slide

  8. 階層構造の作成

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. DEMO:リソースの伝播

    View Slide

  16. リソースの伝播

    View Slide

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

    View Slide

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

    View Slide

  19. リソースの伝播

    View Slide

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

    View Slide

  21. DEMO:整合性の担保

    View Slide

  22. Admission Webhook による整合性

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. まとめ
    ● Namespace によるクラスタの分割
    ○ フラットな構造なので階層型管理とは相性悪い
    ● Hierarchical Namespace Controller (HNC)
    ○ 階層を定義し、親から子へリソースを伝播させる
    ○ 伝播するリソースは設定で変更できる
    ● 実体は SubnamespaceAnchor
    ○ kubectl のプラグインを通して操作できる

    View Slide

  33. Enjoy the (In)Flexible Hierarchy!
    Presented by チェシャ猫 (@y_taka_23)

    View Slide