Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kubefork - development experience like owning your own cluster

Takamichi Omori
November 21, 2022
360

kubefork - development experience like owning your own cluster

Cloud Native Days Tokyo 2022
movie: https://event.cloudnativedays.jp/cndt2022/talks/1590

Takamichi Omori

November 21, 2022
Tweet

Transcript

  1. ©2021 Wantedly, Inc. kubefork ࣗ෼ઐ༻ͷΫϥελΛॴ༗͍ͯ͠ΔΑ͏ͳ։ൃମݧ CloudNative Days Tokyo 2022 Nov

    21, 2022 - Takamichi Omori 1
  2. ©2022 Wantedly, Inc. *BN 2 Takamichi Omori @onsd_ Engineer at

    DX Squad Love Kubernetes, Go, etc. Wantedly, Inc.
  3. ©2022 Wantedly, Inc. %94RVBEͱ͸ʁ %FWFMPQFSF9QFSJFODF4RVBE ٕज़ج൫νʔϜͱ঺հ͞ΕΔ͜ͱ΋ଟ͍Ͱ͢ ະདྷͷ։ൃମݧΛͭ͘Δ ։ൃऀͷੜ࢈ੑΛ޲্ͤ͞ΔͨΊʹ͸ԿͰ΋΍͍ͬͯ͘νʔϜ ৽͍͠.JDSPTFSWJDFͷ։ൃମݧ ෳࡶͳ.JDSPTFSWJDFͰ΋։ൃ͕؆୯ʹߦ͑ΔΑ͏ͳ࢓૊Έ࡞Γ

    
  4. ©2022 Wantedly, Inc. ࿩͢͜ͱ LVCFGPSL ࣗ෼ઐ༻ͷΫϥελΛॴ༗͍ͯ͠ΔΑ͏ͳ։ൃମݧ LVCFGPSLͱ͸ʁ LVCFGPSLͷ࢓૊Έ LVCFGPSLͷ۩ମతͳ࣮૷ LVCFGPSLΛࢧ͑ΔDVTUPNDPOUSPMMFS

    
 LVCFGPSLͷσϞ LVCFGPSLͷͳΓͨͪ LVCFGPSLͷ͔͍ͭΈͪ 
  5. ©2022 Wantedly, Inc. Kubefork ͱ͸ ࣗ෼ઐ༻ͷΫϥελΛ͍࣋ͬͯΔΑ͏ͳମݧ Ұͭͷ։ൃ༻Ϋϥελ͔ΒԾ૝తͳΫϥελΛ࡞Δ࢓૊Έ Copy on Write

    ΫϥελΛίϐʔ͢Δͷ͸ίετ͕͔͔Δ 
 มߋ͍ͨ͠Օॴ͚ͩมߋ͠ɺ ڞ༗Ͱ͖ΔϦιʔε͸ڞ༗͢Δ ΞΫηε͕෼཭͞Ε͍ͯΔͷͰ 
 ଞͷ։ൃऀʹ໎࿭͕͔͔Βͳ͍ ߴ଎ มߋՕॴ͕࠷খݶ ؀ڥʹΞΫηεͰ͖Δ·Ͱ͕ߴ଎ 5
  6. ©2021 Wantedly, Inc. Photo by Jay Heike on Unsplash LVCFGPSLͷͳΓͨͪ

    6
  7. ©2022 Wantedly, Inc. 7 8BOUFEMZͱϚΠΫϩαʔϏε ϚΠΫϩαʔϏε 
 ΞʔΩςΫνϟ લޙͷίϯϙʔωϯτ ೥ʹLVCFSFOFUFTຊ൪ಋೖ

    https://docs.wantedly.dev/introduction/technical-overview ೥ʹ&,4Ҡߦ׬ྃ
  8. ©2022 Wantedly, Inc. ϚΠΫϩαʔϏε։ൃͰେ੾ͳͭͷ͜ͱ มߋΛૉૣ͘ࢼͤΔ ΋ͷͮ͘Γશൠʹ͓͍ͯେࣄ 
 มߋ͕ྑ͔ͬͨɾѱ͔ͬͨ͜ͱͷϑΟʔυόοΫϧʔϓ ଞਓͷมߋͷӨڹΛड͚ͳ͍ ૝ఆͱҟͳΔϨεϙϯεͷݪҼ͸୭ʁ

    ݪҼ͕ࣗ෼Ҏ֎ʹ͋ͬͨ৔߹ɺ֬ೝ͕೉͍͠ ґଘؔ܎Λҙࣝ͢Δඞཁ͕ͳ͍ ͜ͷαʔϏε͸Կʹґଘ͍ͯ͠Δʁ ։ൃ͢ΔͨΊʹ͸ԿʹΞΫηεͰ͖ΔΑ͏ʹ͢Δඞཁ͕͋Δʁ αʔϏεɾػೳ͝ͱʹґଘؔ܎Λ͓֮͑ͯ͘ͷ͸େม 
  9. ©2022 Wantedly, Inc. ΑΓΑ͍։ൃํ๏ େ੾ͳ͜ͱΛຬͨ͢։ൃํ๏͸͋Δʁ wมߋΛૉૣ͘ࢼͤΔ wଞਓͷมߋͷӨڹΛड͚ͳ͍ wґଘؔ܎Λҙࣝ͠ͳ͍  ϩʔΧϧͰ։ൃ͢Δ

     εςʔδϯά؀ڥʹσϓϩΠ͢Δ  5FMFQSFTFODFΛ࢖͏ ϚΠΫϩαʔϏε։ൃͷख๏Λൺֱ  8BOUFEMZͰߦΘΕ͍ͯͨ։ൃख๏Λൺֱ
  10. ©2022 Wantedly, Inc. طଘͷख๏ʢ̍ʣ ϩʔΧϧͰ։ൃ͢Δ ˓มߋΛૉૣ͘ࢼͤΔ %PDLFSCVJMEΛ଴ͨͳͯ͘Α͍ ˓ଞਓͷมߋͷӨڹΛड͚ͳ͍ खݩͰ։ൃ͍ͯ͠ΔͷͰଞਓͷӨڹ͸ड͚ͳ͍ ✕ґଘؔ܎Λҙࣝ͢Δඞཁ͕ͳ͍

    αʔϏεؒͷґଘؔ܎Λ஌Δඞཁ͕͋Δ ։ൃ؀ڥͷϝϯςφϯείετ͕͔͔Δ 10
  11. ©2022 Wantedly, Inc. طଘͷख๏ʢ̎ʣ εςʔδϯά؀ڥʹσϓϩΠ͢Δ ˓ґଘؔ܎Λҙࣝ͢Δඞཁ͕ͳ͍ ɹಈ͍͍ͯΔγεςϜͷҰ෦ΛೖΕସ͑Δ͚ͩ 
 ✕มߋΛૉૣ͘ࢼͤΔ ɹ%PDLFSCVJMEΛ଴ͭඞཁ͕͋Δ

    ✕ଞਓͷมߋͷӨڹΛड͚ͳ͍ ɹڞ༻ͷ؀ڥͳͷͰɺଞͷ։ൃऀͷӨڹΛड͚Δ 11
  12. ©2022 Wantedly, Inc. طଘͷख๏ʢ̏ʣ 5FMFQSFTFODF ৄ͘͠͸IUUQTXXXUFMFQSFTFODFJP ˓มߋΛૉૣ͘ࢼͤΔ ɹEPDLFSCVJMEΛ଴ͭඞཁ͕ͳ͍ ˓ґଘؔ܎Λҙࣝ͢Δඞཁ͕ͳ͍ ɹಈ͍͍ͯΔγεςϜͷதͷϦΫΤετ͕खݩʹඈΜͰ͘Δ

    
 ✕ଞਓͷมߋͷӨڹΛड͚ͳ͍ ɹڞ༻ͷΫϥελͰ࣮ߦ͢ΔͱଞਓͷϦΫΤετ΋खݩʹདྷͯ͠·͏ $/$'4BOECPY1SPKFDU બ୒ͨ͠TFSWJDF΁ͷϦΫΤετΛ 
 ϩʔΧϧʹྲྀ͢͜ͱ͕Ͱ͖Δπʔϧ 12
  13. ©2022 Wantedly, Inc. ఺Λຬͨ͢։ൃख๏ *TUJP UFMFQSFTFODF *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϦΫΤετ͚ͩΛखݩʹϧʔςΟϯά ଞͷϦΫΤετ͸ڞ༻ͷ؀ڥΛ௨Δ 


    
 LVCFGPSLͷߟ͑ํ͸͔͜͜Βग़ൃ ˓มߋΛૉૣ͘ࢼͤΔ %PDLFSCVJMEΛ଴ͨͳͯ͘Α͍ ˓ଞਓͷมߋͷӨڹΛड͚ͳ͍ खݩͰ։ൃ͍ͯ͠ΔͷͰଞਓͷӨڹ͸ड͚ͳ͍ ˓ґଘؔ܎Λҙࣝ͢Δඞཁ͕ͳ͍ ಈ͍͍ͯΔγεςϜͷதͷϦΫΤετ͕खݩʹඈΜͰ͘Δ ߋʹৄ͘͠͸ͪ͜ΒɿIUUQTTQFBLFSEFDLDPNNPSVYJTUJPJOUFHSBUFEUFMFQSFTFODF 13
  14. ©2022 Wantedly, Inc. *TUJP UFMFQSFTFODF͔ΒͷਐԽ HBUFXBZϨΠϠͷ࣮૷ TPNFEFWXBOUFEMZDPN GPSLFEBTPNFEFWXBOUFEMZDPN (BUFXBZ ࣗ෼ͷมߋʹϧʔςΟϯά͢ΔͨΊʹ

    ಛผͳIFBEFS͕ඞཁͩͬͨ 
 (BUFXBZϨΠϠͷಋೖʹΑΓIFBEFSͳ͠Ͱ ࣗ෼ͷมߋʹ౸ୡͰ͖ΔΑ͏ʹ 14 ࣮Ϋϥελ͔Β࡞੒͞ΕΔԾ૝ΫϥελΛࢦ͢ 'PSLFE"͕7JSUVBM$MVTUFSʹ֘౰ 
 ϔομΛ࢖ͬͯϧʔςΟϯάΛૢ࡞͢Δମݧ͔ΒɺΫϥελΛίϐʔ͢ΔΑ͏ͳମݧʹ 7JSUVBM$MVTUFS
  15. ©2022 Wantedly, Inc. LVCFGPSL LVCFGPSLͷ׬੒ ϦΫΤετϧʔςΟϯάͳͲɺ 
 7JSUVBM$MVTUFSΛ࣮ݱ͢ΔͨΊʹ͸ 
 ଟ͘ͷϦιʔε͕ඞཁ

    
 ͦ͜ͰϦιʔεΛҰׅͯ͠؅ཧ͢Δ 
 ΧελϜίϯτϩʔϥʔΛ࣮૷ 
 GPSLϦιʔεΛBQQMZ͢Δ͜ͱͰ 
 ඞཁʹͳΔϦιʔεΛશͯ࡞੒Ͱ͖Δ 
 Α͏ʹ ͜͜·ͰͰݱࡏͷ࢓૊Έ͕׬੒ 
 LVCFGPSLͱݺͿΑ͏ʹ 15
  16. ©2022 Wantedly, Inc. 5FSNJOPMPHZ 7JSUVBM$MVTUFS Ծ૝తͳLVCFSFOUFTΫϥελ 'PSL*EFOUJ fi FS 'PSL͢Δ

    7JSUVBMDMVTUFSΛ۠ผ͢Δࣝผࢠ TIBSFE͔ΒWJSUVBMDMVTUFSΛ ಛఆͷGPSLJEFOUJ fi FSΛ΋ͱʹ ΞΫηεͰ͖Δ ࡞੒͢Δ͜ͱ 4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ 16
  17. ©2022 Wantedly, Inc. 5FSNJOPMPHZ 7JSUVBM$MVTUFS Ծ૝తͳLVCFSFOUFTΫϥελ 'PSL*EFOUJ fi FS 'PSL͢Δ

    7JSUVBMDMVTUFSΛ۠ผ͢Δࣝผࢠ TIBSFE͔ΒWJSUVBMDMVTUFSΛ ಛఆͷGPSLJEFOUJ fi FSΛ΋ͱʹ ΞΫηεͰ͖Δ ࡞੒͢Δ͜ͱ 4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ 17
  18. ©2022 Wantedly, Inc. 5FSNJOPMPHZ 7JSUVBM$MVTUFS Ծ૝తͳLVCFSFOUFTΫϥελ 'PSL*EFOUJ fi FS 'PSL͢Δ

    7JSUVBMDMVTUFSΛ۠ผ͢Δࣝผࢠ TIBSFE͔ΒWJSUVBMDMVTUFSΛ ಛఆͷGPSLJEFOUJ fi FSΛ΋ͱʹ ΞΫηεͰ͖Δ ࡞੒͢Δ͜ͱ 4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ 18
  19. ©2022 Wantedly, Inc. 5FSNJOPMPHZ 7JSUVBM$MVTUFS Ծ૝తͳLVCFSFOUFTΫϥελ 'PSL*EFOUJ fi FS 'PSL͢Δ

    7JSUVBMDMVTUFSΛ۠ผ͢Δࣝผࢠ TIBSFE͔ΒWJSUVBMDMVTUFSΛ ಛఆͷGPSLJEFOUJ fi FSΛ΋ͱʹ ΞΫηεͰ͖Δ ࡞੒͢Δ͜ͱ 4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ 19
  20. ©2021 Wantedly, Inc. Photo by Deva Darshan on Unsplash LVCFGPSLͷ͔͍ͭΈͪ

    20
  21. ©2022 Wantedly, Inc. ,VCFGPSLͷ͔͍ͭΈͪ Ϣʔεέʔε ౰ॳ૝ఆ͍ͯͨ͠Ϣʔεέʔε wΞϓϦέʔγϣϯ։ൃࢧԉ wखಈςετࢧԉ ೥Ҏ্ͷӡ༻Λܦͯൃݟ͞ΕͨϢʔεέʔε w1VMM3FRVFTU1SFWJFX

    w'FBUVSF fl BHͷͨΊͷ؀ڥੜ੒ 21
  22. ©2022 Wantedly, Inc. *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ 
 
 ಛఆͷϦΫΤετ͚͕ͩϧʔςΟϯά͞ΕΔ 
 4FSWJDF %FQMPZNFOUΛ࡞੒

    4FSWJDFʹUFMFQSFTFODFΛ࣮ߦ͠ Ϋϥελ͔ΒͷϦΫΤετΛखݩʹϧʔςΟϯά ࣾ಺Ͱ͸MPDBMGPSLͱݺ͹Ε͍ͯΔ ૝ఆ͍ͯͨ͠ϢʔεέʔεɿΞϓϦέʔγϣϯ։ൃࢧԉ 22
  23. ©2022 Wantedly, Inc. ૝ఆ͍ͯͨ͠Ϣʔεέʔεɿखಈςετࢧԉ 23 *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ 
 
 ಛఆͷϦΫΤετ͚͕ͩϧʔςΟϯά͞ΕΔ 


    4FSJWJDF %FQMPZNFOUΛ࡞੒ 
 ͜͜Ͱ࡞੒͢Δ%FQMPZNFOU͸ࣗ෼͕มߋͨ͠ 
 *NBHFΛઃఆ͓ͯ͘͠ WJSUVBMDMVTUFS͕࡞੒Ͱ͖Ε͹ ϒϥ΢β͔Βมߋ͕ࢼͤΔ खಈςετɾϨϏϡʔͳͲͷ༻్Ͱར༻ 
 
 ࣾ಺Ͱ͸SFNPUFGPSLͱݺ͹Ε͍ͯΔ
  24. ©2022 Wantedly, Inc. ͪͳΈʹɿࣾ಺ͷ࿩ LVCF LVCFDUMͷϥούʔ ЋͷίϚϯυ Ϋϥελ͝ͱͷΞΫηεΛӅṭͨ͠Γ 7JSUVBMDMVTUFSͷ࡞੒ UFMFQSFTFODF

    ΛશࣗಈͰߦ͏ LVCFDUMʹ͸ͳ͍ศརػೳ͕ར༻Մೳ LVCFGPSL 24 มߋ͕ೖͬͨ7JSUVBM$MVTUFSͷ࡞੒Λ 
 ࣗಈͰߦ͏ LVCFGPSLSFNPUF
  25. ©2022 Wantedly, Inc. ৽͍͠Ϣʔεέʔε: Pull Request Preview 3FWJFX؀ڥͷࣗಈੜ੒ 13࡞੒࣌ʹWJSUVBMDMVTUFSΛࣗಈੜ੒ ੜ੒͞Εͨ63-ʹΞΫηε͢ΔͱࢼͤΔ

    .JDSPTFSWJDFͰ΋1SFWJFX ֎͔Β௚઀౸ୡͰ͖ͳ͍.JDSPTFSWJDF 
 ʹ΋ϧʔςΟϯάՄೳ ੜ੒͞Εͨ63-ʹΞΫηε͢Δ͜ͱͰ 
 Ұ෦͚ͩมߋ͞ΕͨγεςϜΛࢼͤΔ ඇΤϯδχΞʹࢼͯ͠΋Β͏ͱ͖΋ศར 
 ؀ڥߏங͕͍Βͳ͍ TBOECPYͷσʔλΛ͔ͭͬͯࢼͤΔ 25
  26. ©2022 Wantedly, Inc. ৽͍͠Ϣʔεέʔε: Pull Request Preview 3FWJFX؀ڥͷࣗಈੜ੒ 13࡞੒࣌ʹWJSUVBMDMVTUFSΛࣗಈੜ੒ ੜ੒͞Εͨ63-ʹΞΫηε͢ΔͱࢼͤΔ

    .JDSPTFSWJDFͰ΋1SFWJFXͰ͖Δ ֎͔Β௚઀౸ୡͰ͖ͳ͍.JDSPTFSWJDF 
 ʹ΋ϧʔςΟϯάՄೳ ੜ੒͞Εͨ63-ʹΞΫηε͢Δ͜ͱͰ 
 Ұ෦͚ͩมߋ͞ΕͨγεςϜΛࢼͤΔ ඇΤϯδχΞʹࢼͯ͠΋Β͏ͱ͖΋ศར 
 ؀ڥߏங͕͍Βͳ͍ TBOECPYͷσʔλΛ͔ͭͬͯࢼͤΔ 26
  27. ©2022 Wantedly, Inc. Pull Request Preview URL ͷ࢓૊Έ 27 

    ։ൃऀ͕(JU)VCʹมߋΛQVTI  มߋ͝ͱʹ%PDLFSJNBHFΛ࡞੒  %PDLFSJNBHFͷ४උ͕Ͱ͖ͨΒ 
 'PSLϦιʔεΛΫϥελʹ"QQMZ  7JSUVBM$MVTUFSͷ४උ͕Ͱ͖ͨΒ 
 13ʹίϝϯτ  ίϝϯτ͞Εͨ63-ʹΞΫηε
  28. ©2022 Wantedly, Inc. ৽͍͠Ϣʔεέʔε: Feature Flag ͷͨΊͷ؀ڥੜ੒ 'FBUVSF'MBH ΞϓϦέʔγϣϯͷڍಈΛมߋ͢ΔͨΊͷج൫ ୅දతͳྫɿ"#UFTU

    8BOUFEMZͷج൫͸)FBEFSͰ੍ޚՄೳ 
 9GFBUVSF fl BHT\TPNF"#UFTUz"z^ 'PSLJEFOUJ fi FSͱಉ͡Α͏ʹGFBUVSF fl BH΋఻೻͢Δ͜ͱͰ ޙଆͷNJDSPTFSWJDFͷڍಈͰ΋ม͑ΒΕΔ 28 )FBEFSΛ࢖੍ͬͨޚ
  29. ©2022 Wantedly, Inc. ৽͍͠Ϣʔεέʔε: Feature Flag ͷͨΊͷ؀ڥੜ੒ 'FBUVSF'MBH (BUFXBZ ಛఆͷGFBUVSF

    fl BH͕༗ޮʹͳͬͨԾ૝Ϋϥελ͕࡞੒Մೳ TPNFEFWXBOUFEMZDPN TPNFGFBUVSFFOBCMFETPNFEFWXBOUFEMZDPN ྫ  "#UFTUͷಛఆͷWBSJBOUͰදࣔ  ϦϦʔεલͷػೳΛ༗ޮʹ͢Δ  3BJMTͷΞϓϦέʔγϣϯͷBTTFUT 
 ͚ͩखݩͷϦιʔεΛ࢖͏ 29 'FBUVSF fl BHͳΒ৽نͷQPEແ͠Ͱར༻Մೳ
  30. ©2022 Wantedly, Inc. ͜͜·Ͱͷ·ͱΊ ,VCFGPSL wҰͭͷΫϥελ͔ΒԾ૝ΫϥελΛ࡞੒Ͱ͖Δ͘͠Έ wϢʔεέʔε wΞϓϦέʔγϣϯ։ൃࢧԉ wଞͷ։ൃऀʹ໎࿭Λ͔͚ͣʹUFMFQSFTFODFͰ͖Δ wखಈςετࢧԉ

    wखݩʹΞϓϦέʔγϣϯͷಈ࡞؀ڥ͕ͳͯ͘΋มߋΛ࣮ࡍͷϦΫΤετΛ࢖ͬͯࢼͤΔ w1VMM3FRVFTU1SFWJFX wͲΜͳαʔϏεͰ΋৮Γͳ͕ΒࢼͤΔ؀ڥͷࣗಈੜ੒ w'FBUVSF'MBHͷͨΊͷ؀ڥੜ੒ wσόοάʹศརͳ؀ڥ΍ɺ"#ςετͷൺֱͷͨΊͷ؀ڥͷੜ੒ 30
  31. ©2021 Wantedly, Inc. Photo by Kaleidico on Unsplash LVCFGPSLͷৄ͍͠࢓૊Έ 31

  32. ©2022 Wantedly, Inc. ߏ੒ཁૉ Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 32

    Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  33. ©2022 Wantedly, Inc. ߏ੒ཁૉ Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 33

    Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  34. ©2022 Wantedly, Inc. ߏ੒ཁૉ apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: labels:

    fork.k8s.wantedly.com/service: backend name: backend namespace: backend spec: hosts: - backend http: - match: - headers: x-fork-identifier: exact: many-todo-red route: - destination: host: backend-kubefork-many-todo-red - route: - destination: host: backend Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 34 Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  35. ©2022 Wantedly, Inc. ߏ੒ཁૉ apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: labels:

    fork.k8s.wantedly.com/service: backend name: backend namespace: backend spec: hosts: - backend http: - match: - headers: x-fork-identifier: exact: many-todo-red route: - destination: host: backend-kubefork-many-todo-red - route: - destination: host: backend Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 35 Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  36. ©2022 Wantedly, Inc. ߏ੒ཁૉ Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 36

    Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  37. ©2022 Wantedly, Inc. ߏ੒ཁૉ apiVersion: getambassador.io/v2 kind: Mapping metadata: labels:

    fork.k8s.wantedly.com/manager: kubefork-manager name: backend-todo-test-many-todo-red namespace: emissary ownerReferences: spec: allow_upgrade: - websocket ambassador_id: - default add_request_headers: x-fork-identifier: many-todo-red x-forwarded-host: '%REQ(:authority)%' host: many-todo-red.backend.todo.test host_rewrite: backend.backend prefix: / rewrite: "" service: backend.backend timeout_ms: 90000 Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 37 Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  38. ©2022 Wantedly, Inc. ߏ੒ཁૉ apiVersion: getambassador.io/v2 kind: Mapping metadata: labels:

    fork.k8s.wantedly.com/manager: kubefork-manager name: backend-todo-test-many-todo-red namespace: emissary ownerReferences: spec: allow_upgrade: - websocket ambassador_id: - default add_request_headers: x-fork-identifier: many-todo-red x-forwarded-host: '%REQ(:authority)%' host: many-todo-red.backend.todo.test host_rewrite: backend.backend prefix: / rewrite: "" service: backend.backend timeout_ms: 90000 Service Mesh *TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϔομ͕෇͍͍ͯΔϦΫΤετΛ ࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ 38 Gateway "NCBTTBEPSͷIFBEFS෇༩ػೳΛ׆༻ ϗετ໊ͱϔομͷରԠ෇͚Λߦ͏
  39. ©2022 Wantedly, Inc. 7JSUVBMDMVTUFSͷ࡞੒ 7JSUVBM$MVTUFSʹඞཁͳϦιʔε w%FQMPZNFOU w4FSWJDF w7JSUVBM4FSWJDF w.BQQJOH 39

    'PSLϦιʔε ্هͷϦιʔεΛҰׅͯ͠࡞੒͢Δ 'PSLϦιʔεΛBQQMZ͢Δͱ 7JSUVBMDMVTUFS͕࡞੒͞ΕΔମݧ 'PSLϦιʔε͸LVCFGPSLDPOUSPMMFS͕ఏڙɾ؅ཧ͢Δ
  40. ©2022 Wantedly, Inc. 7JSUVBMDMVTUFSͷ࡞੒ apiVersion: fork.k8s.wantedly.com/v1beta1 kind: Fork metadata: generation:

    1 labels: fork.k8s.wantedly.com/identifier: red name: kubefork-red namespace: option spec: deployments: replicas: 1 selector: matchLabels: app: option template: metadata: labels: app: red role: fork spec: containers: - env: - name: FORK_IDENTIFIER value: red image: onsd/todo-option:other name: todo-option resources: {} identifier: red manager: emissary/kubefork-manager services: selector: matchLabels: app: option 7JSUVBM$MVTUFSʹඞཁͳϦιʔε w%FQMPZNFOU w4FSWJDF w7JSUVBM4FSWJDF w.BQQJOH 40 'PSLϦιʔε ্هͷϦιʔεΛҰׅͯ͠࡞੒͢Δ 'PSLϦιʔεΛBQQMZ͢Δͱ 7JSUVBMDMVTUFS͕࡞੒͞ΕΔମݧ 'PSLϦιʔε͸LVCFGPSLDPOUSPMMFS͕ఏڙɾ؅ཧ͢Δ
  41. ©2022 Wantedly, Inc. 7JSUVBMDMVTUFSͷ࡞੒ apiVersion: fork.k8s.wantedly.com/v1beta1 kind: Fork metadata: generation:

    1 labels: fork.k8s.wantedly.com/identifier: red name: kubefork-red namespace: option spec: deployments: replicas: 1 selector: matchLabels: app: option template: metadata: labels: app: red role: fork spec: containers: - env: - name: FORK_IDENTIFIER value: red image: onsd/todo-option:other name: todo-option resources: {} identifier: red manager: emissary/kubefork-manager services: selector: matchLabels: app: option 7JSUVBM$MVTUFSʹඞཁͳϦιʔε w%FQMPZNFOU w4FSWJDF w7JSUVBM4FSWJDF w.BQQJOH 41 'PSLϦιʔε ্هͷϦιʔεΛҰׅͯ͠࡞੒͢Δ 'PSLϦιʔεΛBQQMZ͢Δͱ 7JSUVBMDMVTUFS͕࡞੒͞ΕΔମݧ 'PSLϦιʔε͸LVCFGPSLDPOUSPMMFS͕ఏڙɾ؅ཧ͢Δ
  42. ©2022 Wantedly, Inc. 7JSUVBMDMVTUFSͷ࡞੒ apiVersion: fork.k8s.wantedly.com/v1beta1 kind: Fork metadata: generation:

    1 labels: fork.k8s.wantedly.com/identifier: red name: kubefork-red namespace: option spec: deployments: replicas: 1 selector: matchLabels: app: option template: metadata: labels: app: red role: fork spec: containers: - env: - name: FORK_IDENTIFIER value: red image: onsd/todo-option:other name: todo-option resources: {} identifier: red manager: emissary/kubefork-manager services: selector: matchLabels: app: option 7JSUVBM$MVTUFSʹඞཁͳϦιʔε w%FQMPZNFOU w4FSWJDF w7JSUVBM4FSWJDF w.BQQJOH 42 'PSLϦιʔε ্هͷϦιʔεΛҰׅͯ͠࡞੒͢Δ 'PSLϦιʔεΛBQQMZ͢Δͱ 7JSUVBMDMVTUFS͕࡞੒͞ΕΔମݧ 'PSLϦιʔε͸LVCFGPSLDPOUSPMMFS͕ఏڙɾ؅ཧ͢Δ
  43. ©2022 Wantedly, Inc. 7JSUVBMDMVTUFSͷ࡞੒ apiVersion: fork.k8s.wantedly.com/v1beta1 kind: Fork metadata: generation:

    1 labels: fork.k8s.wantedly.com/identifier: red name: kubefork-red namespace: option spec: deployments: replicas: 1 selector: matchLabels: app: option template: metadata: labels: app: red role: fork spec: containers: - env: - name: FORK_IDENTIFIER value: red image: onsd/todo-option:other name: todo-option resources: {} identifier: red manager: emissary/kubefork-manager services: selector: matchLabels: app: option 7JSUVBM$MVTUFSʹඞཁͳϦιʔε w%FQMPZNFOU w4FSWJDF w7JSUVBM4FSWJDF w.BQQJOH 43 'PSLϦιʔε ্هͷϦιʔεΛҰׅͯ͠࡞੒͢Δ 'PSLϦιʔεΛBQQMZ͢Δͱ 7JSUVBMDMVTUFS͕࡞੒͞ΕΔମݧ 'PSLϦιʔε͸LVCFGPSLDPOUSPMMFS͕ఏڙɾ؅ཧ͢Δ
  44. ©2022 Wantedly, Inc. kubefork ʹؔ࿈͢ΔϦιʔε 44 ਫ৭Ͱғ·Ε͍ͯΔͷ͕WJSUVBMDMVTUFSͷ࡞੒ʹඞཁͳϦιʔε

  45. ©2022 Wantedly, Inc. LVCFGPSLDPOUSPMMFS 
 ͕044ʹͳΓ·ͨ͠ (JU)VCʹͯެ։த 45 https://github.com/wantedly/kubefork-controller

  46. ©2022 Wantedly, Inc. LVCFGPSLDPOUSPMMFSʹؚ·Ε͍ͯΔ΋ͷ $POUPSPMMFSͷ࣮૷ ,VCFGPSLͷ࣮ݱʹඞཁͳ࣮૷શͯ LVCFGPSLͱ͸ʁͱ͍ͬͨͱ͜Ζ͔Βɺ֤छϦιʔεͷઆ໌·Ͱ LVCFGPSLͷυΩϡϝϯτ 46 'PSLϦιʔεΛੜ੒͢ΔͨΊͷ$-*

    LVCFGPSLDUM
  47. ©2022 Wantedly, Inc. σϞ 47 5PEPදࣔαʔϏε ̏ͭͷαʔϏε͔ΒͳΔ  'SPOUFOE 

    #BDLFOE͔ΒUPEPΛऔಘ  #BDLFOE  5PEPͷϦετΛ͍࣋ͬͯΔ  ϦΫΤετ͕དྷΔͱɺ0QUJPO͔Β 
 5PEPͷ৭Λऔಘͯ͠ฦ͢  0QUJPO  5PEPͷ৭Λฦ͢αʔϏε
  48. ©2022 Wantedly, Inc. σϞ 48 7JSUVBM$MVTUFS ඞͣ੺৭Λฦ͢มߋΛPQUJPOͰࢼͨ͢Ίʹ มߋ͕ೖͬͨWJSUVBMDMVTUFSΛ࡞੒͢Δ 
 


    GPSLJEFOUJ fi FS͸SFEʹͨ͠ 
 SFEUPEPUFTUͰΞΫηεՄೳ
  49. ©2022 Wantedly, Inc. σϞ 49 7JSUVBM$MVTUFS ෳ਺ͷมߋ͕ೖͬͨ 
 7JSUVBM$MVTUFS΋࡞੒Մೳ

  50. ©2022 Wantedly, Inc. LVCFGPSLDPOUSPMMFSͷվળҊ (BUFXBZϨΠϠͷࠩ͠ସ͑ʹରԠ ݱঢ়"NCBTTBEPSͱີ݁߹ 
 )PTU໊͝ͱʹϔομΛ෇͚Δػೳ͕͋Ε͹ଞͷHBUFXBZͰ΋͍͍͸ͣ ݱঢ়ϔομ఻ൖ͸ΞϓϦέʔγϣϯͰ࣮૷͢Δඞཁ͕͋Δ 


    ΞϓϦέʔγϣϯͷରԠແ͠Ͱϔομ఻ൖ͕࣮ݱͰ͖ͳ͍͔ʁ )FBEFS1SPQBHBUJPOػೳͷఏڙ 50
  51. ©2022 Wantedly, Inc. ·ͱΊ 51 kubefork ҰͭͷΫϥελ͔ΒԾ૝తͳΫϥελΛ࡞੒ 
 มߋΛͲΜͲΜࢼ͢͜ͱ͕Ͱ͖Δ؀ڥΛ࡞Δ େࣄͳͷ͸࣍ͷ̎ͭ

    wϔομΛ΋ͱʹͨ͠ϦΫΤετϧʔςΟϯά wϗετ໊ͱϔομͷରԠ෇͚ kubefork-controller ΧελϜϦιʔεΛ΋ͱʹԾ૝తͳΫϥελΛ࡞੒ (JU)VCʹͯެ։த
  52. ©2022 Wantedly, Inc. ͋Γ͕ͱ͏͍͟͝·ͨ͠ 52