Slide 1

Slide 1 text

kube-state-metrics Sharding TechFeed Experts Night#7 ʙ ίϯςφٕज़ΛޠΔ

Slide 2

Slide 2 text

I work for @ponde_m @d-kuro

Slide 3

Slide 3 text

kube-state-metrics ͱ͸ • Kubernetes ͷ api-server Λ؂ࢹ֤ͯ͠छΦϒδΣΫτͷঢ়ଶͷ 
 ϝτϦΫεΛఏڙͯ͘͠ΕΔ΍ͭ

Slide 4

Slide 4 text

• γϟʔυͱݺ͹ΕΔখ͞ͳνϟϯΫʹσʔλΛ෼ׂ • ෳ਺ͷϚγϯͳͲʹ෼͚ͯอଘ͢Δ͜ͱͰ 
 େن໛ͳσʔληοτΛ؅ཧ • Ԡ౴଎౓ͷ޲্ͳͲʹ༻͍ΒΕΔ Sharding

Slide 5

Slide 5 text

• Α͋͘Δσʔλϕʔεͷ Sharding ͷҰྫ Sharding https://aws.amazon.com/jp/blogs/news/sharding-with-amazon-relational-database-service/

Slide 6

Slide 6 text

Kubernetes controller ͷ Sharding • controller ͸௨ৗɺϦʔμʔબग़ͰϦʔμʔͱͳͬͨ Pod ͷΈ͕ 
 reconcile Λߦ͏ͱ͍͏Ξϓϩʔνʹͳ͍ͬͯΔ https://speakerdeck.com/daikurosawa/leader-election-in-kubernetes-number-k8sjp

Slide 7

Slide 7 text

• ͪΐͬͱલʹ࿩୊ʹͳͬͨ΍ͭ • Sharder ͕ϥϕϧΛׂΓৼͬͯ 
 ͲͷγϟʔυͰॲཧ͢Δ͔Λ 
 ܾఆ͢Δ • ͬͪ͜ͷ࿩͸ࠓ೔͸͠·ͤΜ Kubernetes controller ͷ Sharding https://github.com/timebertt/thesis-controller-sharding/blob/master/assets/design-overview.pdf

Slide 8

Slide 8 text

kube-state-metrics ͷ Sharding • ࠓճͷςʔϚ͸ controller Ͱ͸ͳ͍͚Ͳ 
 kube-state-metrics ͕ controller Ͱ΋࢖༻Ͱ͖ΔΞϓϩʔνͰ 
 Sharding Λߦ͏ػೳ͕࣮૷͞Ε͍ͯΔͨΊɺͦͷ঺հΛ͠·͢

Slide 9

Slide 9 text

kube-state-metrics ͷ Sharding Pod1 Pod2 1. CM1 Metrics 2. CM3 Metrics Export Metrics api-server 1. CM1 2. CM2 3. CM3 4. CM4 Con fi gMap List 1. CM2 Metrics 2. CM4 Metrics Export Metrics

Slide 10

Slide 10 text

kube-state-metrics ͷ Sharding https://github.com/kubernetes/kube-state-metrics/pull/613

Slide 11

Slide 11 text

kube-state-metrics ͷ Sharding https://github.com/kubernetes/kube-state-metrics/pull/613 γϟʔυʹ෼ׂ͢Δ͜ͱͰ ॲཧ͢ΔΦϒδΣΫτ͕ݮΓ ϨΠςϯγ͕গͳ͘ͳΔ

Slide 12

Slide 12 text

࣮૷ • kube-state-metrics Λ StatefulSet Ͱಈ͔͢ • ϨϓϦΧ਺ͱ Pod ͷ຤ඌͷ൪߸͔Β 
 Կ൪໨ͷγϟʔυͳͷ͔ݕग़͢Δ • Kubernetes ͷΦϒδΣΫτͷ UID Λ༻͍ͯ 
 Consistent Hash ͠ɺॲཧ͢ΔγϟʔυΛܾఆ͢Δ

Slide 13

Slide 13 text

࣮૷ • kube-state-metrics Λ StatefulSet Ͱಈ͔͢ • ϨϓϦΧ਺ͱ Pod ͷ຤ඌͷ൪߸͔Β 
 Կ൪໨ͷγϟʔυͳͷ͔ݕग़͢Δ • Kubernetes ͷΦϒδΣΫτͷ UID Λ༻͍ͯ 
 Consistent Hash ͠ɺॲཧ͢ΔγϟʔυΛܾఆ͢Δ

Slide 14

