Slide 1

Slide 1 text

20೥΋ͷͷڊେϓϩμΫτΛ KubernetesʹҠߦ͍ͯ͠Δ࿩ αΠϘ΢ζגࣜձࣾ Garoon։ൃ ਿࢁ ༞Ұ PHP Conference 2022 ޙ೔ஊ #phpcon #phpcon2022

Slide 2

Slide 2 text

Whoami • ਿࢁ ༞Ұ @oogFranz • αΠϘ΢ζ8೥໨ΤϯδχΞ • େاۀ޲͚άϧʔϓ΢ΣΞGaroon(Ψϧʔϯ) ࡞ͬͯΔ • ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ

Slide 3

Slide 3 text

αΠϘ΢ζ Garoon • ։ൃ20೥ʂ • େاۀ޲͚ͷάϧʔϓ΢ΣΞ • PHPͱMySQLͰಈ͘ • ύοέʔδ൛ͱΫϥ΢υ൛͕͋Δ

Slide 4

Slide 4 text

αΠϘ΢ζ Garoon • ։ൃ20೥ʂ • େاۀ޲͚ͷάϧʔϓ΢ΣΞ • PHPͱMySQLͰಈ͘ • ύοέʔδ൛ͱΫϥ΢υ൛͕͋Δ

Slide 5

Slide 5 text

ݱΫϥ΢υΠϯϑϥج൫ʢForestʣ • 2011೥ʹαʔϏε։࢝ • ࣗࣾσʔληϯλʔ • 10୆ఔ౓ͷVMΛ1ηοτʹͯ͠ߏ੒ 
 ʢApplication, DB, ϑΝΠϧαʔό…ʣ • ߏஙʹܞΘͬͨ৿̋͞Μͷ໊લ͔ΒForestͱݺ͹ΕΔ

Slide 6

Slide 6 text

ݱΫϥ΢υΠϯϑϥج൫ʢForestʣ Forest ʹ͸ଟ༷ͳ໾ׂΛ࣋ͬͨ෺ཧɾԾ૝αʔόʔ܈ͱɺ 
 ͦΕΒΛ؅ཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ 
 ͦͷෳࡶ͔͞Β໎͍ͷ৿ͷΑ͏ʹײ͡Δ͜ͱ΋͋Δ͔΋͠Ε·ͤΜɻ 
 ͔͠͠ɺਖ਼͍͠஌ࣝΛಘͯɺ৿ͷ஍ਤ΍ϧʔϧΛཧղ͢Ε͹ɺ 
 ๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ “ αΠϘ΢ζࣾ಺༻ޠࣙయ BozupediaΑΓ

Slide 7

Slide 7 text

ݱΫϥ΢υΠϯϑϥج൫ʢForestʣ Forest ʹ͸ଟ༷ͳ໾ׂΛ࣋ͬͨ෺ཧɾԾ૝αʔόʔ܈ͱɺ 
 ͦΕΒΛ؅ཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ 
 ͦͷෳࡶ͔͞Β໎͍ͷ৿ͷΑ͏ʹײ͡Δ͜ͱ΋͋Δ͔΋͠Ε·ͤΜɻ 
 ͔͠͠ɺਖ਼͍͠஌ࣝΛಘͯɺ৿ͷ஍ਤ΍ϧʔϧΛཧղ͢Ε͹ɺ 
 ๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ “ αΠϘ΢ζࣾ಺༻ޠࣙయ BozupediaΑΓ ೥Ҏ্ͷ'PSFTUͷ੒௕ʹΑΓɺ ͞·͟·ͳ໰୊͕ൃੜ͍ͯ͠Δ

Slide 8

Slide 8 text

ݱΫϥ΢υΠϯϑϥج൫ʢForestʣͷ՝୊ εέʔϥϏϦςΟ͕ ௿͍ ϝϯςφϯεੑ͕ ௿͍ ϝϯςφϯεͷ μ΢ϯλΠϜ͕௕͍ ։ൃͱӡ༻ͷؒʹน αʔϏεͷߏ੒มߋ͕ ࠔ೉

Slide 9

Slide 9 text

Ϋϥ΢υΠϯϑϥج൫࡮৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟ΍ϝϯςφϏϦςΟͷ໰୊͔Βελʔτ • VMϕʔεͷߏ੒͔Βίϯςφϕʔεͷߏ੒ʹ࡮৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ͸2018೥։࢝ɻ2021೥ʹҰ୴׬ྃʂ • https://blog.cybozu.io/entry/ever-lasting-neco

Slide 10

Slide 10 text

