Slide 1

Slide 1 text

Accurateで始める Kubernetesのマルチテナント管理 Kubernetes Meetup Tokyo(2021/11/25) @bells17

Slide 2

Slide 2 text

▶ @bells17 ▶ Software Engineer ▶ 普段やってること: + Kubernetes 関連コンポーネントの開発 + Kubernetes as a Service開発の調査・研究 ▶ Kubernetes SIG-Docs Japanese localization reviewer ▶ Kubernetes Internal Organizer ▶ #kubenews ▶ @bells17_

Slide 3

Slide 3 text

Accurateとは?

Slide 4

Slide 4 text

Accurate ▶ ソフトマルチテナンシー向けのテナント管理を⾏うためのOperator + ソフトマルチテナンシー: 社内の複数開発チームが1つのk8sクラスターを共有するなど ▶ テナント管理のために以下のような機能が提供されている + Namespaceの階層型管理機能 + ⼦孫Namespaceへのリソース伝播機能 + テンプレートNamespaceによるリソース伝播機能 ▶ 階層化されたNamespaceを扱うためのkubectlプラグインが⽤意されている ▶ サイボウズ社のnecoチームによって開発・運⽤

Slide 5

Slide 5 text

インストール⽅法

Slide 6

Slide 6 text

インストール⽅法 BDDVSBUFͷIFMNϦϙδτϦΛ௥Ճ IFMNSFQPBEEBDDVSBUFIUUQTDZCP[VHPHJUIVCJPBDDVSBUF IFMNSFQPVQEBUF DFSUNBOBHFSΛΠϯετʔϧ DVSMGT-IUUQTHJUIVCDPNKFUTUBDLDFSUNBOBHFSSFMFBTFTMBUFTUEPXOMPBEDFSU NBOBHFSZBNMcLVCFDUMBQQMZG BDDVSBUFΛΠϯετʔϧ IFMNJOTUBMMDSFBUFOBNFTQBDFOBNFTQBDFBDDVSBUFBDDVSBUFBDDVSBUFBDDVSBUF

Slide 7

Slide 7 text

インストール⽅法(kubectlプラグイン) LSFXΛ࢖ͬͯϓϥάΠϯΛΠϯετʔϧ LVCFDUMLSFXVQEBUF LVCFDUMLSFXJOTUBMMBDDVSBUF ϓϥάΠϯ͕Πϯετʔϧ͞Ε͔ͨ֬ೝ LVCFDUMBDDVSBUFI BDDVSBUFJTBTVCDPNNBOEPGLVCFDUMUPNBOBHF"DDVSBUFGFBUVSFT 6TBHF BDDVSBUF ʜ

Slide 8

Slide 8 text

使い⽅

Slide 9

Slide 9 text

Root Namespaceを設定 LVCFDUMDSFBUFOTSPPU LVCFDUMBDDVSBUFOTTFUUZQFSPPUSPPU ઃఆঢ়گΛ֬ೝ LVCFDUMBDDVSBUFMJTU SPPU

Slide 10

Slide 10 text

⼦となるNamespaceを設定 LVCFDUMBDDVSBUFTVCDSFBUFSPPUTVCSPPU ઃఆঢ়گΛ֬ೝ LVCFDUMBDDVSBUFMJTU SPPU SPPUTVC

Slide 11

Slide 11 text

伝播したいリソースを作成 DBU&0'cLVCFDUMBQQMZG BQJ7FSTJPOSCBDBVUIPSJ[BUJPOLTJPW LJOE3PMF#JOEJOH NFUBEBUB OBNFTQBDFSPPU఻೻ݩͰ͋ΔSPPUOBNFTQBDFʹϦιʔεΛ࡞੒ OBNFBENJO BOOPUBUJPOT BDDVSBUFDZCP[VDPNQSPQBHBUFVQEBUF఻೻Λߦ͏ͨΊͷΞϊςʔγϣϯΛઃఆ SPMF3FG BQJ(SPVQSCBDBVUIPSJ[BUJPOLTJP LJOE$MVTUFS3PMF OBNFBENJO TVCKFDUT LJOE(SPVQ OBNFGPP BQJ(SPVQSCBDBVUIPSJ[BUJPOLTJP &0'

Slide 12

Slide 12 text

⼦Namespaceにリソースが伝播されている LVCFDUMHFUSPMFCJOEJOHOSPPU /".&30-&"(& BENJO$MVTUFS3PMFBENJOT LVCFDUMHFUSPMFCJOEJOHOSPPUTVC /".&30-&"(& BENJO$MVTUFS3PMFBENJOT

Slide 13

Slide 13 text

更に孫Namespaceを設定してみる LVCFDUMBDDVSBUFTVCDSFBUFSPPUTVCHSBOEDIJMESPPUTVC ઃఆঢ়گΛ֬ೝ LVCFDUMBDDVSBUFMJTU SPPU SPPUTVC SPPUTVCHSBOEDIJME Ϧιʔε΋఻೻͞Ε͍ͯΔ͜ͱΛ֬ೝ LVCFDUMHFUSPMFCJOEJOHOSPPUTVCHSBOEDIJME /".&30-&"(& BENJO$MVTUFS3PMFBENJOT

Slide 14

Slide 14 text

テンプレート機能

Slide 15

Slide 15 text

テンプレートNamespaceを設定 LVCFDUMDSFBUFOTUFNQMBUF LVCFDUMBDDVSBUFOTTFUUZQFUFNQMBUFUFNQMBUF SPPU/BNFTQBDFͰUFNQMBUFΛςϯϓϨʔτͱͯ͠ར༻͢ΔΑ͏ઃఆ LVCFDUMBDDVSBUFUFNQMBUFTFUSPPUUFNQMBUF

Slide 16

Slide 16 text

伝播したいリソースを作成 DBU&0'cLVCFDUMBQQMZG BQJ7FSTJPOW LJOE4FDSFU NFUBEBUB OBNFTFDSFU OBNFTQBDFUFNQMBUF BOOPUBUJPOT BDDVSBUFDZCP[VDPNQSPQBHBUFVQEBUF UZQF0QBRVF TUSJOH%BUB GPPCBS &0'

Slide 17

Slide 17 text

テンプレートを使⽤したNamespaceとその⼦孫Namespaceに リソースが伝播していることが確認できる LVCFDUMHFUTFDSFUOSPPUTFDSFU /".&5:1&%"5""(& TFDSFU0QBRVFT LVCFDUMHFUTFDSFUOSPPUTVCTFDSFU /".&5:1&%"5""(& TFDSFU0QBRVFT LVCFDUMHFUTFDSFUOSPPUTVCHSBOEDIJMETFDSFU /".&5:1&%"5""(& TFDSFU0QBRVFT

Slide 18

Slide 18 text

利⽤例 ▶ kubectl accurate sub createコマンドを利⽤することで、Namespaceの作成権限を 持たないテナントユーザーに名前空間の作成/削除を⾏うことを可能にする ▶ ⼦孫Namespaceにプライベートレジストリの認証情報やImagePullSecretなどの設定を 継承することでテナントで管理しているNamespaceの管理を簡単にする ▶ テンプレート機能を利⽤することで、root namespace作成時に⾃動で様々なリソースを⾃ 動的に作成することで⼿動によるリソース作成などの管理の⼿間を削減する

Slide 19

Slide 19 text

HNCとの⽐較 "DDVSBUF )/$ ֊૚/BNFTQBDFͷૢ࡞ LVCFDUMϓϥάΠϯΛར༻ LVCFDUMϓϥάΠϯΛར༻ ࢠଙ/BNFTQBDFͷ࡞੒ʹ /BNFTQBDFͷ࡞੒ݖݶ͕ඞཁ͔ʁ ෆཁ ෆཁ ʁະݕূ ఻೻͢ΔϦιʔεͷઃఆ ΦϓτΠϯํࣜ ɾ఻೻͍ͨ͠ϦιʔεछผΛ DPOpHͰઃఆ ɾࢦఆ͍ͨ͠ϦιʔεຖʹΞϊ ςʔγϣϯͰࢦఆ ΦϓτΞ΢τํࣜ ɾ఻೻͍ͨ͠ϦιʔεछผΛ $3Ͱઃఆ ɾσϑΥϧτͰࢦఆछผͷ Ϧιʔε͸શͯ఻೻͞ΕΔ ɾ఻೻ͨ͘͠ແ͍Ϧιʔε͸ ΞϊςʔγϣϯͰࢦఆ ࢠଙϦιʔε֎΁ͷ Ϧιʔε఻೻ػೳ ςϯϓϨʔτػೳʹΑΔ ఻೻͕Մೳ ແ͠ ϥϕϧɾΞϊςʔγϣϯͷ఻೻ $POpHͰࢦఆͨ͠ΩʔͷΈ఻೻ ແ͠ ͩͬͨ͸ͣ

Slide 20

Slide 20 text

まとめ ▶ Accurateを使うとマルチテナントのNamespaceの階層的な管理機能や、リソース伝播機能 を提供してくれる ▶ ソフトマルチテナンシーのNamespace・リソース管理を⾏いたい場合にはかなり便利そう ▶ テンプレート機能が不要だったり、リソース伝播がオプトアウト⽅式の⽅が良い場合には HNC、そうでなければAccurateを利⽤するのが良さそうな気がする

Slide 21

Slide 21 text

参考資料 ▶ Accurate documentation: https://cybozu-go.github.io/accurate/ ▶ cybozu-go/accurate: https://github.com/cybozu-go/accurate ▶ Kubernetesのマルチテナントの現状を整理する: https://techstep.hatenablog.com/entry/2020/09/06/160435 ▶ Hierarchical Namespace で Namespace を階層構造に管理してオブジェクトを伝搬させる: https://amsy810.hateblo.jp/entry/2019/ 12/01/230822 ▶ HNC User Guide: https://github.com/kubernetes-sigs/hierarchical-namespaces/tree/v0.9/docs/user-guide ▶ KEP-1687: Hierarchical Namespaces As A Subproject: https://github.com/kubernetes/enhancements/blob/master/keps/sig- auth/1687-hierarchical-namespaces-subproject/README.md ▶ [PUBLIC] The Hierarchical Namespace Controller - Design: https://docs.google.com/document/d/ 10MZfFfbQMm33CBboMq2bfrEtXkJQQT4-UH4DDXZRrKY/edit#

Slide 22

Slide 22 text

Thanks / Question? ▶ @bells17 ▶ Slide: https://speakerdeck.com/bells17 ▶ @bells17_