Slide 14 text

Pod ໊ͳͲΛҾ਺ʹऔΔ

Slide 15

Slide 15 text

Pod ͷ ownerReferences ͔Β StatefulSet Λऔಘ

Slide 16

Slide 16 text

StatefulSet ͷϨϓϦΧ਺Λ τʔλϧͷγϟʔυ਺ Pod ໊ͷ຤ඌ͔Βγϟʔυͷ ൪߸Λऔಘ

Slide 17

Slide 17 text

StatefulSet Λ informer Ͱ watch EventHandler Ͱγϟʔυͷઃఆͱ metrics ͷϦηοτΛߦ͏

Slide 18

Slide 18 text

͜͏͢Δ͜ͱͰ HPA ͳͲͰ StatefulSet ͕εέʔϧͨ͠ࡍʹ γϟʔυͷ࠶ׂ౰ͯΛ 
 ࣗಈͰߦ͏͜ͱ͕Ͱ͖Δ

Slide 19

Slide 19 text

࣮૷ • kube-state-metrics Λ StatefulSet Ͱಈ͔͢ • ϨϓϦΧ਺ͱ Pod ͷ຤ඌͷ൪߸͔Β 
 Կ൪໨ͷγϟʔυͳͷ͔ݕग़͢Δ • Kubernetes ͷΦϒδΣΫτͷ UID Λ༻͍ͯ 
 Consistent Hash ͠ɺॲཧ͢ΔγϟʔυΛܾఆ͢Δ

Slide 20

Slide 20 text

client-go ͷΞʔΩςΫνϟ

Slide 21

Slide 21 text

kube-state-metrics ͷΞʔΩςΫνϟ kube-state-metrics Ͱ΋ Re fl ector Λ࢖༻ ਤͷΑ͏ʹ Delta FIFO Queue ʹ ΦϒδΣΫτΛ֨ೲ͢ΔͷͰͳ͘ ϝτϦΫεΛ֨ೲ͢Δ MetricStore Λ࣮૷͍ͯ͠Δ

Slide 22

Slide 22 text

List & Watch ͷ࣮૷ͷதͰ ͲͷγϟʔυͰॲཧ͢Δ͔ͷ ൑ఆΛߦ͍ͬͯΔ

Slide 23

Slide 23 text

List & Watch ͷ࣮૷ͷதͰ ͲͷγϟʔυͰॲཧ͢Δ͔ͷ ൑ఆΛߦ͍ͬͯΔ

Slide 24

Slide 24 text

Consistent Hash Ͱॲཧ͢ΔγϟʔυΛܾఆ͠ɺ ࣗγϟʔυͱҰக͢Δ৔߹ͷΈॲཧΛߦ͏

Slide 25

Slide 25 text

͜ͷ ListerWatcher Λ༻͍ͯ informer ͳΓΛੜ੒͢Ε͹ controller ͕࡞ΕΔ

Slide 26

Slide 26 text

σϝϦοτ • StatefulSet ͷϩʔϧΞ΢τʹىҼ͢ΔσϝϦοτ • ϩʔϧΞ΢τ͕ 1 ୆ͣͭߦΘΕΔͨΊ஗͍ • Pod ͷ࡟আ͕ઌʹ࣮ࢪ͞ΕΔ • ͜ͷλΠϛϯάͰ Prometheus ͷεΫϨΠϓ͕ൃੜ͢Δͱ 
 ϝτϦΫεͷܽଛʹܨ͕ΔՄೳੑ͕͋Δ • List & Watch ͷ෦෼͸γϟʔσΟϯάͰ͖ͳ͍ͨΊɺ 
 ର৅ͱͳΔશΦϒδΣΫτΛਫ਼ࠪ͢Δ෼ͷϦιʔε͕ඞཁͱͳΔ

Slide 27

Slide 27 text

·ͱΊ • controller ͷγϟʔσΟϯάʹ࢖͑ͦ͏ͳ 
 kube-state-metrics Ͱ༻͍ΒΕ͍ͯΔγϟʔσΟϯάख๏Λ঺հ • StatefulSet ͷಛੑΛ্ख͘࢖͍ͬͯΔ • ΦϒδΣΫτͷ UID Ͱ Consistent Hash

Slide 28

Slide 28 text

We are hiring Ͱ͸ Yahoo! JAPAN ޲͚ʹϓϥοτϑΥʔϜΛ࡞Γ͍ͨΤϯδχΞઈࢍืूதͰ͢ʂ

Slide 29

Slide 29 text

Thank You for Listening