Ϋϥ΢υΠϯϑϥج൫࡮৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟ΍ϝϯςφϏϦςΟͷ໰୊͔Βελʔτ • VMϕʔεͷߏ੒͔Βίϯςφϕʔεͷߏ੒ʹ࡮৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ͸2018೥։࢝ɻ2021೥ʹҰ୴׬ྃʂ • https://blog.cybozu.io/entry/ever-lasting-neco (BSPPOͷҠߦ͕ࠓ೥͔Βελʔτʂ

Slide 11

Slide 11 text

Ϋϥ΢υΠϯϑϥج൫࡮৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟ΍ϝϯςφϏϦςΟͷ໰୊͔Βελʔτ • VMϕʔεͷߏ੒͔Βίϯςφϕʔεͷߏ੒ʹ࡮৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ͸2018೥։࢝ɻ2021೥ʹҰ୴׬ྃʂ • https://blog.cybozu.io/entry/ever-lasting-neco (BSPPOͷҠߦ͕ࠓ೥͔Βελʔτʂ ׬ྃ໨ඪ͸೥ʂ

Slide 12

Slide 12 text

͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

Slide 13

Slide 13 text

͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

Slide 14

Slide 14 text

Garoon Pods ίϯςφ͸͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ΞΫηε෼ࢄ

Slide 15

Slide 15 text

Garoon Pods ίϯςφ͸͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ❌ ❌ ͍ͣΕ͔ͷίϯςφ΍ 1PEʹ໰୊͕͋ͬͨΒ

Slide 16

Slide 16 text

Garoon Pods ίϯςφ͸͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ❌ ❌ ͍ͣΕ͔ͷίϯςφ΍ 1PEʹ໰୊͕͋ͬͨΒ /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ໰୊ͷ1PEΛऔΓআ͖ ৽͘͠1PEΛ࡞੒͢Δ

Slide 17

Slide 17 text

VMϕʔεͷ໰୊ • VM͸جຊతʹ͸མͱͤͳ͍ʢ৑௕Խ͸͍ͯ͠Δ͕ʣ • ໰୊͕͋ͬͨ࣌ʹVMΛ1୆௥Ճͯ͠ɺɺɺͱ͍͏ରॲ͸ࠔ೉ • VMͷઃఆ͸10೥Ҏ্ͷΫϥ΢υӡ༻ʹ൐͍ෳࡶʹ • ӡ༻ଆͷઃఆ΋ΞϓϦέʔγϣϯʢGaroonʣଆͷઃఆ΋ෳࡶ

Slide 18

Slide 18 text

ίϯςφ͸͙͢ࢮ͵ʂ • ίϯςφͰ͸໰୊͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ 
 ৽͍͠΋ͷΛ࡞Δɻ • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞ΢τ͕࣮ݱՄೳ • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ΋ 
 ίϯςφ͕͍ͭࢮΜͰ΋ྑ͍લఏͰઃܭ͠Α͏ɺ 
 ͱݴ͏͓࿩ɻ

Slide 19

Slide 19 text

