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

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

bells17
November 25, 2021

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

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

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

bells17

November 25, 2021
Tweet

More Decks by bells17

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. Accurateとは?

    View Slide

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

    View Slide

  5. インストール⽅法

    View Slide

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

    View Slide

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

    View Slide

  8. 使い⽅

    View Slide

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

    View Slide

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

    View Slide

  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'

    View Slide

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

    View Slide

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

    View Slide

  14. テンプレート機能

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. HNCとの⽐較
    "DDVSBUF )/$
    ֊૚/BNFTQBDFͷૢ࡞ LVCFDUMϓϥάΠϯΛར༻ LVCFDUMϓϥάΠϯΛར༻
    ࢠଙ/BNFTQBDFͷ࡞੒ʹ
    /BNFTQBDFͷ࡞੒ݖݶ͕ඞཁ͔ʁ
    ෆཁ ෆཁ ʁະݕূ

    ఻೻͢ΔϦιʔεͷઃఆ
    ΦϓτΠϯํࣜ
    ɾ఻೻͍ͨ͠ϦιʔεछผΛ
    DPOpHͰઃఆ
    ɾࢦఆ͍ͨ͠ϦιʔεຖʹΞϊ
    ςʔγϣϯͰࢦఆ
    ΦϓτΞ΢τํࣜ
    ɾ఻೻͍ͨ͠ϦιʔεछผΛ
    $3Ͱઃఆ
    ɾσϑΥϧτͰࢦఆछผͷ
    Ϧιʔε͸શͯ఻೻͞ΕΔ
    ɾ఻೻ͨ͘͠ແ͍Ϧιʔε͸
    ΞϊςʔγϣϯͰࢦఆ
    ࢠଙϦιʔε֎΁ͷ
    Ϧιʔε఻೻ػೳ
    ςϯϓϨʔτػೳʹΑΔ
    ఻೻͕Մೳ
    ແ͠
    ϥϕϧɾΞϊςʔγϣϯͷ఻೻ $POpHͰࢦఆͨ͠ΩʔͷΈ఻೻ ແ͠ ͩͬͨ͸ͣ

    View Slide

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

    View Slide

  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#

    View Slide

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

    View Slide