Cloud Native Days Tokyo 2022 movie: https://event.cloudnativedays.jp/cndt2022/talks/1590
©2021 Wantedly, Inc.kubeforkࣗઐ༻ͷΫϥελΛॴ༗͍ͯ͠ΔΑ͏ͳ։ൃମݧCloudNative Days Tokyo 2022Nov 21, 2022 - Takamichi Omori1
View Slide
©2022 Wantedly, Inc.*BN2Takamichi Omori @onsd_Engineer at DX SquadLove Kubernetes, Go, etc.Wantedly, Inc.
©2022 Wantedly, Inc.%94RVBEͱʁ%FWFMPQFSF9QFSJFODF4RVBEٕज़ج൫νʔϜͱհ͞ΕΔ͜ͱଟ͍Ͱ͢ະདྷͷ։ൃମݧΛͭ͘Δ։ൃऀͷੜ࢈ੑΛ্ͤ͞ΔͨΊʹԿͰ͍ͬͯ͘νʔϜ৽͍͠.JDSPTFSWJDFͷ։ൃମݧෳࡶͳ.JDSPTFSWJDFͰ։ൃ͕؆୯ʹߦ͑ΔΑ͏ͳΈ࡞Γ
©2022 Wantedly, Inc.͢͜ͱLVCFGPSLࣗઐ༻ͷΫϥελΛॴ༗͍ͯ͠ΔΑ͏ͳ։ൃମݧLVCFGPSLͱʁLVCFGPSLͷΈLVCFGPSLͷ۩ମతͳ࣮LVCFGPSLΛࢧ͑ΔDVTUPNDPOUSPMMFS LVCFGPSLͷσϞLVCFGPSLͷͳΓͨͪLVCFGPSLͷ͔͍ͭΈͪ
©2022 Wantedly, Inc.Kubefork ͱࣗઐ༻ͷΫϥελΛ͍࣋ͬͯΔΑ͏ͳମݧҰͭͷ։ൃ༻Ϋϥελ͔ΒԾతͳΫϥελΛ࡞ΔΈCopy on WriteΫϥελΛίϐʔ͢Δͷίετ͕͔͔Δ มߋ͍ͨ͠Օॴ͚ͩมߋ͠ɺڞ༗Ͱ͖ΔϦιʔεڞ༗͢ΔΞΫηε͕͞Ε͍ͯΔͷͰ ଞͷ։ൃऀʹ໎͕͔͔Βͳ͍ߴมߋՕॴ͕࠷খݶڥʹΞΫηεͰ͖Δ·Ͱ͕ߴ5
©2021 Wantedly, Inc.Photo by Jay Heike on UnsplashLVCFGPSLͷͳΓͨͪ6
©2022 Wantedly, Inc. 78BOUFEMZͱϚΠΫϩαʔϏεϚΠΫϩαʔϏε ΞʔΩςΫνϟલޙͷίϯϙʔωϯτʹLVCFSFOFUFTຊ൪ಋೖhttps://docs.wantedly.dev/introduction/technical-overviewʹ&,4Ҡߦྃ
©2022 Wantedly, Inc.ϚΠΫϩαʔϏε։ൃͰେͳͭͷ͜ͱมߋΛૉૣ͘ࢼͤΔͷͮ͘Γશൠʹ͓͍ͯେࣄ มߋ͕ྑ͔ͬͨɾѱ͔ͬͨ͜ͱͷϑΟʔυόοΫϧʔϓଞਓͷมߋͷӨڹΛड͚ͳ͍ఆͱҟͳΔϨεϙϯεͷݪҼ୭ʁݪҼ͕ࣗҎ֎ʹ͋ͬͨ߹ɺ֬ೝ͕͍͠ґଘؔΛҙࣝ͢Δඞཁ͕ͳ͍͜ͷαʔϏεԿʹґଘ͍ͯ͠Δʁ։ൃ͢ΔͨΊʹԿʹΞΫηεͰ͖ΔΑ͏ʹ͢Δඞཁ͕͋ΔʁαʔϏεɾػೳ͝ͱʹґଘؔΛ͓֮͑ͯ͘ͷେม
©2022 Wantedly, Inc.ΑΓΑ͍։ൃํ๏େͳ͜ͱΛຬͨ͢։ൃํ๏͋ΔʁwมߋΛૉૣ͘ࢼͤΔwଞਓͷมߋͷӨڹΛड͚ͳ͍wґଘؔΛҙࣝ͠ͳ͍ ϩʔΧϧͰ։ൃ͢Δ εςʔδϯάڥʹσϓϩΠ͢Δ 5FMFQSFTFODFΛ͏ϚΠΫϩαʔϏε։ൃͷख๏Λൺֱ8BOUFEMZͰߦΘΕ͍ͯͨ։ൃख๏Λൺֱ
©2022 Wantedly, Inc.طଘͷख๏ʢ̍ʣϩʔΧϧͰ։ൃ͢Δ˓มߋΛૉૣ͘ࢼͤΔ%PDLFSCVJMEΛͨͳͯ͘Α͍˓ଞਓͷมߋͷӨڹΛड͚ͳ͍खݩͰ։ൃ͍ͯ͠ΔͷͰଞਓͷӨڹड͚ͳ͍✕ґଘؔΛҙࣝ͢Δඞཁ͕ͳ͍αʔϏεؒͷґଘؔΛΔඞཁ͕͋Δ։ൃڥͷϝϯςφϯείετ͕͔͔Δ10
©2022 Wantedly, Inc.طଘͷख๏ʢ̎ʣεςʔδϯάڥʹσϓϩΠ͢Δ˓ґଘؔΛҙࣝ͢Δඞཁ͕ͳ͍ɹಈ͍͍ͯΔγεςϜͷҰ෦ΛೖΕସ͑Δ͚ͩ ✕มߋΛૉૣ͘ࢼͤΔɹ%PDLFSCVJMEΛͭඞཁ͕͋Δ✕ଞਓͷมߋͷӨڹΛड͚ͳ͍ɹڞ༻ͷڥͳͷͰɺଞͷ։ൃऀͷӨڹΛड͚Δ11
©2022 Wantedly, Inc.طଘͷख๏ʢ̏ʣ5FMFQSFTFODFৄ͘͠IUUQTXXXUFMFQSFTFODFJP˓มߋΛૉૣ͘ࢼͤΔɹEPDLFSCVJMEΛͭඞཁ͕ͳ͍˓ґଘؔΛҙࣝ͢Δඞཁ͕ͳ͍ɹಈ͍͍ͯΔγεςϜͷதͷϦΫΤετ͕खݩʹඈΜͰ͘Δ ✕ଞਓͷมߋͷӨڹΛड͚ͳ͍ɹڞ༻ͷΫϥελͰ࣮ߦ͢ΔͱଞਓͷϦΫΤετखݩʹདྷͯ͠·͏$/$'4BOECPY1SPKFDUબͨ͠TFSWJDFͷϦΫΤετΛ ϩʔΧϧʹྲྀ͢͜ͱ͕Ͱ͖Δπʔϧ12
©2022 Wantedly, Inc.Λຬͨ͢։ൃख๏*TUJPUFMFQSFTFODF*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϦΫΤετ͚ͩΛखݩʹϧʔςΟϯάଞͷϦΫΤετڞ༻ͷڥΛ௨Δ LVCFGPSLͷߟ͑ํ͔͜͜Βग़ൃ˓มߋΛૉૣ͘ࢼͤΔ%PDLFSCVJMEΛͨͳͯ͘Α͍˓ଞਓͷมߋͷӨڹΛड͚ͳ͍खݩͰ։ൃ͍ͯ͠ΔͷͰଞਓͷӨڹड͚ͳ͍˓ґଘؔΛҙࣝ͢Δඞཁ͕ͳ͍ಈ͍͍ͯΔγεςϜͷதͷϦΫΤετ͕खݩʹඈΜͰ͘Δߋʹৄͪ͘͜͠ΒɿIUUQTTQFBLFSEFDLDPNNPSVYJTUJPJOUFHSBUFEUFMFQSFTFODF 13
©2022 Wantedly, Inc.*TUJPUFMFQSFTFODF͔ΒͷਐԽHBUFXBZϨΠϠͷ࣮TPNFEFWXBOUFEMZDPNGPSLFEBTPNFEFWXBOUFEMZDPN(BUFXBZࣗͷมߋʹϧʔςΟϯά͢ΔͨΊʹಛผͳIFBEFS͕ඞཁͩͬͨ (BUFXBZϨΠϠͷಋೖʹΑΓIFBEFSͳ͠Ͱࣗͷมߋʹ౸ୡͰ͖ΔΑ͏ʹ14࣮Ϋϥελ͔Β࡞͞ΕΔԾΫϥελΛࢦ͢'PSLFE"͕7JSUVBM$MVTUFSʹ֘ ϔομΛͬͯϧʔςΟϯάΛૢ࡞͢Δମݧ͔ΒɺΫϥελΛίϐʔ͢ΔΑ͏ͳମݧʹ7JSUVBM$MVTUFS
©2022 Wantedly, Inc.LVCFGPSLLVCFGPSLͷϦΫΤετϧʔςΟϯάͳͲɺ 7JSUVBM$MVTUFSΛ࣮ݱ͢ΔͨΊʹ ଟ͘ͷϦιʔε͕ඞཁ ͦ͜ͰϦιʔεΛҰׅͯ͠ཧ͢Δ ΧελϜίϯτϩʔϥʔΛ࣮ GPSLϦιʔεΛBQQMZ͢Δ͜ͱͰ ඞཁʹͳΔϦιʔεΛશͯ࡞Ͱ͖Δ Α͏ʹ͜͜·ͰͰݱࡏͷΈ͕ LVCFGPSLͱݺͿΑ͏ʹ15
©2022 Wantedly, Inc.5FSNJOPMPHZ7JSUVBM$MVTUFSԾతͳLVCFSFOUFTΫϥελ'PSL*EFOUJfiFS'PSL͢Δ7JSUVBMDMVTUFSΛ۠ผ͢ΔࣝผࢠTIBSFE͔ΒWJSUVBMDMVTUFSΛಛఆͷGPSLJEFOUJfiFSΛͱʹΞΫηεͰ͖Δ࡞͢Δ͜ͱ4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ16
©2022 Wantedly, Inc.5FSNJOPMPHZ7JSUVBM$MVTUFSԾతͳLVCFSFOUFTΫϥελ'PSL*EFOUJfiFS'PSL͢Δ7JSUVBMDMVTUFSΛ۠ผ͢ΔࣝผࢠTIBSFE͔ΒWJSUVBMDMVTUFSΛಛఆͷGPSLJEFOUJfiFSΛͱʹΞΫηεͰ͖Δ࡞͢Δ͜ͱ4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ17
©2022 Wantedly, Inc.5FSNJOPMPHZ7JSUVBM$MVTUFSԾతͳLVCFSFOUFTΫϥελ'PSL*EFOUJfiFS'PSL͢Δ7JSUVBMDMVTUFSΛ۠ผ͢ΔࣝผࢠTIBSFE͔ΒWJSUVBMDMVTUFSΛಛఆͷGPSLJEFOUJfiFSΛͱʹΞΫηεͰ͖Δ࡞͢Δ͜ͱ4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ18
©2022 Wantedly, Inc.5FSNJOPMPHZ7JSUVBM$MVTUFSԾతͳLVCFSFOUFTΫϥελ'PSL*EFOUJfiFS'PSL͢Δ7JSUVBMDMVTUFSΛ۠ผ͢ΔࣝผࢠTIBSFE͔ΒWJSUVBMDMVTUFSΛಛఆͷGPSLJEFOUJfiFSΛͱʹΞΫηεͰ͖Δ࡞͢Δ͜ͱ4ͭͷϚΠΫϩαʔϏε͔ΒͳΔγεςϜͱɺA,B ͷ fork ͞ΕͨΫϥελ19
©2021 Wantedly, Inc.Photo by Deva Darshan on UnsplashLVCFGPSLͷ͔͍ͭΈͪ20
©2022 Wantedly, Inc.,VCFGPSLͷ͔͍ͭΈͪϢʔεέʔεॳఆ͍ͯͨ͠ϢʔεέʔεwΞϓϦέʔγϣϯ։ൃࢧԉwखಈςετࢧԉҎ্ͷӡ༻Λܦͯൃݟ͞ΕͨϢʔεέʔεw1VMM3FRVFTU1SFWJFXw'FBUVSFflBHͷͨΊͷڥੜ21
©2022 Wantedly, Inc.*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϦΫΤετ͚͕ͩϧʔςΟϯά͞ΕΔ 4FSWJDF %FQMPZNFOUΛ࡞4FSWJDFʹUFMFQSFTFODFΛ࣮ߦ͠Ϋϥελ͔ΒͷϦΫΤετΛखݩʹϧʔςΟϯάࣾͰMPDBMGPSLͱݺΕ͍ͯΔఆ͍ͯͨ͠ϢʔεέʔεɿΞϓϦέʔγϣϯ։ൃࢧԉ22
©2022 Wantedly, Inc.ఆ͍ͯͨ͠Ϣʔεέʔεɿखಈςετࢧԉ23*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ ಛఆͷϦΫΤετ͚͕ͩϧʔςΟϯά͞ΕΔ 4FSJWJDF %FQMPZNFOUΛ࡞ ͜͜Ͱ࡞͢Δ%FQMPZNFOU͕ࣗมߋͨ͠ *NBHFΛઃఆ͓ͯ͘͠WJSUVBMDMVTUFS͕࡞Ͱ͖Εϒϥβ͔Βมߋ͕ࢼͤΔखಈςετɾϨϏϡʔͳͲͷ༻్Ͱར༻ ࣾͰSFNPUFGPSLͱݺΕ͍ͯΔ
©2022 Wantedly, Inc.ͪͳΈʹɿࣾͷLVCFLVCFDUMͷϥούʔЋͷίϚϯυΫϥελ͝ͱͷΞΫηεΛӅṭͨ͠Γ7JSUVBMDMVTUFSͷ࡞UFMFQSFTFODFΛશࣗಈͰߦ͏LVCFDUMʹͳ͍ศརػೳ͕ར༻ՄೳLVCFGPSL24มߋ͕ೖͬͨ7JSUVBM$MVTUFSͷ࡞Λ ࣗಈͰߦ͏LVCFGPSLSFNPUF
©2022 Wantedly, Inc.৽͍͠Ϣʔεέʔε: Pull Request Preview3FWJFXڥͷࣗಈੜ13࡞࣌ʹWJSUVBMDMVTUFSΛࣗಈੜੜ͞Εͨ63-ʹΞΫηε͢ΔͱࢼͤΔ.JDSPTFSWJDFͰ1SFWJFX֎͔Β౸ୡͰ͖ͳ͍.JDSPTFSWJDF ʹϧʔςΟϯάՄೳੜ͞Εͨ63-ʹΞΫηε͢Δ͜ͱͰ Ұ෦͚ͩมߋ͞ΕͨγεςϜΛࢼͤΔඇΤϯδχΞʹࢼͯ͠Β͏ͱ͖ศར ڥߏங͕͍Βͳ͍TBOECPYͷσʔλΛ͔ͭͬͯࢼͤΔ25
©2022 Wantedly, Inc.৽͍͠Ϣʔεέʔε: Pull Request Preview3FWJFXڥͷࣗಈੜ13࡞࣌ʹWJSUVBMDMVTUFSΛࣗಈੜੜ͞Εͨ63-ʹΞΫηε͢ΔͱࢼͤΔ.JDSPTFSWJDFͰ1SFWJFXͰ͖Δ֎͔Β౸ୡͰ͖ͳ͍.JDSPTFSWJDF ʹϧʔςΟϯάՄೳੜ͞Εͨ63-ʹΞΫηε͢Δ͜ͱͰ Ұ෦͚ͩมߋ͞ΕͨγεςϜΛࢼͤΔඇΤϯδχΞʹࢼͯ͠Β͏ͱ͖ศར ڥߏங͕͍Βͳ͍TBOECPYͷσʔλΛ͔ͭͬͯࢼͤΔ26
©2022 Wantedly, Inc.Pull Request Preview URL ͷΈ27 ։ൃऀ͕(JU)VCʹมߋΛQVTI มߋ͝ͱʹ%PDLFSJNBHFΛ࡞ %PDLFSJNBHFͷ४උ͕Ͱ͖ͨΒ 'PSLϦιʔεΛΫϥελʹ"QQMZ 7JSUVBM$MVTUFSͷ४උ͕Ͱ͖ͨΒ 13ʹίϝϯτ ίϝϯτ͞Εͨ63-ʹΞΫηε
©2022 Wantedly, Inc.৽͍͠Ϣʔεέʔε: Feature Flag ͷͨΊͷڥੜ'FBUVSF'MBHΞϓϦέʔγϣϯͷڍಈΛมߋ͢ΔͨΊͷج൫දతͳྫɿ"#UFTU8BOUFEMZͷج൫)FBEFSͰ੍ޚՄೳ 9GFBUVSFflBHT\TPNF"#UFTUz"z^'PSLJEFOUJfiFSͱಉ͡Α͏ʹGFBUVSFflBH͢Δ͜ͱͰޙଆͷNJDSPTFSWJDFͷڍಈͰม͑ΒΕΔ28)FBEFSΛ੍ͬͨޚ
©2022 Wantedly, Inc.৽͍͠Ϣʔεέʔε: Feature Flag ͷͨΊͷڥੜ'FBUVSF'MBH(BUFXBZಛఆͷGFBUVSFflBH͕༗ޮʹͳͬͨԾΫϥελ͕࡞ՄೳTPNFEFWXBOUFEMZDPNTPNFGFBUVSFFOBCMFETPNFEFWXBOUFEMZDPNྫ "#UFTUͷಛఆͷWBSJBOUͰදࣔ ϦϦʔεલͷػೳΛ༗ޮʹ͢Δ 3BJMTͷΞϓϦέʔγϣϯͷBTTFUT ͚ͩखݩͷϦιʔεΛ͏29'FBUVSFflBHͳΒ৽نͷQPEແ͠Ͱར༻Մೳ
©2022 Wantedly, Inc.͜͜·Ͱͷ·ͱΊ,VCFGPSLwҰͭͷΫϥελ͔ΒԾΫϥελΛ࡞Ͱ͖Δ͘͠ΈwϢʔεέʔεwΞϓϦέʔγϣϯ։ൃࢧԉwଞͷ։ൃऀʹ໎Λ͔͚ͣʹUFMFQSFTFODFͰ͖ΔwखಈςετࢧԉwखݩʹΞϓϦέʔγϣϯͷಈ࡞ڥ͕ͳͯ͘มߋΛ࣮ࡍͷϦΫΤετΛͬͯࢼͤΔw1VMM3FRVFTU1SFWJFXwͲΜͳαʔϏεͰ৮Γͳ͕ΒࢼͤΔڥͷࣗಈੜw'FBUVSF'MBHͷͨΊͷڥੜwσόοάʹศརͳڥɺ"#ςετͷൺֱͷͨΊͷڥͷੜ30
©2021 Wantedly, Inc.Photo by Kaleidico on UnsplashLVCFGPSLͷৄ͍͠Έ31
©2022 Wantedly, Inc.ߏཁૉService Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ32Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.ߏཁૉService Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ33Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.ߏཁૉapiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata:labels:fork.k8s.wantedly.com/service: backendname: backendnamespace: backendspec:hosts:- backendhttp:- match:- headers:x-fork-identifier:exact: many-todo-redroute:- destination:host: backend-kubefork-many-todo-red- route:- destination:host: backendService Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ34Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.ߏཁૉapiVersion: networking.istio.io/v1beta1kind: VirtualServicemetadata:labels:fork.k8s.wantedly.com/service: backendname: backendnamespace: backendspec:hosts:- backendhttp:- match:- headers:x-fork-identifier:exact: many-todo-redroute:- destination:host: backend-kubefork-many-todo-red- route:- destination:host: backendService Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ35Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.ߏཁૉService Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ36Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.ߏཁૉapiVersion: getambassador.io/v2kind: Mappingmetadata:labels:fork.k8s.wantedly.com/manager: kubefork-managername: backend-todo-test-many-todo-rednamespace: emissaryownerReferences:spec:allow_upgrade:- websocketambassador_id:- defaultadd_request_headers:x-fork-identifier: many-todo-redx-forwarded-host: '%REQ(:authority)%'host: many-todo-red.backend.todo.testhost_rewrite: backend.backendprefix: /rewrite: ""service: backend.backendtimeout_ms: 90000Service Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ37Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.ߏཁૉapiVersion: getambassador.io/v2kind: Mappingmetadata:labels:fork.k8s.wantedly.com/manager: kubefork-managername: backend-todo-test-many-todo-rednamespace: emissaryownerReferences:spec:allow_upgrade:- websocketambassador_id:- defaultadd_request_headers:x-fork-identifier: many-todo-redx-forwarded-host: '%REQ(:authority)%'host: many-todo-red.backend.todo.testhost_rewrite: backend.backendprefix: /rewrite: ""service: backend.backendtimeout_ms: 90000Service Mesh*TUJPͷϦΫΤετϧʔςΟϯάΛ׆༻ಛఆͷϔομ͕͍͍ͯΔϦΫΤετΛࢦఆͨ͠TFSWJDFʹϧʔςΟϯά͢Δ38Gateway"NCBTTBEPSͷIFBEFS༩ػೳΛ׆༻ϗετ໊ͱϔομͷରԠ͚Λߦ͏
©2022 Wantedly, Inc.7JSUVBMDMVTUFSͷ࡞7JSUVBM$MVTUFSʹඞཁͳϦιʔεw%FQMPZNFOUw4FSWJDFw7JSUVBM4FSWJDFw.BQQJOH39'PSLϦιʔε্هͷϦιʔεΛҰׅͯ͠࡞͢Δ'PSLϦιʔεΛBQQMZ͢Δͱ7JSUVBMDMVTUFS͕࡞͞ΕΔମݧ'PSLϦιʔεLVCFGPSLDPOUSPMMFS͕ఏڙɾཧ͢Δ
©2022 Wantedly, Inc.7JSUVBMDMVTUFSͷ࡞apiVersion: fork.k8s.wantedly.com/v1beta1kind: Forkmetadata:generation: 1labels:fork.k8s.wantedly.com/identifier: redname: kubefork-rednamespace: optionspec:deployments:replicas: 1selector:matchLabels:app: optiontemplate:metadata:labels:app: redrole: forkspec:containers:- env:- name: FORK_IDENTIFIERvalue: redimage: onsd/todo-option:othername: todo-optionresources: {}identifier: redmanager: emissary/kubefork-managerservices:selector:matchLabels:app: option7JSUVBM$MVTUFSʹඞཁͳϦιʔεw%FQMPZNFOUw4FSWJDFw7JSUVBM4FSWJDFw.BQQJOH40'PSLϦιʔε্هͷϦιʔεΛҰׅͯ͠࡞͢Δ'PSLϦιʔεΛBQQMZ͢Δͱ7JSUVBMDMVTUFS͕࡞͞ΕΔମݧ'PSLϦιʔεLVCFGPSLDPOUSPMMFS͕ఏڙɾཧ͢Δ
©2022 Wantedly, Inc.7JSUVBMDMVTUFSͷ࡞apiVersion: fork.k8s.wantedly.com/v1beta1kind: Forkmetadata:generation: 1labels:fork.k8s.wantedly.com/identifier: redname: kubefork-rednamespace: optionspec:deployments:replicas: 1selector:matchLabels:app: optiontemplate:metadata:labels:app: redrole: forkspec:containers:- env:- name: FORK_IDENTIFIERvalue: redimage: onsd/todo-option:othername: todo-optionresources: {}identifier: redmanager: emissary/kubefork-managerservices:selector:matchLabels:app: option7JSUVBM$MVTUFSʹඞཁͳϦιʔεw%FQMPZNFOUw4FSWJDFw7JSUVBM4FSWJDFw.BQQJOH41'PSLϦιʔε্هͷϦιʔεΛҰׅͯ͠࡞͢Δ'PSLϦιʔεΛBQQMZ͢Δͱ7JSUVBMDMVTUFS͕࡞͞ΕΔମݧ'PSLϦιʔεLVCFGPSLDPOUSPMMFS͕ఏڙɾཧ͢Δ
©2022 Wantedly, Inc.7JSUVBMDMVTUFSͷ࡞apiVersion: fork.k8s.wantedly.com/v1beta1kind: Forkmetadata:generation: 1labels:fork.k8s.wantedly.com/identifier: redname: kubefork-rednamespace: optionspec:deployments:replicas: 1selector:matchLabels:app: optiontemplate:metadata:labels:app: redrole: forkspec:containers:- env:- name: FORK_IDENTIFIERvalue: redimage: onsd/todo-option:othername: todo-optionresources: {}identifier: redmanager: emissary/kubefork-managerservices:selector:matchLabels:app: option7JSUVBM$MVTUFSʹඞཁͳϦιʔεw%FQMPZNFOUw4FSWJDFw7JSUVBM4FSWJDFw.BQQJOH42'PSLϦιʔε্هͷϦιʔεΛҰׅͯ͠࡞͢Δ'PSLϦιʔεΛBQQMZ͢Δͱ7JSUVBMDMVTUFS͕࡞͞ΕΔମݧ'PSLϦιʔεLVCFGPSLDPOUSPMMFS͕ఏڙɾཧ͢Δ
©2022 Wantedly, Inc.7JSUVBMDMVTUFSͷ࡞apiVersion: fork.k8s.wantedly.com/v1beta1kind: Forkmetadata:generation: 1labels:fork.k8s.wantedly.com/identifier: redname: kubefork-rednamespace: optionspec:deployments:replicas: 1selector:matchLabels:app: optiontemplate:metadata:labels:app: redrole: forkspec:containers:- env:- name: FORK_IDENTIFIERvalue: redimage: onsd/todo-option:othername: todo-optionresources: {}identifier: redmanager: emissary/kubefork-managerservices:selector:matchLabels:app: option7JSUVBM$MVTUFSʹඞཁͳϦιʔεw%FQMPZNFOUw4FSWJDFw7JSUVBM4FSWJDFw.BQQJOH43'PSLϦιʔε্هͷϦιʔεΛҰׅͯ͠࡞͢Δ'PSLϦιʔεΛBQQMZ͢Δͱ7JSUVBMDMVTUFS͕࡞͞ΕΔମݧ'PSLϦιʔεLVCFGPSLDPOUSPMMFS͕ఏڙɾཧ͢Δ
©2022 Wantedly, Inc.kubefork ʹؔ࿈͢ΔϦιʔε44ਫ৭Ͱғ·Ε͍ͯΔͷ͕WJSUVBMDMVTUFSͷ࡞ʹඞཁͳϦιʔε
©2022 Wantedly, Inc.LVCFGPSLDPOUSPMMFS ͕044ʹͳΓ·ͨ͠(JU)VCʹͯެ։த45https://github.com/wantedly/kubefork-controller
©2022 Wantedly, Inc.LVCFGPSLDPOUSPMMFSʹؚ·Ε͍ͯΔͷ$POUPSPMMFSͷ࣮,VCFGPSLͷ࣮ݱʹඞཁͳ࣮શͯLVCFGPSLͱʁͱ͍ͬͨͱ͜Ζ͔Βɺ֤छϦιʔεͷઆ໌·ͰLVCFGPSLͷυΩϡϝϯτ46'PSLϦιʔεΛੜ͢ΔͨΊͷ$-*LVCFGPSLDUM
©2022 Wantedly, Inc.σϞ475PEPදࣔαʔϏε̏ͭͷαʔϏε͔ΒͳΔ 'SPOUFOE #BDLFOE͔ΒUPEPΛऔಘ #BDLFOE 5PEPͷϦετΛ͍࣋ͬͯΔ ϦΫΤετ͕དྷΔͱɺ0QUJPO͔Β 5PEPͷ৭Λऔಘͯ͠ฦ͢ 0QUJPO 5PEPͷ৭Λฦ͢αʔϏε
©2022 Wantedly, Inc.σϞ487JSUVBM$MVTUFSඞͣ৭Λฦ͢มߋΛPQUJPOͰࢼͨ͢Ίʹมߋ͕ೖͬͨWJSUVBMDMVTUFSΛ࡞͢Δ GPSLJEFOUJfiFSSFEʹͨ͠ SFEUPEPUFTUͰΞΫηεՄೳ
©2022 Wantedly, Inc.σϞ497JSUVBM$MVTUFSෳͷมߋ͕ೖͬͨ 7JSUVBM$MVTUFS࡞Մೳ
©2022 Wantedly, Inc.LVCFGPSLDPOUSPMMFSͷվળҊ(BUFXBZϨΠϠͷࠩ͠ସ͑ʹରԠݱঢ়"NCBTTBEPSͱີ݁߹ )PTU໊͝ͱʹϔομΛ͚Δػೳ͕͋ΕଞͷHBUFXBZͰ͍͍ͣݱঢ়ϔομൖΞϓϦέʔγϣϯͰ࣮͢Δඞཁ͕͋Δ ΞϓϦέʔγϣϯͷରԠແ͠Ͱϔομൖ͕࣮ݱͰ͖ͳ͍͔ʁ)FBEFS1SPQBHBUJPOػೳͷఏڙ50
©2022 Wantedly, Inc.·ͱΊ51kubeforkҰͭͷΫϥελ͔ΒԾతͳΫϥελΛ࡞ มߋΛͲΜͲΜࢼ͢͜ͱ͕Ͱ͖ΔڥΛ࡞Δେࣄͳͷ࣍ͷ̎ͭwϔομΛͱʹͨ͠ϦΫΤετϧʔςΟϯάwϗετ໊ͱϔομͷରԠ͚kubefork-controllerΧελϜϦιʔεΛͱʹԾతͳΫϥελΛ࡞(JU)VCʹͯެ։த
©2022 Wantedly, Inc.͋Γ͕ͱ͏͍͟͝·ͨ͠52