Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on ...
Search
Yuichi Sugiyama
PRO
October 12, 2022
Technology
0
570
20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on Kubernetes after talk
サイボウズのPHP Conference 2022の後日談イベントの発表資料です
Yuichi Sugiyama
PRO
October 12, 2022
Tweet
Share
More Decks by Yuichi Sugiyama
See All by Yuichi Sugiyama
サイボウズ と Garoon と The PHP Foundation と 私 / Cybozu and Garoon and The PHP Foundation and me
oogfranz
PRO
1
530
可能な限り確実にmkdirを成功させるには / Make mkdir
oogfranz
PRO
0
540
サイボウズ #Garoon 開発チームの 「 完成度低いの歓迎LT大会 」 PHPerKaigi出張版 / Low quality LT in PHPerKaigi 2023
oogfranz
PRO
0
560
20年ものの巨大プロダクトをKubernetesに移行している話/Garoon on Kubernetes
oogfranz
PRO
0
450
PHPアプリケーションだってモニタリングしたい / Monitoring PHP application
oogfranz
PRO
1
630
効果的な静的解析の CI導入パターンを求めて / Great static analysis with CI
oogfranz
PRO
3
3.7k
Dev-meets-Ops
oogfranz
PRO
1
1k
GitHub力の低い僕でも、 OSSコントリビュートできたワケ / GitHub Power
oogfranz
PRO
1
610
静的解析の育て方 / How to make your static analysis strong
oogfranz
PRO
3
2.9k
Other Decks in Technology
See All in Technology
Nx × AI によるモノレポ活用 〜コードジェネレーター編〜
puku0x
0
570
마라톤 끝의 단거리 스퍼트: 2025년의 AI
inureyes
PRO
1
750
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
27
13k
MCP認可の現在地と自律型エージェント対応に向けた課題 / MCP Authorization Today and Challenges to Support Autonomous Agents
yokawasa
5
2.3k
2時間で300+テーブルをデータ基盤に連携するためのAI活用 / FukuokaDataEngineer
sansan_randd
0
150
Rubyの国のPerlMonger
anatofuz
3
740
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
140
Bet "Bet AI" - Accelerating Our AI Journey #BetAIDay
layerx
PRO
4
1.7k
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
160
生成AIによるソフトウェア開発の収束地点 - Hack Fes 2025
vaaaaanquish
29
13k
家族の思い出を形にする 〜 1秒動画の生成を支えるインフラアーキテクチャ
ojima_h
3
1.1k
形式手法特論:位相空間としての並行プログラミング #kernelvm / Kernel VM Study Tokyo 18th
ytaka23
3
1.3k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
347
40k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Typedesign – Prime Four
hannesfritz
42
2.7k
A Modern Web Designer's Workflow
chriscoyier
695
190k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
RailsConf 2023
tenderlove
30
1.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Designing for Performance
lara
610
69k
Visualization
eitanlees
146
16k
Designing Experiences People Love
moore
142
24k
Transcript
20ͷͷڊେϓϩμΫτΛ KubernetesʹҠߦ͍ͯ͠Δ αΠϘζגࣜձࣾ Garoon։ൃ ਿࢁ ༞Ұ PHP Conference 2022 ޙஊ
#phpcon #phpcon2022
Whoami • ਿࢁ ༞Ұ @oogFranz • αΠϘζ8ΤϯδχΞ • େاۀ͚άϧʔϓΣΞGaroon(Ψϧʔϯ) ࡞ͬͯΔ
• ෳۀδϟζϛϡʔδγϟϯ@MASHݭָஂ
αΠϘζ Garoon • ։ൃ20ʂ • େاۀ͚ͷάϧʔϓΣΞ • PHPͱMySQLͰಈ͘ • ύοέʔδ൛ͱΫϥυ൛͕͋Δ
αΠϘζ Garoon • ։ൃ20ʂ • େاۀ͚ͷάϧʔϓΣΞ • PHPͱMySQLͰಈ͘ • ύοέʔδ൛ͱΫϥυ൛͕͋Δ
ݱΫϥυΠϯϑϥج൫ʢForestʣ • 2011ʹαʔϏε։࢝ • ࣗࣾσʔληϯλʔ • 10ఔͷVMΛ1ηοτʹͯ͠ߏ ʢApplication, DB,
ϑΝΠϧαʔό…ʣ • ߏஙʹܞΘͬͨ̋͞Μͷ໊લ͔ΒForestͱݺΕΔ
ݱΫϥυΠϯϑϥج൫ʢForestʣ Forest ʹଟ༷ͳׂΛ࣋ͬͨཧɾԾαʔόʔ܈ͱɺ ͦΕΒΛཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ ͦͷෳࡶ͔͞Β໎͍ͷͷΑ͏ʹײ͡Δ͜ͱ͋Δ͔͠Ε·ͤΜɻ ͔͠͠ɺਖ਼͍ࣝ͠ΛಘͯɺͷਤϧʔϧΛཧղ͢Εɺ
๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ “ αΠϘζࣾ༻ޠࣙయ BozupediaΑΓ
ݱΫϥυΠϯϑϥج൫ʢForestʣ Forest ʹଟ༷ͳׂΛ࣋ͬͨཧɾԾαʔόʔ܈ͱɺ ͦΕΒΛཧ͢ΔίϚϯυϥΠϯπʔϧ͕ଘࡏ͠ɺ ͦͷෳࡶ͔͞Β໎͍ͷͷΑ͏ʹײ͡Δ͜ͱ͋Δ͔͠Ε·ͤΜɻ ͔͠͠ɺਖ਼͍ࣝ͠ΛಘͯɺͷਤϧʔϧΛཧղ͢Εɺ
๛͔ͳՄೳੑΛ͍࣋ͬͯΔ͜ͱʹؾͮ͘͜ͱͰ͠ΐ͏ɻ “ αΠϘζࣾ༻ޠࣙయ BozupediaΑΓ Ҏ্ͷ'PSFTUͷʹΑΓɺ ͞·͟·ͳ͕ൃੜ͍ͯ͠Δ
ݱΫϥυΠϯϑϥج൫ʢForestʣͷ՝ εέʔϥϏϦςΟ͕ ͍ ϝϯςφϯεੑ͕ ͍ ϝϯςφϯεͷ μϯλΠϜ͕͍ ։ൃͱӡ༻ͷؒʹน αʔϏεͷߏมߋ͕
ࠔ
ΫϥυΠϯϑϥج൫৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟϝϯςφϏϦςΟͷ͔Βελʔτ • VMϕʔεͷߏ͔Βίϯςφϕʔεͷߏʹ৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ2018։࢝ɻ2021ʹҰ୴ྃʂ
• https://blog.cybozu.io/entry/ever-lasting-neco
ΫϥυΠϯϑϥج൫৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟϝϯςφϏϦςΟͷ͔Βελʔτ • VMϕʔεͷߏ͔Βίϯςφϕʔεͷߏʹ৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ2018։࢝ɻ2021ʹҰ୴ྃʂ
• https://blog.cybozu.io/entry/ever-lasting-neco (BSPPOͷҠߦ͕ࠓ͔Βελʔτʂ
ΫϥυΠϯϑϥج൫৽ϓϩδΣΫτ Neco • εέʔϥϏϦςΟϝϯςφϏϦςΟͷ͔Βελʔτ • VMϕʔεͷߏ͔Βίϯςφϕʔεͷߏʹ৽ • Kubernetes(K8s)ΛίΞٕज़ʹਾ͍͑ͯΔ • ج൫ଆͷ։ൃ2018։࢝ɻ2021ʹҰ୴ྃʂ
• https://blog.cybozu.io/entry/ever-lasting-neco (BSPPOͷҠߦ͕ࠓ͔Βελʔτʂ ྃඪʂ
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
Garoon Pods ίϯςφ͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ΞΫηεࢄ
Garoon Pods ίϯςφ͙͢ࢮ͵ʂ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ❌ ❌ ͍ͣΕ͔ͷίϯςφ 1PEʹ͕͋ͬͨΒ
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Λ࡞͢Δ
VMϕʔεͷ • VMجຊతʹམͱͤͳ͍ʢԽ͍ͯ͠Δ͕ʣ • ͕͋ͬͨ࣌ʹVMΛ1Ճͯ͠ɺɺɺͱ͍͏ରॲࠔ • VMͷઃఆ10Ҏ্ͷΫϥυӡ༻ʹ͍ෳࡶʹ • ӡ༻ଆͷઃఆΞϓϦέʔγϣϯʢGaroonʣଆͷઃఆෳࡶ
ίϯςφ͙͢ࢮ͵ʂ • ίϯςφͰ͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ ৽͍͠ͷΛ࡞Δɻ • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞτ͕࣮ݱՄೳ • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ
ίϯςφ͕͍ͭࢮΜͰྑ͍લఏͰઃܭ͠Α͏ɺ ͱݴ͏͓ɻ
ίϯςφ͙͢ࢮ͵ʂ • ίϯςφͰ͕ى͖ͨΒ͙͢ʹམͱͯ͠ɺ ৽͍͠ͷΛ࡞Δɻ • ͜ΕʹΑΓߴՄ༻ੑͱεέʔϧΞτ͕࣮ݱՄೳ • ࣮ࡍʹίϯςφ͕੬͙ͯ͘͢ࢮ͵ɺͱ͍͏ΑΓ
ίϯςφ͕͍ͭࢮΜͰྑ͍લఏͰઃܭ͠Α͏ɺ ͱݴ͏͓ɻ ύοέʔδͰ࢝·ͬͨ(BSPPOʹͦͷલఏ͕ͳ͍
Garoon Pods ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ϑΝΠϧΞοϓϩʔυ ϩάϑΝΠϧ Ωϟογϡ
Garoon Pods ୯ʹίϯςφԽ͢Δͱɺίϯςφ͕ঢ়ଶΛ࣋ͭ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS ϑΝΠϧΞοϓϩʔυ ϩάϑΝΠϧ Ωϟογϡ ❌ ❌ 1PE͕ෆ༻ҙʹམͪΔͱɺಓ࿈ΕͰ͍Ζ͍Ζফ͑ͯ͠·͏ ❌ ❌
Garoon Pods ղܾࡦ1ɿঢ়ଶΛ֎෦αʔϏεʹ͓͘ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS /HJOY
$POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS KVS ϑΝΠϧετϨʔδ ϩάαʔϏε
Garoon Pods ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS -PHಡΈग़͠ -PHಡΈग़͠ -PHಡΈग़͠ ϩάج൫αʔϏε Volumeʹॻ͖ग़͢
Garoon Pods ղܾࡦ2ɿϩάϑΝΠϧΛαΠυΧʔͰٵ͍ग़͢ Garoon αʔϏε "1 $POUBJOFS /HJOY $POUBJOFS
/HJOY $POUBJOFS "1 $POUBJOFS /HJOY $POUBJOFS "1 $POUBJOFS -PHಡΈग़͠ -PHಡΈग़͠ -PHಡΈग़͠ ϩάج൫αʔϏε Volumeʹॻ͖ग़͢ ͜Ε͔Βؤுͬͯ࡞Γ·͢ɻɻɻ😇
ίϯςφϕʔεͰ • ίϯςφ͍ͭམͪͯྑ͍Α͏ʹઃܭ͢Δ • K8sίϯςφ͕མͪͨΒࣗಈతʹ৽ͨͳίϯςφΛ࡞ • ઃఆͯ͢ίʔυԽ • ঢ়ଶΛίϯςφ֎෦ʹ͍ΔʢϛυϧΣΞɺαΠυΧʔί ϯςφʣ
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
ΦϨΦϨϑϨʔϜϫʔΫ • 20ͷͷϑϨʔϜϫʔΫ • ։ൃॳʢ20Ҏ্લʣͱͯ͠ଥͳબ • DBଓͳͲ͕ύοέʔδલఏͰॻ͔Ε͍ͯΔ • ϑΝΠϧͷಈతಡΈࠐΈͳͲɺՄಡੑʹ͋Γ
is_forest() ࠈ • ύοέʔδ൛͔ݱΫϥυ൛ʢForestʣ͔ͷݟ͚ɺ ઃఆϑΝΠϧͷΛࢀর͍ͯ͠Δ • ΫϥυڥԼΛௐΔϝιουɺ if(is_forest())
͕ඦՕॴʹॻ͔Ε͍ͯΔ if (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ }
is_forest() ࠈ • ύοέʔδ൛͔ݱΫϥυ൛ʢForestʣ͔ͷݟ͚ɺ ઃఆϑΝΠϧͷΛࢀর͍ͯ͠Δ • ΫϥυڥԼΛௐΔϝιουɺ if(is_forest())
͕ඦՕॴʹॻ͔Ε͍ͯΔ if (is_forest()) { $validate = new ValidateFileIdentifierOnForest($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } else { $validate = new ValidateFileIdentifierOnpremise($id); … //͜͜ʹԿेߦ͔͕ͭͮ͘ } ͜͜ʹJT@OFDP Λ࡞͍ͬͯͯ͘͠ͷݱ࣮తͰͳ͍
ͬͯͯΑ͔ͬͨ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
ͬͯͯΑ͔ͬͨࣗಈςετ • ͜͜ͷվળͰϢχοτςετͱE2Eςετͷඋ͕ਐΜͩ • ج൫෦ʹखΛՃ͑ͨͱ͖ͷӨڹൣғͰ͔͍͕ɺ Ͳ͔͜ͷςετͰམͪΔ͔ΒٯʹେৎͩΖ͏ɺͱ͍͏҆৺ײ • ·ͩ·ͩΓ͍ͯͳ͍͕ɺ͕Μͬͯ࡞͍͔͍ͬͯͨ͋ͬͨ
Ͳ͏ͤϑϨʔϜϫʔΫ෦ʹ৮ΔͳΒ • ϑϨʔϜϫʔΫ෦Մಡੑʹ͋Γ • ίʔυΛมߋ͢Δػձগͳ͍😇 • ίʔυΛಡΉػձଟ͍😩 • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦ͷ
ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ
Ͳ͏ͤϑϨʔϜϫʔΫ෦ʹ৮ΔͳΒ • ϑϨʔϜϫʔΫ෦Մಡੑʹ͋Γ • ίʔυΛมߋ͢Δػձগͳ͍😇 • ίʔυΛಡΉػձଟ͍😩 • खΛՃ͑ʹ͔ͬͨ͘ϑϨʔϜϫʔΫ෦ͷ
ϦϑΝΫλɾϦϥΠτΛਐΊΔ͖͔͚ͬʹ νʔϜͰ߹ҙΛऔΓͭͭɺۃྗϦϑΝΫλΛਐΊ͍ͯΔͧʂ
ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯ͜ΕΔ͔ • ͜͜ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ ਐḿ͕ग़͘͢͠ͳ͍͍ͬͯΔ • ͱ͍͑खΛग़͠ʹ͍͘ͱ͜Ζଟ͍ • ͦ͏͍͏ͱ͜ΖੵۃతʹϦϑΝΫλ͍ͯ͘͠😤
ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯ͜ΕΔ͔ • ͜͜ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ ਐḿ͕ग़͘͢͠ͳ͍͍ͬͯΔ • ͱ͍͑खΛग़͠ʹ͍͘ͱ͜Ζଟ͍ • ͦ͏͍͏ͱ͜ΖੵۃతʹϦϑΝΫλ͍ͯ͘͠😤
ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯ͜ΕΔ͔ • ͜͜ͷվળʢDIίϯςφɾࣗಈςετʣʹΑΓ ਐḿ͕ग़͘͢͠ͳ͍͍ͬͯΔ • ͱ͍͑खΛग़͠ʹ͍͘ͱ͜Ζଟ͍ • ͦ͏͍͏ͱ͜ΖੵۃతʹϦϑΝΫλ͍ͯ͘͠😤
ෛ࠴ฦࡁͱͷόϥϯε͍͠ɻɻɻ😇
͕͜͜େม৽Ϋϥυج൫ʢNecoʣҠߦ • ίϯςφ͙͢ࢮ͵ʂVMϕʔε͔ΒͷϚΠϯυγϑτ • ΦϨΦϨϑϨʔϜϫʔΫ͍ͭͯདྷΕΔ͔ʁ • Πϯϑϥࣝ0͔ΒͷNecoҠߦνʔϜ࡞Γ
Πϯϑϥࣝ0͔ΒͷνʔϜ࡞Γ • Garoon։ൃνʔϜ͍··Ͱྑ͘ѱ͘ɺ ΠϯϑϥपΓΛؾʹͤͣ։ൃΛਐΊΒΕ͍ͯͨ • ΞϓϦέʔγϣϯϨΠϠͱΠϯϑϥϨΠϠ͕ผΕ͍ͯͨ • ίϯςφʁK8sʁͳʹͦΕ͓͍͍͠ͷʁ
ΤΩεύʔτνʔϜͷڠྗ • ੜ࢈ੑ্νʔϜϝϯόʔʹظతʹJoin • Docker, CIͷΤΩεύʔτ • ίϯςφԽͷݟΛνʔϜʹ ڞ༗ͯ͠Β͏
• खͷपΓʹ͍͘CIͷඋਐΊͯΒ͏ https://blog.cybozu.io/entry/2020/08/31/080000
Ϟϒ • ࡞ۀجຊϞϒ • ϞϒͷதͰνʔϜͷݟΛڞ༗͍ͯ͘͠ • ΤΩεύʔτʹϞϒʹೖͬͯΒ͏
ใ • ใʹٙΛॻ͖ࠐΉͱ ӡ༻νʔϜNecoνʔϜ͔Βճ͕ಧ͘
νʔϜͰͷษڧձ • ӡ༻ͷجૅࣝΛνʔϜͰ͚ͭΔ • DevOpsϋϯυϒοΫͷྠߨ
ΠϯϑϥͰֶͿ͜ͱଟ͍ • ΤΩεύʔτνʔϜʹϞϒʹೖͬͯΒ͏ • ٙΛใʹॻ͘ͱ͑ͯ͘ΕΔ • ࣭ശ͋Δ • ྠಡ͍͖ͬͯ