ίϯςφ͸͙͢ࢮ͵ʂ • ίϯςφͰ͸໰୊͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ 
 ৽͍͠΋ͷΛ࡞Δɻ • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞ΢τ͕࣮ݱՄೳ • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ΋ 
 ίϯςφ͕͍ͭࢮΜͰ΋ྑ͍લఏͰઃܭ͠Α͏ɺ 
 ͱݴ͏͓࿩ɻ ύοέʔδͰ࢝·ͬͨ(BSPPOʹ͸ͦͷલఏ͕ͳ͍

Slide 20

Slide 20 text

Garoon Pods ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ϑΝΠϧΞοϓϩʔυ ϩάϑΝΠϧ Ωϟογϡ

Slide 21

Slide 21 text

Garoon Pods ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ϑΝΠϧΞοϓϩʔυ ϩάϑΝΠϧ Ωϟογϡ ❌ ❌ 1PE͕ෆ༻ҙʹམͪΔͱɺಓ࿈ΕͰ͍Ζ͍Ζফ͑ͯ͠·͏ ❌ ❌

Slide 22

Slide 22 text

Garoon Pods ղܾࡦ1ɿঢ়ଶΛ֎෦αʔϏεʹ͓͘ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS KVS ϑΝΠϧετϨʔδ ϩάαʔϏε

Slide 23

Slide 23 text

Garoon Pods ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS -PHಡΈग़͠ -PHಡΈग़͠ -PHಡΈग़͠ ϩάج൫αʔϏε Volumeʹॻ͖ग़͢

Slide 24

Slide 24 text

Garoon Pods ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS -PHಡΈग़͠ -PHಡΈग़͠ -PHಡΈग़͠ ϩάج൫αʔϏε Volumeʹॻ͖ग़͢ ͜Ε͔Βؤுͬͯ࡞Γ·͢ɻɻɻ😇

Slide 25

Slide 25 text

ίϯςφϕʔεͰ͸ • ίϯςφ͸͍ͭམͪͯ΋ྑ͍Α͏ʹઃܭ͢Δ • K8s͸ίϯςφ͕མͪͨΒࣗಈతʹ৽ͨͳίϯςφΛ࡞੒ • ઃఆ͸͢΂ͯίʔυԽ • ঢ়ଶΛίϯςφ֎෦ʹ௥͍΍Δʢϛυϧ΢ΣΞɺαΠυΧʔί ϯςφʣ

Slide 26

Slide 26 text

͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

Slide 27

Slide 27 text

ΦϨΦϨϑϨʔϜϫʔΫ • 20೥΋ͷͷϑϨʔϜϫʔΫ • ։ൃ౰ॳʢ20೥Ҏ্લʣͱͯ͠͸ଥ౰ͳબ୒ • DB઀ଓͳͲ͕ύοέʔδલఏͰॻ͔Ε͍ͯΔ • ϑΝΠϧͷಈతಡΈࠐΈͳͲɺՄಡੑʹ͸೉͋Γ

Slide 28

Slide 28 text

is_forest() ஍ࠈ • ύοέʔδ൛͔ݱΫϥ΢υ൛ʢForestʣ͔ͷݟ෼͚͸ɺ 
 ઃఆϑΝΠϧͷ஋Λࢀর͍ͯ͠Δ • Ϋϥ΢υ؀ڥԼΛௐ΂Δϝιουɺ 
 if(is_forest()) ͕਺ඦՕॴʹॻ͔Ε͍ͯΔ if (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ }

Slide 29

Slide 29 text

is_forest() ஍ࠈ • ύοέʔδ൛͔ݱΫϥ΢υ൛ʢForestʣ͔ͷݟ෼͚͸ɺ 
 ઃఆϑΝΠϧͷ஋Λࢀর͍ͯ͠Δ • Ϋϥ΢υ؀ڥԼΛௐ΂Δϝιουɺ 
 if(is_forest()) ͕਺ඦՕॴʹॻ͔Ε͍ͯΔ if (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } ͜͜ʹJT@OFDP Λ࡞ͬͯ଍͍ͯ͘͠ͷ͸ݱ࣮తͰͳ͍

Slide 30

Slide 30 text

΋ͬͯͯΑ͔ͬͨDIίϯςφ • ͜͜਺೥ͷվળʹΑΓDIίϯςφ͕ಋೖʂʂ • ΦϨΦϨϑϨʔϜϫʔΫͳͷͰɺcomposerͰphp-diΛಋೖ • ৽ج൫(Neco)Ͱ͋Δ͔Ͳ͏͔ΛݟΔͷ͸DIίϯςφͷొ࿥෦෼ʹӅṭ • ͍ͭͰʹύοέʔδ൛͔ݱج൫(Forest)͔΋ 
 DIίϯςφͰ֬ೝ͢ΔΑ͏ʹϦϑΝΫλ https://speakerdeck.com/ynkt/sok-gai-shan-shi-bai-karaxue-bu-regasipurodakutonili-tixiang-kautimuzuo-ri?slide=23

Slide 31

Slide 31 text

΍ͬͯͯΑ͔ͬͨࣗಈςετ • ͜͜਺೥ͷվળͰϢχοτςετͱE2Eςετͷ੔උ͕ਐΜͩ • ج൫෦෼ʹखΛՃ͑ͨͱ͖ͷӨڹൣғ͸Ͱ͔͍͕ɺ 
 Ͳ͔͜ͷςετͰ͸མͪΔ͔Βٯʹେৎ෉ͩΖ͏ɺͱ͍͏҆৺ײ • ·ͩ·ͩ଍Γ͍ͯͳ͍͕ɺ͕Μ͹ͬͯ࡞͍͔͍ͬͯͨ͸͋ͬͨ

Slide 32

Slide 32 text

Ͳ͏ͤϑϨʔϜϫʔΫ෦෼ʹ৮ΔͳΒ • ϑϨʔϜϫʔΫ෦෼͸Մಡੑʹ೉͋Γ • ίʔυΛมߋ͢Δػձ͸গͳ͍😇 • ίʔυΛಡΉػձ͸ଟ͍😩 • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦෼ͷ 
 ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ

Slide 33

Slide 33 text

Ͳ͏ͤϑϨʔϜϫʔΫ෦෼ʹ৮ΔͳΒ • ϑϨʔϜϫʔΫ෦෼͸Մಡੑʹ೉͋Γ • ίʔυΛมߋ͢Δػձ͸গͳ͍😇 • ίʔυΛಡΉػձ͸ଟ͍😩 • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦෼ͷ 
 ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ νʔϜͰ߹ҙΛऔΓͭͭɺۃྗϦϑΝΫλΛਐΊ͍ͯΔͧʂ

Slide 34

Slide 34 text

ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯ͜ΕΔ͔ • ͜͜਺೥ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ 
 ਐḿ͕ग़͠΍͘͢ͳ͍ͬͯ͸͍Δ • ͱ͸͍͑खΛग़͠ʹ͍͘ͱ͜Ζ͸ଟ͍ • ͦ͏͍͏ͱ͜Ζ͸ੵۃతʹϦϑΝΫλ͍ͯ͘͠😤

Slide 35

Slide 35 text

ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯ͜ΕΔ͔ • ͜͜਺೥ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ 
 ਐḿ͕ग़͠΍͘͢ͳ͍ͬͯ͸͍Δ • ͱ͸͍͑खΛग़͠ʹ͍͘ͱ͜Ζ͸ଟ͍ • ͦ͏͍͏ͱ͜Ζ͸ੵۃతʹϦϑΝΫλ͍ͯ͘͠😤

Slide 36

Slide 36 text

ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯ͜ΕΔ͔ • ͜͜਺೥ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ 
 ਐḿ͕ग़͠΍͘͢ͳ͍ͬͯ͸͍Δ • ͱ͸͍͑खΛग़͠ʹ͍͘ͱ͜Ζ͸ଟ͍ • ͦ͏͍͏ͱ͜Ζ͸ੵۃతʹϦϑΝΫλ͍ͯ͘͠😤 ෛ࠴ฦࡁͱͷόϥϯε͸೉͍͠ɻɻɻ😇

Slide 37

Slide 37 text

͕͜͜େม৽Ϋϥ΢υج൫ʢNecoʣҠߦ • ίϯςφ͸͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͸͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥ஌ࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ

Slide 38

Slide 38 text

Πϯϑϥ஌ࣝ0͔ΒͷνʔϜ࡞Γ • Garoon։ൃνʔϜ͸͍··Ͱྑ͘΋ѱ͘΋ɺ 
 ΠϯϑϥपΓΛؾʹͤͣ։ൃΛਐΊΒΕ͍ͯͨ • ΞϓϦέʔγϣϯϨΠϠͱΠϯϑϥϨΠϠ͕ผΕ͍ͯͨ • ίϯςφʁK8sʁͳʹͦΕ͓͍͍͠ͷʁ

Slide 39

Slide 39 text

ΤΩεύʔτνʔϜͷڠྗ • ੜ࢈ੑ޲্νʔϜϝϯόʔʹ୹ظతʹJoin • Docker, CIͷΤΩεύʔτ • ίϯςφԽͷ஌ݟΛνʔϜʹ 
 ڞ༗ͯ͠΋Β͏ • खͷपΓʹ͍͘CIͷ੔උ΋ਐΊͯ΋Β͏ https://blog.cybozu.io/entry/2020/08/31/080000

Slide 40

Slide 40 text

Ϟϒ • ࡞ۀ͸جຊϞϒ • ϞϒͷதͰνʔϜͷ஌ݟΛڞ༗͍ͯ͘͠ • ΤΩεύʔτʹ΋Ϟϒʹೖͬͯ΋Β͏

Slide 41

Slide 41 text

෼ใ • ෼ใʹٙ໰Λॻ͖ࠐΉͱ 
 ӡ༻νʔϜ΍NecoνʔϜ͔Βճ౴͕ಧ͘

Slide 42

Slide 42 text

νʔϜͰͷษڧձ • ӡ༻ͷجૅ஌ࣝΛνʔϜͰ͚ͭΔ • DevOpsϋϯυϒοΫͷྠߨ

Slide 43

Slide 43 text

ΠϯϑϥͰֶͿ͜ͱ͸ଟ͍ • ΤΩεύʔτνʔϜʹϞϒʹೖͬͯ΋Β͏ • ٙ໰Λ෼ใʹॻ͘ͱ౴͑ͯ͘ΕΔ • ࣭໰ശ΋͋Δ • ྠಡ΋΍͍͖ͬͯ