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

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

組織の壁と戦うための 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. Hierarchical Namespace
    Controller

    View full-size slide

  7. DEMO:階層構造の作成

    View full-size slide

  8. 階層構造の作成

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. DEMO:リソースの伝播

    View full-size slide

  16. リソースの伝播

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. リソースの伝播

    View full-size slide

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

    View full-size slide

  21. DEMO:整合性の担保

    View full-size slide

  22. Admission Webhook による整合性

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide