Slide 1

Slide 1 text

ࠓ͔ΒͰ΋஗͘ͳ͍ʂ ΞϓϦέʔγϣϯΤϯδχΞ͕஌͓͖ͬͯͨ ͍%PDLFSίϯςφͷجૅ஌ࣝ $MPVE/BUJWF%BZT5PLZP!ދϊ໳ώϧζϑΥʔϥϜ גࣜձࣾ;0;0ςΫϊϩδʔζ ։ൃ෦ .-0QTνʔϜ ଠా ߤฏ $PQZSJHIU˜;0;05FDIOPMPHJFT *OD

Slide 2

Slide 2 text

˜;0;05FDIOPMPHJFT *OD גࣜձࣾ;0;0ςΫϊϩδʔζ ։ൃ෦ .-0QTνʔϜ ΤϯδχΞ ଠా ߤฏ ೥݄ʹελʔττΡσΠςΫϊϩδʔζ ݱ;0;0ςΫϊ ϩδʔζ ʹೖࣾɻ ։ൃ෦ͷ1#νʔϜʹͯ"84Λத৺ʹւ֎޲͚ࣗࣾ&$ͷΠϯϑ ϥ։ൃ΍ӡ༻ͳͲΛ୲౰ޙɺ43&ͱ֤ͯ͠ॴͷΠϯϑϥʹैࣄɻ ೥݄ΑΓɺ.-0QTνʔϜʹ഑ଐͱͳΓɺओʹ($1Λ࢖ͬ ͨػցֶशج൫ͷઃܭߏங΍ӡ༻ͳͲΛߦ͍ͬͯΔɻ 2

Slide 3

Slide 3 text

