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
590
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
570
可能な限り確実にmkdirを成功させるには / Make mkdir
oogfranz
PRO
0
660
サイボウズ #Garoon 開発チームの 「 完成度低いの歓迎LT大会 」 PHPerKaigi出張版 / Low quality LT in PHPerKaigi 2023
oogfranz
PRO
0
680
20年ものの巨大プロダクトをKubernetesに移行している話/Garoon on Kubernetes
oogfranz
PRO
0
490
PHPアプリケーションだってモニタリングしたい / Monitoring PHP application
oogfranz
PRO
1
650
効果的な静的解析の CI導入パターンを求めて / Great static analysis with CI
oogfranz
PRO
3
3.9k
Dev-meets-Ops
oogfranz
PRO
1
1k
GitHub力の低い僕でも、 OSSコントリビュートできたワケ / GitHub Power
oogfranz
PRO
1
640
静的解析の育て方 / How to make your static analysis strong
oogfranz
PRO
3
3.1k
Other Decks in Technology
See All in Technology
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
190
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
110
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
290
Deno・Bunの標準機能やElysiaJSを使ったWebSocketサーバー実装 / ラーメン屋を貸し切ってLT会! IoTLT 2026新年会
you
PRO
0
260
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
240
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
3
1.1k
AI時代、1年目エンジニアの悩み
jin4
1
160
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
550
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
420
20260129_CB_Kansai
takuyay0ne
1
270
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
130
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
110
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
130
How to build a perfect <img>
jonoalderson
1
4.9k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
Agile that works and the tools we love
rasmusluckow
331
21k
The untapped power of vector embeddings
frankvandijk
1
1.6k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
96
For a Future-Friendly Web
brad_frost
182
10k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
55
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
170
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
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ϋϯυϒοΫͷྠߨ
ΠϯϑϥͰֶͿ͜ͱଟ͍ • ΤΩεύʔτνʔϜʹϞϒʹೖͬͯΒ͏ • ٙΛใʹॻ͘ͱ͑ͯ͘ΕΔ • ࣭ശ͋Δ • ྠಡ͍͖ͬͯ