超個体型データセンターOSを目指した リアクティブ性を持つコンテナ実行基盤技術
2018年度第4回インターネットと運用技術 (IOT通算第44回) 研究会
2019/03/06
さくらインターネット株式会社 さくらインターネット研究所 上級研究員
松本亮介 / まつもとりー / matsumotory
͘͞ΒΠϯλʔωοτגࣜձࣾ(C) Copyright 1996-2019 SAKURA Internet Inc͘͞ΒΠϯλʔωοτݚڀॴݸମܕσʔληϯλʔOSΛࢦͨ͠ϦΞΫςΟϒੑΛ࣋ͭίϯςφ࣮ߦج൫ٕज़2018/11/01 ্ڃݚڀһ দຊ ྄հ2018ୈ4ճΠϯλʔωοτͱӡ༻ٕज़ (IOT௨ࢉୈ44ճ) ݚڀձ
View Slide
21. എܠͱత2. ݸମܕσʔληϯλʔ3. ݸମܕσʔληϯλʔOSͱίϯςφ4. ·ͱΊ࣍
1.എܠͱత
4େنσʔληϯλʔͷूத• σʔληϯλʔͷେنԽͱूத• ίϯϐϡʔλϦιʔεͱίετͷޮԽ• Ϋϥυར༻͕͜͜Ͱਵͱଅਐ͞Ε͖ͯͨ• ٕज़എܠͷมԽʹͬͯOSSΫϥυαʔϏεٸʹมԽ• ιϑτΣΞϕϯμʔʹڧ͘ґଘ͠ͳ͍มԽʹڧ͍ઃܭ͕ٸ• αʔϏεͷػೳͷநԽͱૄ݁߹ͳઃܭ͕ීٴ• ΫϥυωΠςΟϒɾϚϧνΫϥυɾϚΠΫϩαʔϏεԽ
5σʔληϯλʔͷूத͔Βࢄ• ΫϥυΛલఏʹϞϊϦγοΫͳαʔϏεઃܭ͔ΒϚΠΫϩαʔϏεԽ• αʔϏεͷ֤ػೳΛখ͞ͳαʔϏεͱ࣮ͯ͠͠gRPCͰ࿈ܞ• ϚΠΫϩαʔϏε୯ҐͰͷଟ༷ͳνʔϜ։ൃӡ༻ͷޮԽ• εέʔϦϯάো࣌ͷӨڹͷہॴԽ• ϚΠΫϩαʔϏεؒͰͷଳҬෆϨΠςϯγʔͷݮ͕ٻΊΒΕΔ• େنσʔληϯλʔͷڑʢ౦ژͱੴङؒʣͰ͕ٞੜ࢝͡ΊΔ• αʔό͚ͩͰͳ͘ηϯαʔσόΠεͷߴԽɾଟԽʹΑΔଳҬෆ
6σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΉະདྷ• ֤ίϯϐϡʔςΟϯάػೳ͕ݸମͱͯ͠ػೳͭͭ͠૯ମͱͯ͠౷• ϥοΫϨϕϧͷίϯϐϡʔλ܈ɼEdge/FogίϯϐϡʔςΟϯάͳͲ• খɾதنσʔληϯλʔ͕ϋϒͱͳͬͯ݁Ռతʹશମ͕ଓɾߏ• ੜ׆ͷதͰਓʑ͕ίϯϐϡʔλͷΞγετΛৗʹड͚Δ࣌Λࢦ͢• ͍·͔ͩͭͯͳ͍ϚγϯύϫʔͱΠϯςϦδΣϯεͳػೳΛఏڙ• ࣾձʹ༹͚ࠐΉσʔληϯλʔػೳ͓ΑͼΫϥυͷϚγϯύϫʔ• ݸମܕσʔληϯλʔ͓ΑͼOSͱίϯηϓτΛఆΊΔ
7ຊൃද• ݸମܕσʔληϯλʔʹ͓͚ΔίϯηϓτͱϏδϣϯͷհ• ݸମܕσʔληϯλʔOSʹඞཁͳཁ݅ͱ• ݱ࣮తͳWebΞϓϦέʔγϣϯΛѻ͏ίϯςΩετͰ·ͣݕ౼• ίϯϐϡʔςΟϯάϦιʔε͕ࢄԽͨ͠ࡍͷίϯςφͷ͋Γํ• σʔληϯλʔOSΛʹ͓͚ΔϓϩηεεϨουͱͯ͠ͷίϯςφ• ίϯςφͷϦΞΫςΟϒੑͷॏཁੑΛٞ• ݱࡏͷ֤ۀքͷऔΓΈίϯςφϥϯλΠϜͷྨͯ͠ཧ
2.ݸମܕσʔληϯλʔ
9͘͞ΒΠϯλʔωοτݚڀॴͷϑΥʔΧεTTF TASTAA PAPR TTTRIV
10ݱࡏͷΫϥυ͚ͩͰ͕ղܾͰ͖ΔΘ͚Ͱͳ͍• ΑΓҰநԽͷਐΜͩΠϯλʔωοτͷ༷૬ͷมԽ• ΫϥυωΠςΟϒʹΑͬͯ͞ΒͳΔσʔληϯλʔͷڊେԽ• தԝूݖతͳίϯϐϡʔςΟϯάͰ͍͠έʔε• ϨΠςϯγ͕େ͖ͯ͘அ͕ؒʹ߹Θͳ͍ϦΞϧλΠϜ͕ཁٻ͞ΕΔέʔε• ͋Δ͍σʔλ͕େͰଳҬ͕ෆ͢Δέʔε• ࠓޙΫϥυͷϚγϯύϫʔΛͲͷΑ͏ʹ׆༻Ͱ͖ΔੈքΛࢦ͖͔͢ʁ• ͘͞ΒΠϯλʔωοτݚڀॴͷίϯηϓτͱϏδϣϯΛ࠶ఆٛ
11͘͞ΒΠϯλʔωοτݚڀॴͷϏδϣϯ
ݸମܕσʔληϯλʔ
13ݸମܕσʔληϯλʔͷཧ1. ݱࡏσʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺࠓޙϨΠςϯγʗηΩϡϦςΟʗίετͷཁ͔݅Βɺ͋ΒΏΔॴࣾձɺ৫ʹίϯϐϡʔςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ2. ͦΕΒࢄͨ͠ίϯϐϡʔςΟϯάϦιʔεɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔΛఏڙ͢Δʹཹ·ΒͣɺͦͷॴࣾձͷཁٻʹԠͯ͡ɺࣗతʹɺࢄ͋Δ͍༗ػతʹ݁߹͠ɺݱɾΫϥυͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏΛ࠾ΔΑ͏ʹػೳ͠·͢ɻ3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔͷɺਓʑͷۙʹଘࡏ͠ɺϦΞϧλΠϜ͔ͭΠϯςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ػతʹ݁߹͢Δ͜ͱʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ͱͰݱ࠷ద͔ͭશମ࠷దΛ࣮ݱ͢ΔSuper Organized WorldͰ͢ɻ
3.ݸମܕσʔληϯλʔOSͱίϯςφ
15দຊͷઐྖҬʹ͓͚Δݸମσʔληϯλʔ• ݸମܕσʔληϯλʔʹ͚ͨσʔληϯλʔOSͱίϯςφ• ࣮༻తͳWebAppɼWordPressͱ͔ɼΛ͏·͘ಈ͔͍ͨ͠ͱ͍͏είʔϓ• ComputeͱDataͷ͏ͪCompute-Intensiveʹ·ͣண• ࢄͨ͠σʔληϯλʔ্ʹಁաతʹࢄىಈ͢Δίϯςφ܈͕ඞཁ• ߴʹࢄͨ͠σʔληϯλʔ্ʹOSͷΑ͏ͳബ͍ϨΠϠʔ͕ඞཁ• ݸମܕσʔληϯλʔOS্ʹϓϩηεͱεϨου͕ଘࡏ
16ಁաੑͱίϯςφͷϦΞΫςΟϒੑ• σʔληϯλʔΛಁաత͔ͭ༗ػతʹίϯςφ͕ॲཧΛߦ͏ඞཁ͕͋Δ• ༷ʑͳίϯςφϥϯλΠϜΛϓϩηεεϨουͱݟཱͯΔ• ίϯςφ͕ϦΞΫςΟϒʹঢ়ଶΛม͑ΒΕΔΑ͏ʹ͢Δඞཁ͕͋Δ• ࣄલ༧ଌతͰͳ͘ԠతʹΞΫηεมԽͱϦιʔεׂΛҰகͤ͞Δ• ݸମతʹߴʹࢄͨ͠σʔληϯλʔΛލ͍ͩ༗ػతͳ࿈ܞ• ίϯςφؒͷ࿈ܞαʔόσʔληϯλʔؒΛߴҠಈ͢Δඞཁ͕͋Δ• ϓϩηεεϨουͷΑ͏ͳOSΛʹ͓͚ΔϦΞΫςΟϒੑ͕ٻΊΒΕ͍ͯ͘
17দຊͷݚڀʹ͓͚ΔݸମܕOSͷείʔϓ1. ݸମܕσʔληϯλʔOSͷϓϩηεεϨουͱͯ͠ͷίϯςφΛఆٛ2. ϓϩηεεϨουͱͯ͠ͷίϯςφΛϦΞΫςΟϒʹૢ࡞Մೳ3. ݸମܕσʔληϯλʔOSͷίϯςφΛಁաతʹཧ͢Δػೳͷඋ→ OSػೳʹ͓͚Δεέδϡʔϥϓϩηεʹѻ͍ʹࠓճண→ ίϯςφϥϯλΠϜͷOCIϥϯλΠϜʹؔ࿈ͷਂ͍ཁ݅
18ίϯςφ࣌ͷWebαʔϏεج൫Ϟσϧদຊ྄հ, ۙ౻Ӊஐ࿕, ࡾ༔հ, ྗ݈࣍, ܀ྛ݈ଠ, FastContainer: ࣮ߦڥͷมԽʹૉૣ͘దԠͰ͖Δ߃ৗੑΛ࣋ͭγεςϜΞʔΩςΫνϟ,Πϯλʔωοτͱӡ༻ٕज़γϯϙδϜ2017จूɼ2017ɼ89-97ʢ2017-11-30ʣ, 201712݄.← ͜͜Λߋʹਂ۷Γ0SDIFTUSBUJPO-BZFS(,& &$4 .BSBUIPO ,VCFSOFUFT %PDLFS4XBSN4USBUFHZ-BZFS3BODIFS 'BTU$POUBJOFS4FSWJDF-BZFS8FC"QQMJDBUJPOPS4FSWJDFPO$POUBJOFST*OGSBTUSVDUVSF-BZFS($1 "[VSF "84 0QFO4UBDL .FTPT #BSF.FUBM -JOVY,JU$POUBJOFS3VOUJNF-BZFS%PDLFS .PCZ DPOUBJOFSE -9$ SLU )BDPOJXB ,BUB$POUBJOFST$POUBJOFS3VOUJNF*OUFSGBDF $3*
19ίϯςφϥϯλΠϜͷϨΠϠʔϞσϧԽCRIίϯςφϥϯλΠϜϥϯλΠϜ্هͷΑ͏ʹఆٛ͞ΕΔ͜ͱ͕ଟ͍͕ɺίϯςφϥϯλΠϜͷதʹruncͳͲͷϥϯλΠϜ͕͋Δͱ͍͏ͷগ͠Θ͔Γʹ͍͘ɻCRICRIϥϯλΠϜOCIOCIϥϯλΠϜίϯςφϥϯλΠϜΛϥϯλΠϜͷׂͰϨΠϠʔϞσϧԽCRIϥϯλΠϜͱOCIϥϯλΠϜͱఆٛ※1ɻ͜ͷ2ͭͷϥϯλΠϜΛ·ͱΊͯίϯςφϥϯλΠϜͱ͢ΔɻCRI : Container Runtime InterfaceOCI: Open Container Initiative Runtime/Format Specification※1 Google CloudͷIan LewisࢯCRIϥϯλΠϜΛHigh-Level RuntimeɺOCIϥϯλΠϜΛLow-Level Runtimesͱఆٛhttps://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r
20ίϯςφपลͷجຊϨΠϠʔϞσϧΦʔέετϨʔγϣϯCRICRIϥϯλΠϜOCIOCIϥϯλΠϜPodͱίϯςφ܈CRIܦ༝ͰΦʔέετϨʔγϣϯʹج͖ͮίϯςφߏใΛड͚औͬͨΓίϯςφΠϝʔδΛཧ͢ΔCRIϥϯλΠϜʢcri-oɺcontainerdͳͲʣίϯςφͷߏใΠϝʔδͳͲ͔ΒίϯςφͷϦιʔεׂݖݶΛߦͬͯίϯςφΛىಈͤ͞ΔOCIϥϯλΠϜʢrunCɺrunscɺrunncɺrunVɺkata-runtimeɺcc-runtimeͳͲʣ
21ྫɿίϯςφपลͷجຊϨΠϠʔϞσϧkubeletCRIcontainerdOCIrunCPodͱίϯςφ܈ίϯςφͷߏใΠϝʔδͳͲ͔ΒίϯςφͷϦιʔεׂݖݶΛߦͬͯίϯςφΛىಈͤ͞ΔOCIϥϯλΠϜʢrunCɺrunscɺrunncɺrunVɺkata-runtimeɺcc-runtimeͳͲʣCRIͱOCIʹ४ڌ͍ͯ͠ΕɺΦʔέετϨʔγϣϯkubernetesΛ͍ͭͭɺ͖ʹCRIϥϯλΠϜOCIϥϯλΠϜΛஔ͖͑ՄೳCRIܦ༝ͰΦʔέετϨʔγϣϯʹج͖ͮίϯςφߏใΛड͚औͬͨΓίϯςφΠϝʔδΛཧ͢ΔCRIϥϯλΠϜʢcri-oɺcontainerdͳͲʣ
22OCIϥϯλΠϜʹ͓͚ΔPodͱίϯςφ• kubernetesΦʔέετϨʔγϣϯπʔϧͱͯ͠CNCFʹΑΔඪ४Խ͕ਐΉ• ૬ޓʹଓੑͷ͋ΔෳͷίϯςφΛแׅ͢ΔPod• Podͱ͍͏ۭؒ୯ҐͰίϯςφΛͲͷΑ͏ʹσϓϩΠ͢Δ͔• PodʹٻΊΒΕΔཁ݅• ηΩϡϦςΟɾੑೳɾαʔόͷऩ༰ޮͳͲ• Podίϯςφͷ࣮ࡍతͳಈ࡞Λ࣮ݱ͢ΔͷOCIϥϯλΠϜ
23OCIϥϯλΠϜྨ(helloworldίϯςφىಈ)ηΩϡϦςΟhelloworldੑೳ(Pod+ίϯςφىಈ)※1ऩ༰ޮ(ϝϞϦͷϑοτϓϦϯτ)࣮ྫ ݸମܕOSʹ͓͚Δϓϩηεܕ ωʔϜεϖʔεͷִ 0.177srunc: 15976kloop: 4krunC ܰྔεϨουαϯυϘοΫεܕϢʔβϥϯυΧʔωϧγεςϜίʔϧΞΫηε੍ޚ0.263srunsc: 11764krunsc-gopher: 11596krunsc-sandbox: 18336kgVisor εϨουϢχΧʔωϧܕϢχΧʔωϧ(ઐ༻appΠϝʔδͱ࠷ݶͷγεςϜίʔϧ੍ݶ)͏·͘ಈ͔ͳ͍ͷͰௐࠪத͏·͘ಈ͔ͳ͍ͷͰௐࠪதNabla-Containers εϨουmicroVMܕmicroVM(virtio-net,virtio-blockɼserial console, a 1-buttonkey-board controller)1.913s(ͨͩ͠ίϯςφىಈ͕Ͱ͖ͳ͔ͬͨͷͰௐࠪத)firecracker: 41188k(ຊདྷ͜Εͱruncϓϩηε͕ىಈ)Firecracker ܰྔϓϩηεVMܕ VM 2.104skata-runtime: 27904kqemu-lite-system-x86_64: 188272kkata-proxy: 6936kkata-shim: 18784kKata-Containers ϓϩηεϗετɿ Macbook Pro late2016, CPU 3.3 GHz Intel Core i7ɼϝϞϦ 16 GB 2133 MHz LPDDR3ɼSSD512GBVMɿ VMWare Fusion 11.0.2ɼCPU2εϨουׂΓͯɼϝϞϦ 2 GB
24ݸମܕσʔληϯλʔʹ͓͚Δίϯςφ• ඞཁͳͱ͖ཁ݅ʹ߹ΘͤͯదͳOCIϥϯλΠϜͰىಈ• OSʹ͓͚ΔϓϩηεεϨουͷ͍ํͱಉ༷• ίϯςφىಈͱىಈޙͷΞϓϦέʔγϣϯͷτϨʔυΦϑΛٞ• ֎తͳΞΫηε༧ଌͰ͖ͳ͍มԽʹϦΞΫςΟϒʹରԠͤ͞Δ• ϓϩηεεϨουؒͷ࿈ܞʹ͓͍ͯϗετಁաతʹॲཧ͢Δ• ߴʹίϯςφͷঢ়ଶΛมԽͤͨ͞ΓҠಈ͢Δݚڀ͕ඞཁ[1][1] দຊ྄հɾ௶༎थɾٶԼ߶ี, CRIUΛར༻ͨ͠HTTPϦΫΤετ୯ҐͰίϯςφΛ࠶ஔͰ͖ΔίετͰߴͳεέδϡʔϦϯάख๏, IOT44, 20193݄.
4.·ͱΊ
26ݸମܕσʔληϯλʔOSΛࢦͯ͠• ݸମܕσʔληϯλʔͷίϯηϓτΛհ• σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΈͳ͕ΒΫϥυͷϚγϯύϫʔΛ׆༻• ۩ମతͳϏδϣϯΛհ• σʔληϯλʔͱίϯςφͷεέδϡʔϦϯάͷ؍Ͱٞ• ϦΞΫςΟϒʹঢ়ଶΛมߋՄೳʹ͢Δॏཁੑʹ͍ͭͯݕ౼• ֤ࣾͷίϯςφͷOCIϥϯλΠϜ࣮ͷհ• ίϯςφΛεϨουϓϩηεͱݟཱͯͨ߹ͷྨΛཧ
27ࠓޙͷ՝ͱݕ౼• OCIϥϯλΠϜͷྨʹ͓͍ͯߋʹߟ• ͬͱదͳPodͱίϯςφͷ͋Γํ͕ͳ͍͔• ूੵɾੑೳɾηΩϡϦςΟͷόϥϯεΛ͞Βʹݕ౼͢Δ• PodͷىಈͷͱίϯςφͷΞΫηε੍ޚͷੑೳͷόϥϯεΛٞ• ߴʹࢄ͞ΕͨίϯςφͷใΛཧ͢ΔΈͷઃܭͱ࣮• pstopίϚϯυͷΑ͏ͳͷ͔ΒΑΓߴͳπʔϧ·Ͱ• ϓϩηεεϨουͷѻ͍Λศརʹ͢Δ֓೦ͳͲͷݕ౼