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
PRO

March 02, 2023
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. -*/&גࣜձࣾ *5αʔϏεηϯλʔ 7FSEB 1MBUGPSNࣨ
    7,4νʔϜ ιϑτ΢ΣΞΤϯδχΞ ޒ൓ాਖ਼ଠ࿠
    $"JOGSB d,VCFSOFUFTBTB4FSWJDFd
    7FSEB ,VCFSOFUFT4FSWJDF
    $MVTUFS"1*ಋೖ΁ͷνϟϨϯδ

    View Slide

  2. ޒ൓ా ਖ਼ଠ࿠
    -*/&גࣜձࣾ *5αʔϏεηϯλʔ
    7FSEB1MBUGPSNࣨ 7,4νʔϜॴଐ
    ೥౓৽ଔೖࣾ
    ࣗݾ঺հ
    @sgotand (twitter/github)

    View Slide

  3. 7FSEB-*/&ͷ1SJWBUF$MPVE ͷ঺հ
    ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    7,4 7FSEB ,VCFSOFUFT4FSWJDF
    ͱ3BODIFS
    3BODIFS͸ਏ͍Α
    $MVTUFS"1*ͱ͸ʁ
    $MVTUFS"1*Ҡߦ΁ͷऔΓ૊Έ
    ·ͱΊ







    $POUFOUT

    View Slide

  4. 7FSEB-*/&ͷ1SJWBUF$MPVEͷ঺հ

    • )ZQFSWJTPS
    • 7.
    • ,VCFSOFUFT
    • $MVTUFS
    • /PEF
    • .VMUJ3FHJPO .VMUJ";
    • ౦ژ ";
    ɺ େࡕɺγϯΨϙʔϧɺ EFW

    View Slide

  5. 7FSEB-*/&ͷ1SJWBUF$MPVEͷ঺հ

    View Slide

  6. ,VCFSOFUFTBTB4FSWJDFͱ͸ʁ
    Kubernetesクラスタをいい感じに構築&管理して
    ユーザーに提供してくれるサービス
    Azure Kubernetes Service

    Amazon EKS

    View Slide

  7. 7FSEB ,VCFSOFUFT 4FSWJDF 7,4
    ͷػೳྫ
    • Ϋϥελߏங
    • WLTDUM DSFBUFDMVTUFSNZDMVTUFS
    • ϊʔυૢ࡞
    • WLTDUM DSFBUFOPEFQPPM BWBJMBCJMJUZ[POFB[OQB[
    • WLTDUM TDBMFOPEFQPPM OQB[ XPSLFST
    • ΞυΦϯ˞؅ཧ
    • WLTDUM BEEPOLVCFSOFUFTEBTICPBSEFOBCMF
    • WLTDUM BEEPOLVCFSOFUFTEBTICPBSEVSM

    ※ クラスタ上で動き、クラスタの機能を拡張・改善するアプリケーション及びk8sリソース

    View Slide

  8. ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ

    View Slide

  9. ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    • ,VCFSOFUFTΫϥελͷߏஙɺ؅ཧ

    View Slide

  10. ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    • ,VCFSOFUFTΫϥελͷߏஙɺ؅ཧ
    • ΞυΦϯ˞ͷ։ൃɺӡ༻
    ※ クラスタ上で動き、クラスタの機能を拡張・改善するアプリケーション及びk8sリソース

    View Slide

  11. ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    • ,VCFSOFUFTΫϥελͷߏஙɺ؅ཧ
    • ΞυΦϯͷ։ൃɺӡ༻
    • ϞχλϦϯάɺো֐ରԠ

    View Slide

  12. ,VCFSOFUFTΫϥελΛ࡞Δʹ͸ʁ
    • Ϧιʔεͷ४උ
    • 7. -#౳
    • ֤छίϯϙʔωϯτͷΠϯετʔϧ
    • LVCFBQJTFSWFS FUDE LVCFMFU౳
    • ূ໌ॻɺೝূ৘ใ౳ͷ؅ཧ
    • FUD

    https://kubernetes.io/docs/concepts/overview/components/

    View Slide

  13. ,VCFSOFUFTΫϥελΛ࡞Δʹ͸ʁ

    View Slide

  14. • 3BODIFS-BCT͕։ൃ͢Δ044
    • 0QFOTUBDL "1*Λར༻ͯ͠7.؅ཧ͕Մೳ
    • 7FSEBͷ"1*׆༻Ͱ͖Δ
    • %PDLFSΛ׆༻ͨ͠OPEFˍίϯτϩʔϧϓϨʔϯͷ؅ཧ
    • Ϋϥελ؂ࢹͷ࢓૊Έ΋ఏڙ

    7,4ʹ͓͚ΔΫϥελߏஙɾ؅ཧ
    https://www.rancher.com

    View Slide

  15. 7,4ʹ͓͚ΔΫϥελߏஙɾ؅ཧ
    ϦΫΤετ
    ૢ࡞
    LVCFDUM౳

    User Cluster
    ߏஙɺ؅ཧ

    View Slide

  16. 7,4ʹ͓͚ΔΫϥελߏஙɾ؅ཧ
    ߏஙɺ؅ཧ
    User Cluster
    VKS GW
    API
    VKS GW
    Proxy
    ૢ࡞
    LVCFDUM౳

    WLTDUM PSXFC6*
    ϦΫΤετͷ
    ิ׬ɺม׵ɺWBMJEBUJPO౳
    認証等

    View Slide

  17. 7,4(8"1* 1SPYZ
    ͷ֓ཁ
    • Go⾔語実装
    • Rancherの抽象化
    • 開発者の学習コスト・認知コストの削減
    • リスクや運⽤コストの削減
    • 例:デフォルトの構成情報の管理
    • “vksctl create cluster クラスタ名” でクラスタが作れる
    • Verda固有の仕組みの実現
    • クラスタのプロジェクトや作成者、操作情報等の記録
    • 割り当て数の管理
    • Keystone(Openstack・Verdaの認証機構)ベースの認証・認可
    • アドオンの管理機構の提供

    View Slide

  18. ࣭໰,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    • ,VCFSOFUFTΫϥελͷߏஙɺ؅ཧɺߋ৽ٴͼͦͷࣗಈԽ
    3BODIFSΛந৅Խ͠7,4ಠࣗͷ"1*Λ։ൃɾఏڙ
    • ΞυΦϯͷ։ൃɺӡ༻
    • ϞχλϦϯάɺো֐ରԠ

    View Slide

  19. 7,4ʹ͓͚ΔΞυΦϯ
    Ϋϥελػೳͷ࣮૷ɾ֦ுͷͨΊʹΞυΦϯ͕ඞཁ
    • 1FSTJTUFOU7PMVNF 7PMVNF؅ཧ
    • 7FSEB $$. -PBECBMBODFS 4FSWJDF؅ཧ
    • &YQPSUFST LVCFTUBUFNFUSJDT EPDLFSFYQPSUFS౳
    • $MVTUFS.POJUPSJOH 1SPNFUIFVT౳ʹΑΔ؂ࢹػߏ
    • ౳

    View Slide

  20. 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
    テンプレート取得

    View Slide

  21. ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    • ,VCFSOFUFTΫϥελͷߏஙɺ؅ཧ
    3BODIFSΛந৅Խ͠7,4ಠࣗͷ"1*Λ։ൃɾఏڙ
    • ΞυΦϯͷ։ൃɺӡ༻
    "EEPO4UBSUFS"EEPO$POUSPMMFSʹΑΓఆظతʹ"QQMZ
    • ϞχλϦϯάɺো֐ରԠ
    1SPNFUIFT "MFSUNBOBHFS (SBGBOBϕʔεͰ؂ࢹ

    View Slide

  22. 7,4ͷΞʔΩςΫνϟ֓ཁ ैདྷ

    VKS addon
    starter
    User Cluster
    VKS Addon
    Controller
    クラスタ情報
    取得
    デプロイ
    apply
    manifests
    VKS GW
    API
    VKS GW
    Proxy
    操作
    (vksctl or WebUI)
    操作
    (kubectl等)
    クラスタ、プロジェクト
    の管理情報を保存
    リクエストのvalidation,
    補完等
    認証等
    manifest
    雛形取得

    View Slide

  23. 7FSEB-*/&ͷ1SJWBUF$MPVE ͷ঺հ
    ,VCFSOFUFTBTB4FSWJDFΛ࡞Δʹ͸ʁ
    7,4 7FSEB ,VCFSOFUFT4FSWJDF
    ͱ3BODIFS
    3BODIFS͸ਏ͍Α
    $MVTUFS"1*ͱ͸ʁ
    $MVTUFS"1*Ҡߦ΁ͷऔΓ૊Έ
    ·ͱΊ







    $POUFOUT

    View Slide

  24. 3BODIFSͷਏΈ
    3BODIFSΛϕʔεͱ࣮ͨ͠૷ʹ͞·͟·ͳ՝୊͕஝ੵ
    • ಠࣗΧελϚΠζʹΑΔίʔυϕʔεͷဃ཭
    • 3BODIFS΁ͷ஌ݟͷ૕ࣦɺಠࣗϑϨʔϜϫʔΫͷֶशίετ
    • ن໛૿େʹΑΔෆ҆ఆԽ

    View Slide

  25. 3BODIFSͷ໰୊ɿίʔυϕʔεͷဃ཭
    • 7,4Ͱ͸3BODIFSΛϑΥʔΫͯ͠ΧελϜ
    • 7,4W
    • ࠷৽W
    • 3BODIFS͸ෳ਺ͷϦϙδτϦͰߏ੒
    • ͭͷมߋΛऔΓࠐΉͷʹɺෳ਺ϦϙδτϦͰ࡞ۀ͕ඞཁʹͳΔ৔߹΋
    • ػೳ௥Ճ΍όάमਖ਼ͷऔΓࠐΈ͕ࠔ೉ʹ

    View Slide

  26. 3BODIFSͷ໰୊ɿ஌ݟͷ૕ࣦwֶशίετ
    • νʔϜϝϯόʔͷೖΕସΘΓʹΑΔ஌ݟͷ૕ࣦ
    • ্ཱͪ͛࣌ͷϝϯόʔ͕શһస৬
    • ϝϯόʔͷ໿൒਺͕ࡏ੶̍೥ະຬʢ೥݄࣌఺ʣ
    • 3BODIFSಠࣗͷϑϨʔϜϫʔΫʹΑΓֶशίετ͕ߴ͍
    • OPSNBO΍XSBOHMFS TUFWFͱ͍ͬͨಠࣗϑϨʔϜϫʔΫʹґଘ
    • DPOUSPMMFSSVOUJNF΍LVCFCVJMEFS౳ͷ஌ݟ͕׆͔ͤͳ͍
    • ֶश΁ͷϞνϕʔγϣϯ΋ੜΈग़ͮ͠Β͍
    • ࠾༻౳ͷ؍఺͔Β΋͋·Γྑ͘ͳ͍

    View Slide

  27. 3BODIFSͷ໰୊ɿن໛૿େʹΑΔෆ҆ఆԽ
    Ϋϥελ਺ͷ૿େɺϢʔεέʔεͷଟ༷Խ
    • Ϋϥελ਺ ૯ϊʔυ਺
    Þ֬཰తʹൃੜ͢Δ໰୊ͷස౓͕૿Ճ
    ÞΦϖϨʔγϣϯίετ૿Ճ
    3BODIFS͸6TFS$MVTUFSͷϊʔυຖʹ8FC4PDLFUͷηογϣϯΛுͬͯ؅ཧ
    ÞϦιʔε࢖༻ྔ૿େ
    Þ౓ʑ8FC4PDLFUηογϣϯपΓͷ໰୊͕ൃੜ

    View Slide

  28. 3BODIFSͷਏΈ
    3BODIFSΛϕʔεͱ࣮ͨ͠૷ʹ͞·͟·ͳ՝୊͕஝ੵ
    • ಠࣗΧελϚΠζʹΑΔίʔυϕʔεͷဃ཭
    • 3BODIFS΁ͷ஌ݟͷ૕ࣦɺಠࣗϑϨʔϜϫʔΫͷֶशίετ
    • ن໛૿େʹΑΔෆ҆ఆԽ
    Þ$MVTUFS"1* ಋೖ

    View Slide

  29. $MVTUFS"1*ͱ͸ʁ
    • $MVTUFSͷߏஙɺ؅ཧɺߋ৽Λ,VCFSOFUFT্Ͱ࣮ݱ͢Δπʔϧ
    • $MVTUFS΍.BDIJOFͱ͍ͬͨ$3%Ͱ؅ཧ
    • 3BODIFSͷ࢓૊Έͱ͍ۙ
    • ,TίϛϡχςΟ͕։ൃΛओಋ
    • TJHDMVTUFSMJGFDZDMF
    • ۙ೥։ൃ͕׆ൃ
    • Ϛϧνϕϯμʔαϙʔτ
    • "84΍0QFO4UBDL޲͚ͷ֦ு࣮૷͕ଘࡏ

    View Slide

  30. $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

    View Slide

  31. $MVTUFS"1*ʹΑΔਏΈͷղܾ
    • ಠࣗΧελϚΠζʹΑΔίʔυϕʔεͷဃ཭
    • ಠࣗͷมߋΛ*OGSBTUSBDUVSFϓϩόΠμʹด͡ࠐΊΒΕΔ
    • 1BUDIͷিಥ౳ͷ՝୊ͷফࣦ
    • 3BODIFS΁ͷ஌ݟͷ૕ࣦɺಠࣗϑϨʔϜϫʔΫͷֶशίετ
    • LVCFCVJMEFS DPOUSPMMFSSVOUJNFͱ͍ͬͨҰൠతͳϥΠϒϥϦར༻
    • ৽نϝϯόʔͷΩϟονΞοϓίετݮ
    • ଞνʔϜͱ΋஌ݟΛڞ༗
    • Ϋϥελ਺૿େʹΑΔෆ҆ఆԽ
    • 3BODIFSϊʔυ୯ҐͰ௚઀؂ࢹ
    • $MVTUFS"1*ϢʔβʔͷLT"1*ܦ༝ͰϊʔυΛ؂ࢹ
    • ΑΓεέʔϥϒϧͰ͋Δ ͱظ଴͍ͯ͠Δ


    View Slide

  32. $MVTUFS"1*Ҡߦ΁ͷϚΠϧετʔϯ
    طଘͷ7,4ͷ্Ͱ$MVTUFS"1*ϕʔεͷΫϥελΛఏڙ
    3BODIFSϕʔεͷΫϥελΛ$MVTUFS"1*ϕʔεͷΫϥελʹҠߦ
    શΫϥελ$MVTUFS"1*Խ3BODIFSͷ׬શͳഉআ
    ˞ ࠓ೔ͷൃදͰ͸TUεςοϓ͚ͩ
    طଘͷΫϥελͷҠߦͷ࿩͸͠·ͤΜ

    View Slide

  33. *OGSBTUSVDUVSFϓϩόΠμͷ࣮૷
    $MVTUFS"1*1SPWJEFS0QFOTUBDLͱ͍͏࣮૷͕ଘࡏ
    Þ ͨͩ͠ɺ0QFOTUBDLͷόʔδϣϯ΍7FSEBͷ-#ͷ"1*͕߹Θͳ͍ͨΊɺ௚઀͸࢖͑ͳ͍
    Þ $MVTUFS"1*1PSWJEFS 7FSEB $"17
    ͷ։ൃ
    ࣮૷ʹ͸0QFSBUPS4%,Λ࢖༻
    7,4ͷΧελϜػೳ΋Ұ෦ͪ͜Βʹ࣮૷
    • 4UBUJD*1/PEFQPPM ػೳ
    • /PEF΁ͷಠࣗϥϕϧ෇༩ʢ3BDLɺ"WBJMBCJMJUZ;POF౳ʣ
    • ౳

    View Slide

  34. 従来⼿法
    Addon Starter
    • Rancherからクラスタ情報を取得
    • Addon Controllerをクラスタ毎にデプロイ
    Addon Controller
    • テンプレートと個別設定からマニフェスト⽣成
    • 定期的にクラスタにApply
    VKS addon
    starter
    VKS addon
    controller
    VKS addon
    controller
    クラスタ情報
    取得
    デプロイ
    マニフェスト
    apply

    ΞυΦϯͷ$MVTUFS"1*ରԠ

    View Slide

  35. 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*ରԠσϓϩΠฤ

    View Slide

  36. VKS addon
    controller
    マニフェスト⽣成
    drivetType=rancher
    共通テンプレート
    (jsonnet)
    Rancher クラスタ⽤
    マニフェスト
    VKS addon
    controller
    マニフェスト⽣成
    drivetType=capi
    ClusterAPI クラスタ⽤
    マニフェスト

    ΞυΦϯͷ$MVTUFS"1*ରԠϚχϑΣετฤ

    View Slide

  37. ࠓޙͷ՝୊
    • $MVTUFS"1*.BOBHFNFOU$MVTUFSͷηϧϑϗετ
    • ݱঢ়͸3BODIFSϕʔεͷΫϥελͰ$"1*ͷίϯτϩʔϥΛಈ͔͍ͯ͠Δ
    • 3BODIFSϕʔεͷΫϥελͷ$MVTUFS"1*΁ͷҠߦ
    • औಘͨ͠FUDE εφοϓγϣοτ͔ΒͷΫϥελͷ෮چ
    • 1.ରԠ
    • ΑΓॊೈͳ$MVTUFS6QHSBEF1PMJDZͷରԠ
    • ݱঢ়͸/PEF1PPM୯ҐͰͷϊʔυͷ࠶࡞੒ʹΑΔ3PMMJOH6QEBUFͷΈରԠ
    • $MVTUFS"1*1SPWJEFS7FSEBͷεέʔϥϏϦςΟͷ޲্
    • 0QFO4UBDL"1*ʹෛՙΛ͔͚ͯ͠·͏࣮૷ʹͳ͍ͬͯΔ
    • ʜ

    View Slide

  38. ·ͱΊ
    • 7FSEB -*/&ͷ1SJWUF $MPVE
    Ͱ͸,VCFSOFUT BTB4FSWJDF 7,4
    Λఏڙ
    • ैདྷͷ7,4͸3BODIFSͰ࣮ݱ
    • 3BODIFSʹؔ࿈͢Δ՝୊ͷ஝ੵ
    • $MVTUFS"1*ͷಋೖͱͦΕʹΑΔ՝୊ͷղܾ

    View Slide

  39. 5)"/,:06

    View Slide

  40. • 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*ରԠམͪึर͍

    View Slide