˜;0;05FDIOPMPHJFT *OD IUUQT[P[PKQ ˔ ೔ຊ࠷େڃͷϑΝογϣϯ௨ൢαΠτ ˔ Ҏ্ͷγϣοϓɺ Ҏ্ͷϒϥϯυͷऔΓѻ͍ʢͱ΋ ʹ೥݄຤࣌఺ʣ ˔ ৗ࣌ສ఺Ҏ্ͷ঎඼ΞΠςϜ਺ͱຖ೔ฏۉ ఺Ҏ্ͷ৽ண ঎඼Λܝࡌ ˔ ଈ೔഑ૹαʔϏε ˔ ΪϑτϥοϐϯάαʔϏε ˔ πέ෷͍ ͳͲ 3

Slide 4

Slide 4 text

˜;0;05FDIOPMPHJFT *OD IUUQTXFBSKQ 4 ˔ ೔ຊ࠷େڃͷϑΝογϣϯίʔσΟωʔτΞϓϦ ˔ ສμ΢ϯϩʔυಥഁɺίʔσΟωʔτ౤ߘ૯਺͸ສ݅ Ҏ্ʢͱ΋ʹ೥݄຤࣌఺ʣ ˔ શੈքʢ"QQ4UPSF(PPHMF1MBZ͕ར༻ՄೳͳશͯͷࠃʣͰμ ΢ϯϩʔυ͕Մೳ ˔ ສਓҎ্ͷϑΥϩϫʔΛ࣋ͭϢʔβʔʢ8&"3*45"ʣ΋஀ੜ

Slide 5

Slide 5 text

˜;0;05FDIOPMPHJFT *OD IUUQT[P[PKQNVMUJTJ[F ˔ ਎௕ͱମॏΛબ୒͢Δ͚ͩͰཧ૝ͷαΠζͷ঎඼͕ݟ͔ͭΔ৽͠ ͍༸෰ͷങ͍ํ ˔ ;0;046*5Ͱಘͨສ݅Ҏ্ͷମܕσʔλΛ׆༻͠ɺʙ αΠζͷϚϧναΠζʢଟαΠζʣʹల։ ˔ ೥ळౙΞΠςϜ͔ΒɺਓؾϒϥϯυͷϚϧναΠζΞΠς ϜΛൢച։࢝ ʲࢀՃاۀʳ גࣜձࣾΞʔόϯϦαʔνɺגࣜձࣾετϥΠϓΠϯλʔφγϣφϧɺ גࣜձࣾσΠτφɾΠϯλʔφγϣφϧɺגࣜձࣾύϧɺגࣜձࣾϏʔϜεɺ גࣜձࣾϕΠΫϧʔζɺ."3,45:-&3גࣜձࣾɺϦʔόΠɾετϥ΢ε δϟύϯגࣜձࣾ ͳͲ 5

Slide 6

Slide 6 text

˜;0;05FDIOPMPHJFT *OD ͜ͷεϥΠυʹॻ͔Ε͍ͯΔ಺༰͸ൃදऀݸਓͷ΋ͷͰ͋ Γɺ૊৫΍ϓϩμΫτΛ୅ද͢Δ΋ͷͰ͸͋Γ·ͤΜɻ ໔੹ࣄ߲ 6

Slide 7

Slide 7 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφɾΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 7

Slide 8

Slide 8 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφɾΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 8

Slide 9

Slide 9 text

˜;0;05FDIOPMPHJFT *OD ˔EPU$MPVEࣾ %PDLFSࣾͷલ਎ ͕ࣗࣾͷ1BB4 1MBUGPSN BTB4FSWJDF Λ࡞ΔͨΊʹ։ൃͨ͠ίϯςφܕԾ૝Խ ͷΞϓϦέʔγϣϯ࣮ߦج൫ ˔طଘͷ7.ܕԾ૝Խʹൺ΂ɺىಈ͕ඇৗʹߴ଎ ˔ϩΰ͕͔Θ͍͍ %PDLFSͷ͓͞Β͍ 9

Slide 10

Slide 10 text

˜;0;05FDIOPMPHJFT *OD ˔ίϯςφܕԾ૝Խʁ ˓ίϯςφͱ͸ ˙ΞϓϦέʔγϣϯͷ࣮ߦʹඞཁͳ؀ڥΛ Ұͭͷύοέʔδʹ·ͱΊͨԾ૝తͳ୯Ґ ˔04ΑΓ΋ԼͷϨΠϠΛʮ-JOVYΧʔωϧʯΛ࢖ͬͯ ࠶ݱ͢ΔԾ૝Խٕज़ %PDLFSͷ͓͞Β͍ 10 (Go/Java/Ruby...)

Slide 11

Slide 11 text

˜;0;05FDIOPMPHJFT *OD -JOVY,FSOFM %PDLFS&OHJOF JT ! 11

Slide 12

Slide 12 text

˜;0;05FDIOPMPHJFT *OD Ͱ΋͜ͷઆ໌ɺΞϓϦέʔγϣϯ ։ൃऀʹͱͬͯ͸গ͠෼͔Γʹ͘ ͘ͳ͍Ͱ͔͢ʁ 12

Slide 13

Slide 13 text

˜;0;05FDIOPMPHJFT *OD ˔खݩ 8JOEPXTNBD04 ͱຊ൪؀ڥͷࠩҟΛͳ͍ͨ͘͠ ˓αʔόʔ͝ͱʹΞϓϦέʔγϣϯ΍ϛυϧ΢ΣΞΛ ઃఆɾσϓϩΠ͢Δͷ͕େม ˓ϥΠϒϥϦͷΞοϓσʔτɾɾɾ ˓खݩͷ7BHSBOU "OTJCMF ͱຊ൪Ͱϛυϧ΢ΣΞͷ όʔδϣϯ͕͏·͘ଗ͑ΒΕͳ͍ʂ %PDLFSར༻͢΂͖ྫͷ࣮ଶ 13

Slide 14

Slide 14 text

˜;0;05FDIOPMPHJFT *OD ͦΕɺશ෦ʢجຊతʹʣ %PDLFSͰղܾͰ͖·͢Αʂ 14

Slide 15

Slide 15 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 15

Slide 16

Slide 16 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFS্Ͱʮ͜͏͍͏ৼΔ෣͍Λ͢Δʯͱ͍͏ఆٛ ˔%PDLFSGJMFΛॻ͘ˠϏϧυ͢Δ %PDLFSΠϝʔδ ˓࣮ଶ͸UBSܗࣜͰ·ͱΊͨΞʔΧΠϒϑΝΠϧ ˔͜ͷ࣌఺Ͱ͸·࣮ͩࡍʹಈ࡞͍ͯ͠ΔΘ͚Ͱ͸ͳ͍ %PDLFSΠϝʔδͱ͸ 16 Dockerfile docker build Docker

Slide 17

Slide 17 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSϗετͷ্Ͱ࣮ࡍʹಈ࡞͢Δϓϩηε ˔ίϯςφΛ্ཱͪ͛ΔͨΊʹ͸ɺϕʔεͱͳΔ %PDLFSΠϝʔδ͕ඞཁ %PDLFSίϯςφͱ͸ 17 Docker Docker Docker Docker docker run

Slide 18

Slide 18 text

˜;0;05FDIOPMPHJFT *OD ˔ݴ͍׵͑ΔͱɺԼهΛ࣮ߦͨ͠΋ͷ͕ίϯςφʹͳΔ ˓%PDLFSGJMF͔Β࡞੒ͨ͠खݩͷΠϝʔδ ˓࡞੒ࡁΈͷ֎෦ΠϝʔδΛϨδετϦ͔Βऔಘ %PDLFSίϯςφͱ͸ 18 Docker Docker Docker Docker docker run

Slide 19

Slide 19 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSGJMF͔ΒΠϝʔδΛϏϧυ ˔Ϗϧυͨ͠ΠϝʔδΛϨδετϦʹ1VTI ˔ಈ͔͍ͨ͠؀ڥͰΠϝʔδΛ1VMM͠ɺίϯςφΛىಈ ˔͜ͷྲྀΕΛ·ͱΊͯʮ#VJME 4IBSF 3VOʯͱݺͿ #VJME 4IBSF 3VO 19 Dockerfile docker build Docker Docker docker run

Slide 20

Slide 20 text

˜;0;05FDIOPMPHJFT *OD %PDLFSΠϝʔδ͕ͦͷ·· ʮΰʔϧσϯΠϝʔδʯͱͳΔͨΊɺ ϥΠϒϥϦ΍ݴޠϥϯλΠϜͷ όʔδϣϯࠩҟ͕ੜ·Εʹ͍͘ 20

Slide 21

Slide 21 text

˜;0;05FDIOPMPHJFT *OD %PDLFSGJMFΛ(JUͰ؅ཧ͠ɺΠϝʔδ ͷλά؅ཧʹ(JUϋογϡΛ࢖͏ ͜ͱͰʮ͍ͭʯʮͲͷΠϝʔδʯΛ ࢖͔ͬͨΛ໌֬ʹͰ͖Δ 21

Slide 22

Slide 22 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 22

Slide 23

Slide 23 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͰղܾͰ͖Δ͜ͱ ˓શ؀ڥͷڞ௨Խ ˙Ϋϥ΢υɾΦϯϓϨ্ͱ։ൃ؀ڥͱͷࠩҟΛzݮΒ͢z ˓ߴ଎ͳΞϓϦέʔγϣϯ഑৴ɾσϓϩΠ ˓$*ͳͲʹΑΔࣗಈԽਪਐ ˙ςετ΋ಉҰ؀ڥͰ࣮ߦՄ %PDLFS͸ۜͷ஄ؙͰ͸ͳ͍ 23

Slide 24

Slide 24 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFS͕ۤखͳ͜ͱ ˓ϞϊϦγοΫͳΞϓϦέʔγϣϯͷ؅ཧ ˠ5IF5XFMWF'BDUPS"QQ ˠ$MPVE/BUJWF5SBJM.BQ %PDLFS͸ۜͷ஄ؙͰ͸ͳ͍ 24

Slide 25

Slide 25 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͰղܾͰ͖ͳ͍͜ͱ ˓ΞϓϦɾγεςϜϩάͷ؅ཧ ˓؂ࢹ ˓ॊೈͳϦιʔε؅ཧ %PDLFS͸ۜͷ஄ؙͰ͸ͳ͍ 25

Slide 26

Slide 26 text

˜;0;05FDIOPMPHJFT *OD ίϯςφΛຊ൪؀ڥͰ ಈ͔͢ʹ͸͍͔ͭ͘ͷ՝୊͕͋Δ 26

Slide 27

Slide 27 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 27

Slide 28

Slide 28 text

˜;0;05FDIOPMPHJFT *OD ˔ຊ൪؀ڥͰ͸ෳ਺ͷίϯςφΛಈ͔͢͜ͱ͕Ұൠత ˓Մ༻ੑ΍଱ো֐ੑΛ্͛ΔͨΊ ˓ࣗಈεέʔϦϯάɺϩʔυόϥϯγϯάɺࣗݾ෮چ౳ʑ ˔֤ίϯςφ͸ಠཱ͓ͯ͠Γɺ͓ޓ͍Λೝࣝ͠ͳ͍ͨΊ ԿΒ͔ͷ؅ཧϨΠϠ͕ඞཁʹͳΔ ˠΦʔέετϨʔγϣϯπʔϧΛೖΕΔ ΦʔέετϨʔγϣϯʁʁ 28

Slide 29

Slide 29 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSίϯςφ͸ΞϓϦέʔγϣϯ։ൃʹ͓͍ͯ ैདྷ՝୊ͱͳ͍͍͔ͬͯͨͭ͘ͷ໰୊Λղফͯ͘͠ΕΔ ˔%PDLFS୯ମͰ͸ຊ൪ӡ༻ʹඞཁͳ؅ཧ༻ͷػೳ͕ෆ଍ ͍ͯ͠ΔͨΊɺಋೖʹ೉͕͋Δ ˔ͦΕΒΛղܾ͢Δʹ͸ɺίϯςφΦʔέετϨʔγϣ ϯ͕ඞཁ ͜͜·Ͱͷ·ͱΊ 29

Slide 30

Slide 30 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 30

Slide 31

Slide 31 text

˜;0;05FDIOPMPHJFT *OD ˔,VCFSOFUFT͸ίϯςφΦʔέετϨʔγϣϯπʔϧͷ ʮσϑΝΫτελϯμʔυʯ ,VCFSOFUFTʁ 31

Slide 32

Slide 32 text

˜;0;05FDIOPMPHJFT *OD 32

Slide 33

Slide 33 text

˜;0;05FDIOPMPHJFT *OD ˔ίϯςφ 1PE Λத৺ͱͨ͠෼ࢄγεςϜ ˓ϫʔΫϩʔυ͕ৗʹʮ͋Δ΂͖ঢ়ଶʯΛอͭΑ͏ಈ͘ ,VCFSOFUFTͷ֓ཁ 33 Ref: https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/

Slide 34

Slide 34 text

˜;0;05FDIOPMPHJFT *OD :".-ʹΑΔߏ੒؅ཧ 34

Slide 35

Slide 35 text

˜;0;05FDIOPMPHJFT *OD ˔ίϯςφͷઃఆ ˓ϕʔεΠϝʔδɺόʔδϣϯɺϙʔτ౳ ˔ཁٻ͢Δ$16΍ϝϞϦͳͲͷϦιʔε ˔ϔϧενΣοΫ ˔؀ڥม਺ ˔ࣗಈεέʔϧͷ਺΍εέʔϧΠϯΞ΢τͷ৚݅ :".-ʹΑΔએݴతͳઃఆ 35

Slide 36

Slide 36 text

˜;0;05FDIOPMPHJFT *OD ˔ίϯςφͷઃఆ ˓ϕʔεΠϝʔδɺόʔδϣϯɺϙʔτ౳ ˔ཁٻ͢Δ$16΍ϝϞϦͳͲͷϦιʔε ˔ϔϧενΣοΫ ˔؀ڥม਺ ˔ࣗಈεέʔϧͷ਺΍εέʔϧΠϯΞ΢τͷ৚݅ :".-ʹΑΔએݴతͳઃఆ 36

Slide 37

Slide 37 text

˜;0;05FDIOPMPHJFT *OD 37

Slide 38

Slide 38 text

˜;0;05FDIOPMPHJFT *OD :".-ߏ੒؅ཧʹΑΔ੹೚෼ք఺ͷม Խ 38 VM SSH Git push VM

Slide 39

Slide 39 text

˜;0;05FDIOPMPHJFT *OD 39 VM SSH Git push VM :".-ߏ੒؅ཧʹΑΔ੹೚෼ք఺ͷม Խ

Slide 40

Slide 40 text

˜;0;05FDIOPMPHJFT *OD ։ൃεΩʔϚͷมԽͱ %FW0QT 40 ˔։ൃͱΠϯϑϥͷ֞ࠜͷϥΠϯ͕มΘΔ ˓ΞϓϦଆͰߏ੒ͷมߋΛՃ͑ΒΕΔൣғ͕૿͑Δ ˔%FW0QTͷઢҾΛܾΊΔͷ͸ϓϩμΫτ΍αʔϏεʹ ؔΘΔΤϯδχΞࣗ਎

Slide 41

Slide 41 text

˜;0;05FDIOPMPHJFT *OD ˔,VCFSOFUFT͸ɺ%PDLFSΛ$3* ίϯςφΛ࣮ߦͤ͞Δ ͨΊͷϥϯλΠϜ࣮૷ ͷͭͱͯ͠ೝ͍ࣝͯ͠Δ ˓,VCFSOFUFT্ͰίϯςφΛʮಈ͔͚ͩ͢ʯͰ͋Ε͹ɺ ଞͷ$3*Λ࢖͏͜ͱ΋Ͱ͖Δ ˙DPOUBJOFSE ˙DSJPͳͲ ,VCFSOFUFTͱ%PDLFS 41

Slide 42

Slide 42 text

˜;0;05FDIOPMPHJFT *OD ˔$3*͕ੜ·ΕΔલɺ,VCFSOFUFT͸%PDLFSʹ׬શʹґଘ ˓%PDLFSͳ͠Ͱ,VCFSOFUFT͕ಈ͔ͳ͔ͬͨͨΊɺ %PDLFSࣗମ͕ڧ͍ྗΛ͍࣋ͬͯͨ ˔ݱࡏ͸$3*ͷ࢓༷ࡦఆʹΑͬͯଞͷϥϯλΠϜ͕ಈ͘ ˓%PDLFSࣗମ΋,VCFSOFUFT΁ͷ࿈ܞΛڧԽ͢Δಈ͖ ˠ%PDLFS͕,VCFSOFUFTʹ௥ै͢ΔΑ͏ͳߏਤʹͳͬͨ ,VCFSOFUFTͱ%PDLFS 42

Slide 43

Slide 43 text

˜;0;05FDIOPMPHJFT *OD ˔$3*ʹ͸ίϯςφͷ࣮ߦʹඞཁͳػೳ͔͠ͳ͍ ˓%PDLFSʹؚ·ΕΔػೳʹ΋ɺ,VCFSOFUFT্Ͱ ࢖͍ͬͯΔػೳɺ࢖͍ͬͯͳ͍ػೳ͕͋Δ ,VCFSOFUFTͱ%PDLFS 43

Slide 44

Slide 44 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSͷ͓͞Β͍ ˔%PDLFSίϯςφͱ%PDLFSΠϝʔδ ˔%PDLFSͰղܾͰ͖Δ͜ͱɾղܾͰ͖ͳ͍͜ͱ ˔ίϯςφΦʔέετϨʔγϣϯͷجૅ ˔,VCFSOFUFTͱ%PDLFSͷ͔͔ΘΓ ˔,VCFSOFUFTҎ֎ͷίϯςφΦʔέετϨʔγϣϯ ΞδΣϯμ 44

Slide 45

Slide 45 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFS4XBSN ˔.BSBUIPO.FTPT ˔)BTIJDPSQ/PNBE ˔"NB[PO&$4 ༷ʑͳίϯςφΦʔέετϨʔγϣϯ 45

Slide 46

Slide 46 text

˜;0;05FDIOPMPHJFT *OD ˔%PDLFSίϯςφ͸ΞϓϦέʔγϣϯ։ൃʹ͓͍ͯ ैདྷ՝୊ͱͳ͍͍͔ͬͯͨͭ͘ͷ໰୊Λղফͯ͘͠ΕΔ ˔%PDLFS୯ମͰ͸ຊ൪ӡ༻ʹඞཁͳ؅ཧ༻ͷػೳ͕ෆ଍ ͍ͯ͠ΔͨΊɺίϯςφΦʔέετϨʔγϣϯ͕ඞཁ ˔,VCFSOFUFT͸͋͘·Ͱબ୒ࢶͷͭ ˓%PDLFSͱ͸࡞Γʹ΋ࠩҟ͕͋Γɺن໛ײ͕େ͖͍ ͨΊɺΫϥ΢υΛ࠶࣮૷͢Δ͘Β͍ͷ֮ޛͰ௅Ή΂͖ ·ͱΊ 46

Slide 47

Slide 47 text

˜;0;05FDIOPMPHJFT *OD ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 47

Slide 48

Slide 48 text

No content