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
650
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20年ものの巨大プロダクトをKubernetesに移行している話 後日談/Garoon on Kubernetes after talk
サイボウズのPHP Conference 2022の後日談イベントの発表資料です
Yuichi Sugiyama
PRO
October 12, 2022
More Decks by Yuichi Sugiyama
See All by Yuichi Sugiyama
20年以上続く PHP 大規模プロダクトを Kubernetes へ ── クラウド基盤刷新プロジェクトの4年間
oogfranz
PRO
0
450
サイボウズ と Garoon と The PHP Foundation と 私 / Cybozu and Garoon and The PHP Foundation and me
oogfranz
PRO
1
610
可能な限り確実にmkdirを成功させるには / Make mkdir
oogfranz
PRO
0
740
サイボウズ #Garoon 開発チームの 「 完成度低いの歓迎LT大会 」 PHPerKaigi出張版 / Low quality LT in PHPerKaigi 2023
oogfranz
PRO
0
760
20年ものの巨大プロダクトをKubernetesに移行している話/Garoon on Kubernetes
oogfranz
PRO
0
570
PHPアプリケーションだってモニタリングしたい / Monitoring PHP application
oogfranz
PRO
1
680
効果的な静的解析の CI導入パターンを求めて / Great static analysis with CI
oogfranz
PRO
3
4.1k
Dev-meets-Ops
oogfranz
PRO
1
1.1k
GitHub力の低い僕でも、 OSSコントリビュートできたワケ / GitHub Power
oogfranz
PRO
1
670
Other Decks in Technology
See All in Technology
【GCC2026】TrueHDRIを用いたルックデブ環境とライティングテクニック
bandainamcostudios
PRO
0
270
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
510
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
440
NANDでも描画したい!
nichica906
2
540
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
290
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
140
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
830
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.7k
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
300
コーチングの奥義 何もしないテクニック
jinwatanabe
0
150
ホームラボ紹介
y_sera15
0
230
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
1
880
Featured
See All Featured
Fireside Chat
paigeccino
42
4k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Everyday Curiosity
cassininazir
0
290
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
440
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
How to Talk to Developers About Accessibility
jct
2
520
Facilitating Awesome Meetings
lara
57
7.1k
Deep Space Network (abreviated)
tonyrice
0
270
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
390
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ϋϯυϒοΫͷྠߨ
ΠϯϑϥͰֶͿ͜ͱଟ͍ • ΤΩεύʔτνʔϜʹϞϒʹೖͬͯΒ͏ • ٙΛใʹॻ͘ͱ͑ͯ͘ΕΔ • ࣭ശ͋Δ • ྠಡ͍͖ͬͯ