セキュリティ・性能・収容・運用技術からコンテナの未来を考える @ K-Ruby #22
2019/03/25 さくらインターネット株式会社 さくらインターネット研究所 上級研究員
松本亮介 / まつもとりー / @matsumotory
͘͞ΒΠϯλʔωοτגࣜձࣾ(C) Copyright 1996-2019 SAKURA Internet Inc͘͞ΒΠϯλʔωοτݚڀॴίϯςφͱݸମܕσʔληϯλʔOS2019/03/25 ্ڃݚڀһ দຊ ྄հηΩϡϦςΟɾੑೳɾऩ༰ɾӡ༻ٕज़͔ΒίϯςφͷະདྷΛߟ͑Δ @ K-Ruby #22
View Slide
2ɾ͘͞ΒΠϯλʔωοτݚڀॴ ্ڃݚڀһɾגࣜձࣾGrooves Forkewll ٕज़ސɾϖύϘݚڀॴ ٬һݚڀһ ݚڀސɾηΩϡϦςΟɾΩϟϯϓߨࢣɾใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ ֤छҕһɾژେֶത࢜ʢใֶʣদຊ྄հ / ·ͭͱΓʔ / @matsumotory
3ɾ͘͞ΒΠϯλʔωοτݚڀॴͷݚڀॴઃܭɾίϯηϓτɾϏδϣϯͷઃఆɾνʔϜͱͯ͠ͷݚڀ։ൃͷऔΓΈํͷઃܭɾจࣥචใऩूͷΈΛGH:Eͱslack্ͰΈԽɾݚڀॴϝϯόʔׂͷઃܭɾ࠷ۙServerspecͷmizzy͞Μk8sຊ࡞ऀͷ੨ࢁ͞ΜՃೖɾڞಉݚڀݚڀձͷԼ४උݚڀ։ൃҎ֎Ͱ࠷ۙͬͨ͜ͱ
41. എܠͱత2. ݸମܕσʔληϯλʔ3. ίϯςφͱݸମܕσʔληϯλʔOS4. ·ͱΊ࣍※͜ͷݚڀʹج͍͍ͮͯ·͢: দຊ྄հ, ௶༎थ, ٶԼ߶ี, ࢄܕσʔληϯλʔOSΛࢦͨ͠ϦΞΫςΟϒੑΛ࣋ͭίϯςφ࣮ߦج൫ٕज़, ใॲཧֶձݚڀใࠂΠϯλʔωοτͱӡ༻ٕज़ʢIOTʣ, No.2019-IOT-44, Vol.27, pp.1-8, 20183݄.
1.എܠͱత
6େنσʔληϯλʔͷूத• σʔληϯλʔͷେنԽͱूத• ίϯϐϡʔλϦιʔεͱίετͷޮԽ• Ϋϥυར༻͕͜͜Ͱਵͱଅਐ͞Ε͖ͯͨ• ٕज़എܠͷมԽʹͬͯOSSΫϥυαʔϏεٸʹมԽ• ιϑτΣΞϕϯμʔʹڧ͘ґଘ͠ͳ͍มԽʹڧ͍ઃܭ͕ٸ• αʔϏεͷػೳͷநԽͱૄ݁߹ͳઃܭ͕ීٴ• ΫϥυωΠςΟϒɾϚϧνΫϥυɾϚΠΫϩαʔϏεԽ
7σʔληϯλʔͷूத͔Βࢄ• ΫϥυΛલఏʹϞϊϦγοΫͳαʔϏεઃܭ͔ΒϚΠΫϩαʔϏεԽ• αʔϏεͷ֤ػೳΛখ͞ͳαʔϏεͱ࣮ͯ͠͠gRPCͰ࿈ܞ• ϚΠΫϩαʔϏε୯ҐͰͷଟ༷ͳνʔϜ։ൃӡ༻ͷޮԽ• εέʔϦϯάো࣌ͷӨڹͷہॴԽ• ϚΠΫϩαʔϏεؒͰͷଳҬෆϨΠςϯγʔͷݮ͕ٻΊΒΕΔ• େنσʔληϯλʔͷڑʢ౦ژͱੴङؒʣͰ͕ٞੜ࢝͡ΊΔ• αʔό͚ͩͰͳ͘ηϯαʔσόΠεͷߴԽɾଟԽʹΑΔଳҬෆ
8σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΉະདྷ• ֤ίϯϐϡʔςΟϯάػೳ͕ݸମͱͯ͠ػೳͭͭ͠૯ମͱͯ͠౷• ϥοΫϨϕϧͷίϯϐϡʔλ܈ɼEdge/FogίϯϐϡʔςΟϯάͳͲ• খɾதنσʔληϯλʔ͕ϋϒͱͳͬͯ݁Ռతʹશମ͕ଓɾߏ• ੜ׆ͷதͰਓʑ͕ίϯϐϡʔλͷΞγετΛৗʹड͚Δ࣌Λࢦ͢• ͍·͔ͩͭͯͳ͍ϚγϯύϫʔͱΠϯςϦδΣϯεͳػೳΛఏڙ• ࣾձʹ༹͚ࠐΉσʔληϯλʔػೳ͓ΑͼΫϥυͷϚγϯύϫʔ• ݸମܕσʔληϯλʔ͓ΑͼOSͱίϯηϓτΛఆΊΔ
9ຊൃද• ݸମܕσʔληϯλʔʹ͓͚ΔίϯηϓτͱϏδϣϯͷհ• ݸମܕσʔληϯλʔOSʹඞཁͳཁ݅ͱ• ݱ࣮తͳWebΞϓϦέʔγϣϯΛѻ͏ίϯςΩετͰ·ͣݕ౼• ίϯϐϡʔςΟϯάϦιʔε͕ࢄԽͨ͠ࡍͷίϯςφͷ͋Γํ• ηΩϡϦςΟɾੑೳɾߴूੵऩ༰ɾӡ༻ٕज़͔ΒݟΔίϯςφͷະདྷ• ίϯςφͷϦΞΫςΟϒੑͷॏཁੑΛٞ
2.ݸମܕσʔληϯλʔ
11͘͞ΒΠϯλʔωοτݚڀॴͷϑΥʔΧεTTF TASTAA PAPR TTTRIV
12ݱࡏͷΫϥυ͚ͩͰ͕ղܾͰ͖ΔΘ͚Ͱͳ͍• ΑΓҰநԽͷਐΜͩΠϯλʔωοτͷ༷૬ͷมԽ• ΫϥυωΠςΟϒʹΑͬͯ͞ΒͳΔσʔληϯλʔͷڊେԽ• தԝूݖతͳίϯϐϡʔςΟϯάͰ͍͠έʔε• ϨΠςϯγ͕େ͖ͯ͘அ͕ؒʹ߹Θͳ͍ϦΞϧλΠϜ͕ཁٻ͞ΕΔέʔε• ͋Δ͍σʔλ͕େͰଳҬ͕ෆ͢Δέʔε• ࠓޙΫϥυͷϚγϯύϫʔΛͲͷΑ͏ʹ׆༻Ͱ͖ΔੈքΛࢦ͖͔͢ʁ• ͘͞ΒΠϯλʔωοτݚڀॴͷίϯηϓτͱϏδϣϯΛ࠶ఆٛ
13͘͞ΒΠϯλʔωοτݚڀॴͷϏδϣϯ
ݸମܕσʔληϯλʔ
15ݸମܕσʔληϯλʔͷཧ1. ݱࡏσʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺࠓޙϨΠςϯγʗηΩϡϦςΟʗίετͷཁ͔݅Βɺ͋ΒΏΔॴࣾձɺ৫ʹίϯϐϡʔςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ2. ͦΕΒࢄͨ͠ίϯϐϡʔςΟϯάϦιʔεɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔΛఏڙ͢Δʹཹ·ΒͣɺͦͷॴࣾձͷཁٻʹԠͯ͡ɺࣗతʹɺࢄ͋Δ͍༗ػతʹ݁߹͠ɺݱɾΫϥυͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏΛ࠾ΔΑ͏ʹػೳ͠·͢ɻ3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔͷɺਓʑͷۙʹଘࡏ͠ɺϦΞϧλΠϜ͔ͭΠϯςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ػతʹ݁߹͢Δ͜ͱʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ͱͰݱ࠷ద͔ͭશମ࠷దΛ࣮ݱ͢ΔSuper Organized WorldͰ͢ɻ
3.ίϯςφͱݸମܕσʔληϯλʔOS
17দຊͷઐྖҬʹ͓͚Δݸମσʔληϯλʔ• ݸମܕσʔληϯλʔʹ͚ͨσʔληϯλʔOSͱίϯςφ• ࣮༻తͳWebAppɼWordPressͱ͔ɼΛ͏·͘ಈ͔͍ͨ͠ͱ͍͏είʔϓ• ComputeͱDataͷ͏ͪCompute-Intensiveʹ·ͣண• ࢄͨ͠σʔληϯλʔ্ʹಁաతʹࢄىಈ͢Δίϯςφ܈͕ඞཁ• ߴʹࢄͨ͠σʔληϯλʔ্ʹOSͷΑ͏ͳബ͍ϨΠϠʔ͕ඞཁ• ݸମܕσʔληϯλʔOS্ʹϓϩηεͱεϨου͕ଘࡏ
18ಁաੑͱίϯςφͷϦΞΫςΟϒੑ• σʔληϯλʔΛಁաత͔ͭ༗ػతʹίϯςφ͕ॲཧΛߦ͏ඞཁ͕͋Δ• ༷ʑͳίϯςφϥϯλΠϜΛϓϩηεεϨουͱݟཱͯΔ• ίϯςφ͕ϦΞΫςΟϒʹঢ়ଶΛม͑ΒΕΔΑ͏ʹ͢Δඞཁ͕͋Δ• ࣄલ༧ଌతͰͳ͘ԠతʹΞΫηεมԽͱϦιʔεׂΛҰகͤ͞Δ• ݸମతʹߴʹࢄͨ͠σʔληϯλʔΛލ͍ͩ༗ػతͳ࿈ܞ• ίϯςφؒͷ࿈ܞαʔόσʔληϯλʔؒΛߴҠಈ͢Δඞཁ͕͋Δ→ ίϯςφϥϯλΠϜͷOCIϥϯλΠϜʹؔ࿈ͷਂ͍ཁ݅
19ίϯςφ࣌ͷ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 DPOUBJOFSE -9$ )BDPOJXB H7JTPS ,BUB$POUBJOFST$POUBJOFS3VOUJNF*OUFSGBDF $3*
20ίϯςφϥϯλΠϜͷϨΠϠʔϞσϧԽCRIίϯςφϥϯλΠϜϥϯλΠϜ্هͷΑ͏ʹఆٛ͞ΕΔ͜ͱ͕ଟ͍͕ɺίϯςφϥϯλΠϜͷதʹruncͳͲͷϥϯλΠϜ͕͋Δͱ͍͏ͷগ͠Θ͔Γʹ͍͘ɻCRICRIϥϯλΠϜOCIOCIϥϯλΠϜίϯςφϥϯλΠϜΛϥϯλΠϜͷׂͰϨΠϠʔϞσϧԽCRIϥϯλΠϜͱOCIϥϯλΠϜͱఆٛ※1ɻ͜ͷ2ͭͷϥϯλΠϜΛ·ͱΊͯίϯςφϥϯλΠϜͱ͢ΔɻCRI : Container Runtime InterfaceOCI: Open Container Initiative Runtime/Image 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
21ίϯςφपลͷجຊϨΠϠʔϞσϧΦʔέετϨʔγϣϯCRICRIϥϯλΠϜOCIOCIϥϯλΠϜPodͱίϯςφ܈CRIܦ༝ͰΦʔέετϨʔγϣϯʹج͖ͮίϯςφߏใΛड͚औͬͨΓίϯςφΠϝʔδΛཧ͢ΔCRIϥϯλΠϜʢcri-oɺcontainerdͳͲʣίϯςφͷߏใΠϝʔδͳͲ͔ΒίϯςφͷϦιʔεׂݖݶΛߦͬͯίϯςφΛىಈͤ͞ΔOCIϥϯλΠϜʢrunCɺrunscɺrunncɺrunVɺkata-runtimeɺcc-runtimeͳͲʣ
22ྫɿίϯςφपลͷجຊϨΠϠʔϞσϧkubeletCRIcontainerdOCIrunCPodͱίϯςφ܈ίϯςφͷߏใΠϝʔδͳͲ͔ΒίϯςφͷϦιʔεׂݖݶΛߦͬͯίϯςφΛىಈͤ͞ΔOCIϥϯλΠϜʢrunCɺrunscɺrunncɺrunVɺkata-runtimeɺcc-runtimeͳͲʣCRIͱOCIʹ४ڌ͍ͯ͠ΕɺΦʔέετϨʔγϣϯkubernetesΛ͍ͭͭɺ͖ʹCRIϥϯλΠϜOCIϥϯλΠϜΛஔ͖͑ՄೳCRIܦ༝ͰΦʔέετϨʔγϣϯʹج͖ͮίϯςφߏใΛड͚औͬͨΓίϯςφΠϝʔδΛཧ͢ΔCRIϥϯλΠϜʢcri-oɺcontainerdͳͲʣ
23OCIϥϯλΠϜʹ͓͚ΔPodͱίϯςφ• kubernetesΦʔέετϨʔγϣϯπʔϧͱͯ͠CNCFʹΑΔඪ४Խ͕ਐΉ• ૬ޓʹଓੑͷ͋ΔෳͷίϯςφΛแׅ͢ΔPod• Podͱ͍͏ۭؒ୯ҐͰίϯςφΛͲͷΑ͏ʹσϓϩΠ͢Δ͔• PodʹٻΊΒΕΔཁ݅• ηΩϡϦςΟɾੑೳɾαʔόͷऩ༰ޮͳͲ• Podίϯςφͷ࣮ࡍతͳಈ࡞Λ࣮ݱ͢ΔͷOCIϥϯλΠϜ• Pod૬ͷִͷઃܭ͕ඇৗʹॏཁͳ࣌ʹͳΔ
5.·ͱΊ
25ݸମܕσʔληϯλʔOSΛࢦͯ͠• ݸମܕσʔληϯλʔͷίϯηϓτΛհ• σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΈͳ͕ΒΫϥυͷϚγϯύϫʔΛ׆༻• ۩ମతͳϏδϣϯΛհ• σʔληϯλʔͱίϯςφͷεέδϡʔϦϯάͷ؍Ͱٞ• ϦΞΫςΟϒʹঢ়ଶΛมߋՄೳʹ͢Δॏཁੑʹ͍ͭͯݕ౼• ίϯςφΛεϨουϓϩηεͱݟཱͯͨ߹ͷྨΛཧ• Podͷઃܭ͕ίϯςφͷऩ༰ઃܭΛࠨӈ͢ΔॏཁͳϑΝΫλʔ
26ࠓޙͷ՝ͱݕ౼• OCIϥϯλΠϜͷྨʹ͓͍ͯߋʹߟ• ͬͱదͳPodͱίϯςφͷ͋Γํ͕ͳ͍͔• ूੵɾੑೳɾηΩϡϦςΟɾ͍͢͞ͷόϥϯεΛ͞Βʹݕ౼͢Δ• PodͷىಈͷͱίϯςφͷΞΫηε੍ޚͷੑೳͷόϥϯεΛٞ• ߴʹࢄ͞ΕͨίϯςφͷใΛཧ͢ΔΈͷઃܭͱ࣮• pstopίϚϯυͷΑ͏ͳͷ͔ΒΑΓߴͳπʔϧ·Ͱ• ϓϩηεεϨουͷѻ͍Λศརʹ͢Δ֓೦ͳͲͷݕ౼
27࣍ճ༧ࠂɿOCIϥϯλΠϜΛ͍ͬͯ͘