Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© 2025 Wantedly, Inc. ͚ࣗͩͷԾΫϥελΛߴ͔ͭ ޮతʹ࡞Δ kubefork Wantedly Tech Night #8 2025-02-25 Kazuki Obata
Slide 2
Slide 2 text
© 2025 Wantedly, Inc. ࣗݾհ ڊി थ (Obata Kazuki) @donkomura_ Wantedly, Inc. (2024/09 ~ ) ΠϯϑϥΤϯδχΞ #k8s #ϘϧμϦϯά🧗
Slide 3
Slide 3 text
© 2025 Wantedly, Inc. ࣍ ● Ϟνϕʔγϣϯ ● ՝ͱΓ͍ͨ͜ͱ ● Ͳ͏࣮ͬͯݱ͢Δ͔ ○ Wantedly ։ൃͷ߹ ○ ΞΠσΟΞͱ ● ·ͱΊ
Slide 4
Slide 4 text
© 2025 Wantedly, Inc. Ϟνϕʔγϣϯɿ։ൃதͷϓϨϏϡʔ
Slide 5
Slide 5 text
© 2025 Wantedly, Inc. Ϟνϕʔγϣϯɿ։ൃதͷϓϨϏϡʔ ● ؾܰʹϓϨϏϡʔͰ͖Δͱศར ○ ຊ൪ͱಉ͡Α͏ͳڥͰಈ࡞֬ೝ͠ͳ͕Β։ൃͰ͖Δ ○ ϨϏϡʔ͍͢͠ Πϝʔδɿhttps://github.com/marketplace/actions/deploy-pr-preview ։ൃதʹ ࣅͨΑ͏ͳ͜ ͱ͕͍ͨ͠
Slide 6
Slide 6 text
© 2025 Wantedly, Inc. ཧɿݱঢ়ͷ։ൃϓϩηεͷτϨʔυΦϑ ͍͍ͱ͜औΓΛ͍ͨ͠ ݸਓͷ։ൃαʔόʔʢओʹϩʔΧϧʣ - ✅ڥ͕ଞͷӨڹʹΑͬͯԚ͞Εͳ͍ - ✅Docker ͳͲͰຊ൪ʹ͍ۙڥ࣮ݱͰ͖Δ - ❌Πϯϑϥ෦ͯ͢Λ࠶ݱͰ͖ΔΘ͚Ͱ ͳ͍ - ❌ґଘͨ͠αʔϏε͕͋Δͱ։ൃ͕͍͠ ڞ༗ͷ։ൃαʔόʔʢओʹϦϞʔτʣ - ✅ຊ൪ʹ͍ۙڥͰ։ൃͰ͖Δ - ❌ଞͷਓͷ࡞ۀ͔ΒӨڹΛड͚Δɾ༩͑Δ - ❌҆ఆͨ͠ڥΛอͪʹ͍͘ - յΕΔ͜ͱ͕͋Δ - ❌ͷಛఆ͕͘͠ͳΔ - σϓϩΠ͕িಥ͢Δ - ϩά͕ࠞࡏ͢Δ
Slide 7
Slide 7 text
© 2025 Wantedly, Inc. Ͳ͏࣮ݱ͢Δ͔ - Wantedly ։ൃͷ߹
Slide 8
Slide 8 text
© 2025 Wantedly, Inc. Ͳ͏࣮ݱ͢ΔɿWantedly ։ൃͷ߹ લఏ ● ϚΠΫϩαʔϏεʢΞʔΩςΫνϟʣ ● Πϯϑϥ Kubernetes ○ 1Ϋϥελ60ݸͷϚΠΫϩαʔϏεΛӡ༻ ● ։ൃऀ50ਓ
Slide 9
Slide 9 text
© 2025 Wantedly, Inc. ࣮ݱͷͨΊͷΞΠσΟΞɿΫϥελʔؙ͝ͱίϐʔ͢Δ ● શһʹಉ͡։ൃڥΛఏڙ͢Δͷ͕ཧ ● ͯ͢ͷϦιʔεΛຊ൪͔Βίϐʔ͢Δͱ࣮ݱͰ͖Δ ○ 1αʔϏε1αʔόʔͱͯ͠60 x 50 = 3000 αʔόʔ࡞͢Δ͜ͱʹͳΔ 🤔 ○ Ϧιʔε͕५ʹ͋ΔΘ͚Ͱͳ͍
Slide 10
Slide 10 text
© 2025 Wantedly, Inc. ۪ʹ࣮ݱ͢Δͷͦ͠͏
Slide 11
Slide 11 text
© 2025 Wantedly, Inc. ͢Δ
Slide 12
Slide 12 text
© 2025 Wantedly, Inc. มߋ͍ͨ͠෦͚ͩઐ༻ ΓͷαʔϏεڞ༻
Slide 13
Slide 13 text
© 2025 Wantedly, Inc. ● deployment ͱ service ͚ͩมߋ͢Δ ● ϧʔςΟϯά ○ ԾΫϥελͷΞΫηεใΛ HTTP Header, gRPC Metadata Ͱൖ
Slide 14
Slide 14 text
© 2025 Wantedly, Inc. deployment ͱ service ͚ͩมߋ͢Δ
Slide 15
Slide 15 text
© 2025 Wantedly, Inc. ʮมߋ͍ͨ͠෦͚ͩʯઐ༻ ● ΞϓϦέʔγϣϯ։ൃऀʹΑΔมߋ ○ Stateless ͳϦιʔε͚ͩΛίϐʔ͢Εे ○ Kubernetes ͩͱ Deployment ● Deployment ͷίϐʔʹىҼ͢Δมߋ ○ ίϐʔͨ͠ Deployment ʹ͚ͯϦΫΤετΛྲྀ͍ͨ͠ ○ Kubernetes Ͱ Service ΛͬͯτϥϑΟοΫΛసૹ͢Δ
Slide 16
Slide 16 text
© 2025 Wantedly, Inc. ʮมߋ͍ͨ͠෦͚ͩʯઐ༻ ● deployment ͱ service ͷΈίϐʔ͢Δ ○ มߋ͍ͨ͠ϚΠΫϩαʔϏεͷ Deployment ͱ Service Λίϐʔ ○ มߋ͠ͳ͍ϚΠΫϩαʔϏεڞ༻ͷͷΛ͏Α͏ʹϧʔςΟϯά
Slide 17
Slide 17 text
© 2025 Wantedly, Inc. ϧʔςΟϯά
Slide 18
Slide 18 text
© 2025 Wantedly, Inc. ● มߋ෦ʢService, DeploymentʣͷΈΛίϐʔ ○ ԾΫϥελʹΞΫηε͢Δ߹ ■ ଞͷϚΠΫϩαʔϏε͔ΒͷϦΫΤετΛ͜ΕΒʹྲྀ͍ͨ͠ ■ ϓϨϏϡʔͰ͖Δঢ়ଶʹ͍ͨ͠ Ͳ͏ͬͯίϐʔͨ͠ Service, Deployment ʹ ϦΫΤετΛྲྀ͔͢ ͜͜·Ͱ A B B
Slide 19
Slide 19 text
© 2025 Wantedly, Inc. Istio ͷϦιʔεΛͬͨϧʔςΟϯά ● VirtualService ○ ϚΠΫϩαʔϏεͷαʔϏεؒ௨৴ͷϧʔςΟϯάΛઃఆ͢Δ resource ○ header ͷΛجʹϦΫΤετͷϧʔςΟϯάઌΛมߋ͢Δ apiVersion: networking.istio.io/v1beta1 kind: VirtualService spec: hosts: - wantedly-x http: - match: - headers: x-fork-identifer: exact: donkomura route: - destination: host: kube-fork-donkomura x-fork-identifier ͱ͍͏ header Λݟͯ ࣗઐ༻ͷ host ʹ ϧʔςΟϯά͢Δ ίϐʔࡁΈͷ host
Slide 20
Slide 20 text
© 2025 Wantedly, Inc. ࣮Ͱ͖ͨ ӡ༻Ͱ͖Δʁ
Slide 21
Slide 21 text
© 2025 Wantedly, Inc. fork ʹ͓͚Δ VirtualService ӡ༻ͷ՝ ● 1ͭͷ VirtualService ʹԾΫϥελ͝ͱͷઃఆ͕ඞཁ ● ྫ: 2ਓ͕ಉ͡αʔϏεΛมߋ͍ͨ͠ͱ͖ ○ Ұͭͷ Virtual Service ʹ݅Λ·ͱΊΔ ○ x-fork-identifer: cluster-A ʹϚον͢ΔͳΒ ■ service-A ϧʔςΟϯά ○ x-fork-identifer: cluster-B ʹϚον͢ΔͳΒ ■ service-B ϧʔςΟϯ ○ ͦΕҎ֎ͳΒ service-X ϧʔςΟϯά
Slide 22
Slide 22 text
© 2025 Wantedly, Inc. fork ʹ͓͚Δ VirtualService ӡ༻ͷ՝ ● 1ͭͷ VirtualService ʹԾΫϥελ͝ͱͷઃఆ͕ඞཁ ● ྫ: 2ਓ͕ಉ͡αʔϏεΛมߋ͍ͨ͠ͱ͖ ○ Ұͭͷ Virtual Service ʹ݅Λ·ͱΊΔ ○ x-fork-identifer: cluster-A ʹϚον͢ΔͳΒ ■ service-A ϧʔςΟϯά ○ x-fork-identifer: cluster-B ʹϚον͢ΔͳΒ ■ service-B ϧʔςΟϯ ○ ͦΕҎ֎ͳΒ service-X ϧʔςΟϯά ධՁॱΛ੍ޚͰ͖ͳ͍ ίϯϑϦΫτ͢Δ
Slide 23
Slide 23 text
© 2025 Wantedly, Inc. VSConfig ● VSConfig ○ ԾΫϥελͷϧʔςΟϯάઃఆΛهड़͢ΔͨΊͷಠࣗϦιʔε ○ ࣮ΧελϜίϯτϩʔϥʔ ■ ઃఆΛूͯ͠ VirtualService Λੜ͢Δ ○ VirtualService ͷઃఆΛෳਓ͕৮Βͳͯ͘ྑ͍ ■ ίϯϑϦΫτ͕ى͖ͳ͍ ○ յΕͯࣗಈͰݩʹΔ VirtualService ͷҟͳΔมߋΛू͢Δ apiVersion: vsconfig.k8s.wantedly.com/v1beta1 kind: VSConfig spec: headerName: x-fork-identifer headerValue: donkomura host: # ϧʔςΟϯάରͷ Service wantedly-x service: # ϦΫΤετΛྲྀ͢ઌͷ Service kube-fork-donkomura
Slide 24
Slide 24 text
© 2025 Wantedly, Inc. ։ൃதʹԾΫϥελʹϦΫΤετΛඈ͍ͨ͠ ● ͜͜·Ͱ ○ ಛఆͷ header ͷ͍ͭͨϦΫΤετԾΫϥελʹϧʔςΟϯά͞ΕΔ ○ ϧʔςΟϯά VirtualService ͰߦΘΕ͍ͯΔ ○ VirtualService ͷݸʑͷϧʔςΟϯάઃఆ VSConfig ʹهड़͞Ε͍ͯΔ ͜ΕͰे͔ʁ
Slide 25
Slide 25 text
© 2025 Wantedly, Inc. ϚΠΫϩαʔϏεʹ͓͚ΔϦΫΤετॲཧͷྲྀΕ A B C E ௨ৗͷϦΫΤετ req B E A B C E req ؒతʹϦΫΤετΛड͚ͯ ڍಈ͕มΘΔ ίϐʔͨ͠ Deployment ԾΫϥελͷ ϦΫΤετ
Slide 26
Slide 26 text
© 2025 Wantedly, Inc. ʮԾΫϥελͷϦΫΤετʯͱ͍͏ίϯςΩετ B E A B C E req ԾΫϥελͷ ϦΫΤετ A B C E ௨ৗͷϦΫΤετ req ϦΫΤετΛ ίϐʔͨ͠ deploymen ͚͍ͨ
Slide 27
Slide 27 text
© 2025 Wantedly, Inc. ʮԾΫϥελͷϦΫΤετʯͱ͍͏ίϯςΩετ B E A B C E req A B C E req ϦΫΤετΛ ίϐʔͨ͠ deploymen ͚͍ͨ ԾΫϥελͷ ϦΫΤετ ௨ৗͷϦΫΤετ
Slide 28
Slide 28 text
© 2025 Wantedly, Inc. ʮԾΫϥελͷϦΫΤετʯͱ͍͏ίϯςΩετ B E A B C E req A B C E req ϦΫΤετΛ ίϐʔͨ͠ deploymen ͚͍ͨ ԾΫϥελͷ ϦΫΤετ ௨ৗͷϦΫΤετ ʮԾΫϥελͷΞΫηεͰ͋Δʯ ͱ͍͏ใʢίϯςΩετʣΛ ޙଓͷϚΠΫϩαʔϏε ൖͤ͞Δඞཁ͕͋Δ
Slide 29
Slide 29 text
© 2025 Wantedly, Inc. ԾΫϥελͷϦΫΤετͰ͋Δ͜ͱΛൖ͢Δ ● ͜͜·Ͱʢ࠶ܝʣ ○ ಛఆͷ header ͷ͍ͭͨϦΫΤετԾΫϥελʹϧʔςΟϯά͞ΕΔ ○ ϧʔςΟϯά VirtualService ͰߦΘΕ͍ͯΔ ○ VirtualService ͷཧ VSConfig ͕ߦ͍ͬͯΔ ԾΫϥελͷ ID Λ࣋ͭ header Λ͚ͭͯ ϚΠΫϩαʔϏεͰ͏ɾൖͤ͞Δ → ϦΫΤετ͕ίϐʔͨ͠ Deployment → ԾతͳΫϥελʹΞΫηε͢Δମݧ
Slide 30
Slide 30 text
© 2025 Wantedly, Inc. ୭͕ header Λ͚͍ͭͯΔʁ Ͳ͏ͬͯ header Λൖ͍ͯ͠Δʁ
Slide 31
Slide 31 text
© 2025 Wantedly, Inc. ୭͕ header Λ͚͍ͭͯΔʁ Ͳ͏ͬͯ header Λൖ͍ͯ͠Δʁ ຊͪ͜Β͚ͩઆ໌͠·͢
Slide 32
Slide 32 text
© 2025 Wantedly, Inc. ʮԾΫϥελʹΞΫηε͍ͯ͠Δʯ͜ͱΛൖ͢Δ
Slide 33
Slide 33 text
© 2025 Wantedly, Inc. ● ಛఆͷ ID ͷ͍ͨϦΫΤετ (e.g. header) Λड͚Δ ○ ड͚ͨϚΠΫϩαʔϏεผͷϚΠΫϩαʔϏεϦΫΤετ ○ ͦͷࡍʹಉ͡ ID Λ͚ͭͯϦΫΤετΛൃߦ͢Δ ԾΫϥελͷIDΛൖ͢Δ A B C E req id: hoge E req id: hoge
Slide 34
Slide 34 text
© 2025 Wantedly, Inc. ● ಛఆͷ ID ͷ͍ͨϦΫΤετ (e.g. header) Λड͚Δ ○ ड͚ͨϚΠΫϩαʔϏεผͷϚΠΫϩαʔϏεϦΫΤετ ○ ͦͷࡍʹಉ͡ ID Λ͚ͭͯϦΫΤετΛൃߦ͢Δ ԾΫϥελͷIDΛൖ͢Δ req id: hoge req id: hoge req id: hoge header Λൖ͞ ͓ͤͯ͘ A B C E req id: hoge E
Slide 35
Slide 35 text
© 2025 Wantedly, Inc. Context propagation ● ʮԾΫϥελAʹདྷͨϦΫΤετͰ͋Δʯͱ͍͏ίϯςΩετΛ ϚΠΫϩαʔϏεʹൖ (propagate) ͢Δ ○ ྫ ■ X-Fork-Identifer: fork-a ͷΑ͏ͳ header ͖Ͱ request ͷॲཧத ■ ผͷ microservice ʹ௨৴Λߦ͏߹ඞͣ X-Fork-Identifer: fork-a Λ͚Δ ● servicex ͱ͍͏ϚΠΫϩαʔϏεڞ௨ϥΠϒϥϦͰ࣮ݱ ○ wrap ͨ͠ΫϥΠΞϯτΛ͏ ○ ଞͷϦΫΤετ࣌ʹಉ͡ϔομɾϝλσʔλΛ͏ ○ ͏গ͠Γ͍ͨ > Wantedly Engineering Handbook
Slide 36
Slide 36 text
© 2025 Wantedly, Inc. ·ͱΊ ● kubefork ԾΫϥελΛ࡞͢ΔΈ ○ ։ൃऀ͕ࣗઐ༻ͷΫϥελΛ͍࣋ͬͯΔ͔ͷΑ͏ͳମݧΛఏڙ͢Δ ● ΠϯϑϥͱΞϓϦέʔγϣϯͷٕज़ΛΈ߹Θͤͯ Ͱ͖͍ͯΔ ○ Kubernetes (VirtualService, VSConfig etc.), Istio ○ servicex