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