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

Verda Kubernetes ServiceClusterAPI導入へのチャレンジ / Verda Kubrenetes Service: The Challenge of Introducing ClusterAPI

Verda Kubernetes ServiceClusterAPI導入へのチャレンジ / Verda Kubrenetes Service: The Challenge of Introducing ClusterAPI

LINEでは、プライベートクラウドVerdaのサービスの1つとしてVKSというKubernetes as a Serviceを開発、運用しています。 現在、これまでのRancherベースの実装からClusterAPIベースの実装へ移行を進めている段階です。 VKSの概要と、ClusterAPIへの移行における技術的背景や直面したチャレンジについて紹介します。
五反田 正太郎 / LINE株式会社

※この資料は以下イベントで発表した内容です
https://cyberagent.connpass.com/event/272843/

LINE Developers

March 02, 2023
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. 7FSEB-*/&ͷ1SJWBUF$MPVEͷ঺հ  • )ZQFSWJTPS  • 7.  • ,VCFSOFUFT

    • $MVTUFS  • /PEF   • .VMUJ3FHJPO .VMUJ"; • ౦ژ "; ɺ େࡕɺγϯΨϙʔϧɺ EFW
  2. 7FSEB ,VCFSOFUFT 4FSWJDF 7,4 ͷػೳྫ • Ϋϥελߏங • WLTDUM DSFBUFDMVTUFSNZDMVTUFS

    • ϊʔυૢ࡞ • WLTDUM DSFBUFOPEFQPPM BWBJMBCJMJUZ[POFB[OQB[ • WLTDUM TDBMFOPEFQPPM OQB[ XPSLFST • ΞυΦϯ˞؅ཧ • WLTDUM BEEPOLVCFSOFUFTEBTICPBSEFOBCMF • WLTDUM BEEPOLVCFSOFUFTEBTICPBSEVSM  ※ クラスタ上で動き、クラスタの機能を拡張・改善するアプリケーション及びk8sリソース
  3. ,VCFSOFUFTΫϥελΛ࡞Δʹ͸ʁ • Ϧιʔεͷ४උ • 7. -#౳ • ֤छίϯϙʔωϯτͷΠϯετʔϧ • LVCFBQJTFSWFS

    FUDE LVCFMFU౳ • ূ໌ॻɺೝূ৘ใ౳ͷ؅ཧ • FUD  https://kubernetes.io/docs/concepts/overview/components/
  4. 7,4ʹ͓͚ΔΫϥελߏஙɾ؅ཧ ߏஙɺ؅ཧ User Cluster VKS GW API VKS GW Proxy

    ૢ࡞ LVCFDUM౳ WLTDUM PSXFC6* ϦΫΤετͷ ิ׬ɺม׵ɺWBMJEBUJPO౳ 認証等 
  5. 7,4(8"1* 1SPYZ ͷ֓ཁ • Go⾔語実装 • Rancherの抽象化 • 開発者の学習コスト・認知コストの削減 •

    リスクや運⽤コストの削減 • 例:デフォルトの構成情報の管理 • “vksctl create cluster クラスタ名” でクラスタが作れる • Verda固有の仕組みの実現 • クラスタのプロジェクトや作成者、操作情報等の記録 • 割り当て数の管理 • Keystone(Openstack・Verdaの認証機構)ベースの認証・認可 • アドオンの管理機構の提供 
  6. 7,4ʹ͓͚ΔΞυΦϯ Ϋϥελػೳͷ࣮૷ɾ֦ுͷͨΊʹΞυΦϯ͕ඞཁ • 1FSTJTUFOU7PMVNF 7PMVNF؅ཧ • 7FSEB $$. -PBECBMBODFS 4FSWJDF؅ཧ

    • &YQPSUFST LVCFTUBUFNFUSJDT EPDLFSFYQPSUFS౳ • $MVTUFS.POJUPSJOH 1SPNFUIFVT౳ʹΑΔ؂ࢹػߏ • ౳ 
  7. 7,4ʹ͓͚ΔΞυΦϯ؅ཧ User Cluster 7,4"EEPO4UBSUFS • 3BODIFS͔ΒఆظతʹΫϥελ৘ใΛऔಘ • Ϋϥελຖ"EEPO$POUSPMMFSΛσϓϩΠ • ֤छ৘ใͷड͚౉͠౳΋

    • ؀ڥ LVCFDPOGJH 7,4BEEPODPOUSPMMFS • ϚχϑΣετͷςϯϓϨʔτ KTPOOFU Λऔಘ • %PDLFS *NBHFͱͯࣾ͠಺ϨδετϦʹอଘ • ֤छ৘ใΛ΋ͱʹɺNBOJGFTUͷੜ੒ • ؀ڥ৘ใ Ϋϥελ৘ใ ΞυΦϯઃఆ৘ใ • ఆظతʹNBOJGFTUΛBQQMZ VKS addon starter VKS Addon Controller User Cluster VKS Addon Controller クラスタ情報 取得 デプロイ apply manifests テンプレート取得 
  8. 7,4ͷΞʔΩςΫνϟ֓ཁ ैདྷ VKS addon starter User Cluster VKS Addon Controller

    クラスタ情報 取得 デプロイ apply manifests VKS GW API VKS GW Proxy 操作 (vksctl or WebUI) 操作 (kubectl等) クラスタ、プロジェクト の管理情報を保存 リクエストのvalidation, 補完等 認証等 manifest 雛形取得 
  9. 3BODIFSͷ໰୊ɿίʔυϕʔεͷဃ཭ • 7,4Ͱ͸3BODIFSΛϑΥʔΫͯ͠ΧελϜ • 7,4W • ࠷৽W • 3BODIFS͸ෳ਺ͷϦϙδτϦͰߏ੒ •

    ͭͷมߋΛऔΓࠐΉͷʹɺෳ਺ϦϙδτϦͰ࡞ۀ͕ඞཁʹͳΔ৔߹΋ • ػೳ௥Ճ΍όάमਖ਼ͷऔΓࠐΈ͕ࠔ೉ʹ 
  10. 3BODIFSͷ໰୊ɿ஌ݟͷ૕ࣦwֶशίετ • νʔϜϝϯόʔͷೖΕସΘΓʹΑΔ஌ݟͷ૕ࣦ • ্ཱͪ͛࣌ͷϝϯόʔ͕શһస৬ • ϝϯόʔͷ໿൒਺͕ࡏ੶̍೥ະຬʢ೥݄࣌఺ʣ • 3BODIFSಠࣗͷϑϨʔϜϫʔΫʹΑΓֶशίετ͕ߴ͍ •

    OPSNBO΍XSBOHMFS TUFWFͱ͍ͬͨಠࣗϑϨʔϜϫʔΫʹґଘ • DPOUSPMMFSSVOUJNF΍LVCFCVJMEFS౳ͷ஌ݟ͕׆͔ͤͳ͍ • ֶश΁ͷϞνϕʔγϣϯ΋ੜΈग़ͮ͠Β͍ • ࠾༻౳ͷ؍఺͔Β΋͋·Γྑ͘ͳ͍ 
  11. $MVTUFS"1*ͷେ·͔ͳ࢓૊Έ ̐ͭͷϓϩόΠμʹ෼͚ͯΫϥελΛ؅ཧ • $PSF • $MVTUFS΍.BDIJOF౳جຊతͳϦιʔεͱ ͦͷίϯτϩʔϥ • *OGSBTUSVDUVSFϓϩόΠμ •

    7.΍-#ͷ४උ౳ɺ Ϧιʔε४උ΍ΧελϜ෦෼Λ୲౰ • #PPUTUSBQϓϩόΠμ • 7.Λ,Tͷ/PEFʹϓϩϏδϣϯ • ,VCFBENϕʔεͷ࣮૷౳͕ଘࡏ • $POUSPM1MBOFϓϩόΠμ • $POUSPM1MBOF FUDEؚΉ Λ୲౰ • ,VCFBENϕʔεͷ࣮૷͕ଘࡏ  https://cluster-api.sigs.k8s.io/user/concepts.html
  12. $MVTUFS"1*ʹΑΔਏΈͷղܾ • ಠࣗΧελϚΠζʹΑΔίʔυϕʔεͷဃ཭ • ಠࣗͷมߋΛ*OGSBTUSBDUVSFϓϩόΠμʹด͡ࠐΊΒΕΔ • 1BUDIͷিಥ౳ͷ՝୊ͷফࣦ • 3BODIFS΁ͷ஌ݟͷ૕ࣦɺಠࣗϑϨʔϜϫʔΫͷֶशίετ •

    LVCFCVJMEFS DPOUSPMMFSSVOUJNFͱ͍ͬͨҰൠతͳϥΠϒϥϦར༻ • ৽نϝϯόʔͷΩϟονΞοϓίετݮ • ଞνʔϜͱ΋஌ݟΛڞ༗ • Ϋϥελ਺૿େʹΑΔෆ҆ఆԽ • 3BODIFSϊʔυ୯ҐͰ௚઀؂ࢹ • $MVTUFS"1*ϢʔβʔͷLT"1*ܦ༝ͰϊʔυΛ؂ࢹ • ΑΓεέʔϥϒϧͰ͋Δ ͱظ଴͍ͯ͠Δ 
  13. 従来⼿法 Addon Starter • Rancherからクラスタ情報を取得 • Addon Controllerをクラスタ毎にデプロイ Addon Controller

    • テンプレートと個別設定からマニフェスト⽣成 • 定期的にクラスタにApply VKS addon starter VKS addon controller VKS addon controller クラスタ情報 取得 デプロイ マニフェスト apply  ΞυΦϯͷ$MVTUFS"1*ରԠ
  14. VKS addon starter VKS addon controller VKS addon starter VKS

    addon controller VKS GW API VKS addon controller VKS addon controller VKS addon controller VKS addon controller クラスタ情報 取得 クラスタ情報 取得 デプロイ デプロイ マニフェスト apply マニフェスト apply  ΞυΦϯͷ$MVTUFS"1*ରԠσϓϩΠฤ
  15. VKS addon controller マニフェスト⽣成 drivetType=rancher 共通テンプレート (jsonnet) Rancher クラスタ⽤ マニフェスト

    VKS addon controller マニフェスト⽣成 drivetType=capi ClusterAPI クラスタ⽤ マニフェスト  ΞυΦϯͷ$MVTUFS"1*ରԠϚχϑΣετฤ
  16. ࠓޙͷ՝୊ • $MVTUFS"1*.BOBHFNFOU$MVTUFSͷηϧϑϗετ • ݱঢ়͸3BODIFSϕʔεͷΫϥελͰ$"1*ͷίϯτϩʔϥΛಈ͔͍ͯ͠Δ • 3BODIFSϕʔεͷΫϥελͷ$MVTUFS"1*΁ͷҠߦ • औಘͨ͠FUDE εφοϓγϣοτ͔ΒͷΫϥελͷ෮چ

    • 1.ରԠ • ΑΓॊೈͳ$MVTUFS6QHSBEF1PMJDZͷରԠ • ݱঢ়͸/PEF1PPM୯ҐͰͷϊʔυͷ࠶࡞੒ʹΑΔ3PMMJOH6QEBUFͷΈରԠ • $MVTUFS"1*1SPWJEFS7FSEBͷεέʔϥϏϦςΟͷ޲্ • 0QFO4UBDL"1*ʹෛՙΛ͔͚ͯ͠·͏࣮૷ʹͳ͍ͬͯΔ • ʜ 
  17. ·ͱΊ • 7FSEB -*/&ͷ1SJWUF $MPVE Ͱ͸,VCFSOFUT BTB4FSWJDF 7,4 Λఏڙ •

    ैདྷͷ7,4͸3BODIFSͰ࣮ݱ • 3BODIFSʹؔ࿈͢Δ՝୊ͷ஝ੵ • $MVTUFS"1*ͷಋೖͱͦΕʹΑΔ՝୊ͷղܾ 
  18. • Rancherあるいはそのカスタムが提供していた以下機能をアドオン化 • CNI Plugin • metrics-server • Keystoneベースの認可の為のClusterRole等 •

    etcd backup • RancherとKubeadmでのControl Plane のnode roleラベルの差異対応 • Rancher: node-role.kubernetes.io/controlplane • Kubeadm: node-role.kubernetes.io/control-plane $MVTUFS"1*ରԠམͪึर͍