Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Hierarchical Namespace Controller

Slide 7

Slide 7 text

DEMO:階層構造の作成

Slide 8

Slide 8 text

階層構造の作成

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

階層構造の作成(直接)

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

DEMO:リソースの伝播

Slide 16

Slide 16 text

リソースの伝播

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

リソースの伝播

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

DEMO:整合性の担保

Slide 22

Slide 22 text

Admission Webhook による整合性

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

伝播するリソースの指定

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

伝播するリソースの指定

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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