Kubernetes Meetup Tokyo #47で発表したLTの資料です。 https://k8sjp.connpass.com/event/229659/
配信URLはこちらです。 https://youtu.be/fvxp8bUOgtI
Accurateで始めるKubernetesのマルチテナント管理Kubernetes Meetup Tokyo(2021/11/25)@bells17
View Slide
▶ @bells17▶ Software Engineer▶ 普段やってること:+ Kubernetes 関連コンポーネントの開発+ Kubernetes as a Service開発の調査・研究▶ Kubernetes SIG-Docs Japanese localization reviewer▶ Kubernetes Internal Organizer▶ #kubenews▶ @bells17_
Accurateとは?
Accurate▶ ソフトマルチテナンシー向けのテナント管理を⾏うためのOperator+ ソフトマルチテナンシー: 社内の複数開発チームが1つのk8sクラスターを共有するなど▶ テナント管理のために以下のような機能が提供されている+ Namespaceの階層型管理機能+ ⼦孫Namespaceへのリソース伝播機能+ テンプレートNamespaceによるリソース伝播機能▶ 階層化されたNamespaceを扱うためのkubectlプラグインが⽤意されている▶ サイボウズ社のnecoチームによって開発・運⽤
インストール⽅法
インストール⽅法BDDVSBUFͷIFMNϦϙδτϦΛՃIFMNSFQPBEEBDDVSBUFIUUQTDZCP[VHPHJUIVCJPBDDVSBUFIFMNSFQPVQEBUFDFSUNBOBHFSΛΠϯετʔϧDVSMGT-IUUQTHJUIVCDPNKFUTUBDLDFSUNBOBHFSSFMFBTFTMBUFTUEPXOMPBEDFSUNBOBHFSZBNMcLVCFDUMBQQMZGBDDVSBUFΛΠϯετʔϧIFMNJOTUBMMDSFBUFOBNFTQBDFOBNFTQBDFBDDVSBUFBDDVSBUFBDDVSBUFBDDVSBUF
インストール⽅法(kubectlプラグイン)LSFXΛͬͯϓϥάΠϯΛΠϯετʔϧLVCFDUMLSFXVQEBUFLVCFDUMLSFXJOTUBMMBDDVSBUFϓϥάΠϯ͕Πϯετʔϧ͞Ε͔ͨ֬ೝLVCFDUMBDDVSBUFIBDDVSBUFJTBTVCDPNNBOEPGLVCFDUMUPNBOBHF"DDVSBUFGFBUVSFT6TBHFBDDVSBUFʜ
使い⽅
Root Namespaceを設定LVCFDUMDSFBUFOTSPPULVCFDUMBDDVSBUFOTTFUUZQFSPPUSPPUઃఆঢ়گΛ֬ೝLVCFDUMBDDVSBUFMJTUSPPU
⼦となるNamespaceを設定LVCFDUMBDDVSBUFTVCDSFBUFSPPUTVCSPPUઃఆঢ়گΛ֬ೝLVCFDUMBDDVSBUFMJTUSPPU SPPUTVC
伝播したいリソースを作成DBU&0'cLVCFDUMBQQMZGBQJ7FSTJPOSCBDBVUIPSJ[BUJPOLTJPWLJOE3PMF#JOEJOHNFUBEBUBOBNFTQBDFSPPUݩͰ͋ΔSPPUOBNFTQBDFʹϦιʔεΛ࡞OBNFBENJOBOOPUBUJPOTBDDVSBUFDZCP[VDPNQSPQBHBUFVQEBUFΛߦ͏ͨΊͷΞϊςʔγϣϯΛઃఆSPMF3FGBQJ(SPVQSCBDBVUIPSJ[BUJPOLTJPLJOE$MVTUFS3PMFOBNFBENJOTVCKFDUTLJOE(SPVQOBNFGPPBQJ(SPVQSCBDBVUIPSJ[BUJPOLTJP&0'
⼦Namespaceにリソースが伝播されているLVCFDUMHFUSPMFCJOEJOHOSPPU/".&30-&"(&BENJO$MVTUFS3PMFBENJOTLVCFDUMHFUSPMFCJOEJOHOSPPUTVC/".&30-&"(&BENJO$MVTUFS3PMFBENJOT
更に孫Namespaceを設定してみるLVCFDUMBDDVSBUFTVCDSFBUFSPPUTVCHSBOEDIJMESPPUTVCઃఆঢ়گΛ֬ೝLVCFDUMBDDVSBUFMJTUSPPU SPPUTVC SPPUTVCHSBOEDIJMEϦιʔε͞Ε͍ͯΔ͜ͱΛ֬ೝLVCFDUMHFUSPMFCJOEJOHOSPPUTVCHSBOEDIJME/".&30-&"(&BENJO$MVTUFS3PMFBENJOT
テンプレート機能
テンプレートNamespaceを設定LVCFDUMDSFBUFOTUFNQMBUFLVCFDUMBDDVSBUFOTTFUUZQFUFNQMBUFUFNQMBUFSPPU/BNFTQBDFͰUFNQMBUFΛςϯϓϨʔτͱͯ͠ར༻͢ΔΑ͏ઃఆLVCFDUMBDDVSBUFUFNQMBUFTFUSPPUUFNQMBUF
伝播したいリソースを作成DBU&0'cLVCFDUMBQQMZGBQJ7FSTJPOWLJOE4FDSFUNFUBEBUBOBNFTFDSFUOBNFTQBDFUFNQMBUFBOOPUBUJPOTBDDVSBUFDZCP[VDPNQSPQBHBUFVQEBUFUZQF0QBRVFTUSJOH%BUBGPPCBS&0'
テンプレートを使⽤したNamespaceとその⼦孫Namespaceにリソースが伝播していることが確認できるLVCFDUMHFUTFDSFUOSPPUTFDSFU/".&5:1&%"5""(&TFDSFU0QBRVFTLVCFDUMHFUTFDSFUOSPPUTVCTFDSFU/".&5:1&%"5""(&TFDSFU0QBRVFTLVCFDUMHFUTFDSFUOSPPUTVCHSBOEDIJMETFDSFU/".&5:1&%"5""(&TFDSFU0QBRVFT
利⽤例▶ kubectl accurate sub createコマンドを利⽤することで、Namespaceの作成権限を持たないテナントユーザーに名前空間の作成/削除を⾏うことを可能にする▶ ⼦孫Namespaceにプライベートレジストリの認証情報やImagePullSecretなどの設定を継承することでテナントで管理しているNamespaceの管理を簡単にする▶ テンプレート機能を利⽤することで、root namespace作成時に⾃動で様々なリソースを⾃動的に作成することで⼿動によるリソース作成などの管理の⼿間を削減する
HNCとの⽐較"DDVSBUF )/$֊/BNFTQBDFͷૢ࡞ LVCFDUMϓϥάΠϯΛར༻ LVCFDUMϓϥάΠϯΛར༻ࢠଙ/BNFTQBDFͷ࡞ʹ/BNFTQBDFͷ࡞ݖݶ͕ඞཁ͔ʁෆཁ ෆཁ ʁະݕূ͢ΔϦιʔεͷઃఆΦϓτΠϯํࣜɾ͍ͨ͠ϦιʔεछผΛDPOpHͰઃఆɾࢦఆ͍ͨ͠ϦιʔεຖʹΞϊςʔγϣϯͰࢦఆΦϓτΞτํࣜɾ͍ͨ͠ϦιʔεछผΛ$3ͰઃఆɾσϑΥϧτͰࢦఆछผͷϦιʔεશͯ͞ΕΔɾͨ͘͠ແ͍ϦιʔεΞϊςʔγϣϯͰࢦఆࢠଙϦιʔε֎ͷϦιʔεػೳςϯϓϨʔτػೳʹΑΔ͕Մೳແ͠ϥϕϧɾΞϊςʔγϣϯͷ $POpHͰࢦఆͨ͠ΩʔͷΈ ແ͠ ͩͬͨͣ
まとめ▶ Accurateを使うとマルチテナントのNamespaceの階層的な管理機能や、リソース伝播機能を提供してくれる▶ ソフトマルチテナンシーのNamespace・リソース管理を⾏いたい場合にはかなり便利そう▶ テンプレート機能が不要だったり、リソース伝播がオプトアウト⽅式の⽅が良い場合にはHNC、そうでなければAccurateを利⽤するのが良さそうな気がする
参考資料▶ 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#
Thanks / Question?▶ @bells17▶ Slide: https://speakerdeck.com/bells17▶ @bells17_