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

Accurateで始めるKubernetesのマルチテナント管理/accurate introduction

3499a1d71fa70b8ee44816ca9e7329fe?s=47 bells17
November 25, 2021

Accurateで始めるKubernetesのマルチテナント管理/accurate introduction

Kubernetes Meetup Tokyo #47で発表したLTの資料です。
https://k8sjp.connpass.com/event/229659/

配信URLはこちらです。
https://youtu.be/fvxp8bUOgtI

3499a1d71fa70b8ee44816ca9e7329fe?s=128

bells17

November 25, 2021
Tweet

Transcript

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

  2. ▶ @bells17 ▶ Software Engineer ▶ 普段やってること: + Kubernetes 関連コンポーネントの開発

    + Kubernetes as a Service開発の調査・研究 ▶ Kubernetes SIG-Docs Japanese localization reviewer ▶ Kubernetes Internal Organizer ▶ #kubenews ▶ @bells17_
  3. Accurateとは?

  4. Accurate ▶ ソフトマルチテナンシー向けのテナント管理を⾏うためのOperator + ソフトマルチテナンシー: 社内の複数開発チームが1つのk8sクラスターを共有するなど ▶ テナント管理のために以下のような機能が提供されている + Namespaceの階層型管理機能

    + ⼦孫Namespaceへのリソース伝播機能 + テンプレートNamespaceによるリソース伝播機能 ▶ 階層化されたNamespaceを扱うためのkubectlプラグインが⽤意されている ▶ サイボウズ社のnecoチームによって開発・運⽤
  5. インストール⽅法

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

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

  8. 使い⽅

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

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

  11. 伝播したいリソースを作成 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'
  12. ⼦Namespaceにリソースが伝播されている LVCFDUMHFUSPMFCJOEJOHOSPPU /".&30-&"(& BENJO$MVTUFS3PMFBENJOT LVCFDUMHFUSPMFCJOEJOHOSPPUTVC /".&30-&"(& BENJO$MVTUFS3PMFBENJOT

  13. 更に孫Namespaceを設定してみる LVCFDUMBDDVSBUFTVCDSFBUFSPPUTVCHSBOEDIJMESPPUTVC ઃఆঢ়گΛ֬ೝ LVCFDUMBDDVSBUFMJTU SPPU  SPPUTVC  SPPUTVCHSBOEDIJME Ϧιʔε΋఻೻͞Ε͍ͯΔ͜ͱΛ֬ೝ

    LVCFDUMHFUSPMFCJOEJOHOSPPUTVCHSBOEDIJME /".&30-&"(& BENJO$MVTUFS3PMFBENJOT
  14. テンプレート機能

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

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

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

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

    ▶ テンプレート機能を利⽤することで、root namespace作成時に⾃動で様々なリソースを⾃ 動的に作成することで⼿動によるリソース作成などの管理の⼿間を削減する
  19. HNCとの⽐較 "DDVSBUF )/$ ֊૚/BNFTQBDFͷૢ࡞ LVCFDUMϓϥάΠϯΛར༻ LVCFDUMϓϥάΠϯΛར༻ ࢠଙ/BNFTQBDFͷ࡞੒ʹ /BNFTQBDFͷ࡞੒ݖݶ͕ඞཁ͔ʁ ෆཁ ෆཁ

    ʁະݕূ ఻೻͢ΔϦιʔεͷઃఆ ΦϓτΠϯํࣜ ɾ఻೻͍ͨ͠ϦιʔεछผΛ DPOpHͰઃఆ ɾࢦఆ͍ͨ͠ϦιʔεຖʹΞϊ ςʔγϣϯͰࢦఆ ΦϓτΞ΢τํࣜ ɾ఻೻͍ͨ͠ϦιʔεछผΛ $3Ͱઃఆ ɾσϑΥϧτͰࢦఆछผͷ Ϧιʔε͸શͯ఻೻͞ΕΔ ɾ఻೻ͨ͘͠ແ͍Ϧιʔε͸ ΞϊςʔγϣϯͰࢦఆ ࢠଙϦιʔε֎΁ͷ Ϧιʔε఻೻ػೳ ςϯϓϨʔτػೳʹΑΔ ఻೻͕Մೳ ແ͠ ϥϕϧɾΞϊςʔγϣϯͷ఻೻ $POpHͰࢦఆͨ͠ΩʔͷΈ఻೻ ແ͠ ͩͬͨ͸ͣ
  20. まとめ ▶ Accurateを使うとマルチテナントのNamespaceの階層的な管理機能や、リソース伝播機能 を提供してくれる ▶ ソフトマルチテナンシーのNamespace・リソース管理を⾏いたい場合にはかなり便利そう ▶ テンプレート機能が不要だったり、リソース伝播がオプトアウト⽅式の⽅が良い場合には HNC、そうでなければAccurateを利⽤するのが良さそうな気がする

  21. 参考資料 ▶ 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#
  22. Thanks / Question? ▶ @bells17 ▶ Slide: https://speakerdeck.com/bells17 ▶ @bells17_