https://techfeed.io/events/techfeed-experts-night-7 で発表した資料です。
kube-state-metrics ShardingTechFeed Experts Night#7 ʙ ίϯςφٕज़ΛޠΔ
View Slide
I work for@ponde_m @d-kuro
kube-state-metrics ͱ• Kubernetes ͷ api-server Λࢹ֤ͯ͠छΦϒδΣΫτͷঢ়ଶͷ ϝτϦΫεΛఏڙͯ͘͠ΕΔͭ
• γϟʔυͱݺΕΔখ͞ͳνϟϯΫʹσʔλΛׂ• ෳͷϚγϯͳͲʹ͚ͯอଘ͢Δ͜ͱͰ େنͳσʔληοτΛཧ• Ԡͷ্ͳͲʹ༻͍ΒΕΔSharding
• Α͋͘Δσʔλϕʔεͷ Sharding ͷҰྫShardinghttps://aws.amazon.com/jp/blogs/news/sharding-with-amazon-relational-database-service/
Kubernetes controller ͷ Sharding• controller ௨ৗɺϦʔμʔબग़ͰϦʔμʔͱͳͬͨ Pod ͷΈ͕ reconcile Λߦ͏ͱ͍͏Ξϓϩʔνʹͳ͍ͬͯΔhttps://speakerdeck.com/daikurosawa/leader-election-in-kubernetes-number-k8sjp
• ͪΐͬͱલʹʹͳͬͨͭ• Sharder ͕ϥϕϧΛׂΓৼͬͯ ͲͷγϟʔυͰॲཧ͢Δ͔Λ ܾఆ͢Δ• ͬͪ͜ͷࠓ͠·ͤΜKubernetes controller ͷ Shardinghttps://github.com/timebertt/thesis-controller-sharding/blob/master/assets/design-overview.pdf
kube-state-metrics ͷ Sharding• ࠓճͷςʔϚ controller Ͱͳ͍͚Ͳ kube-state-metrics ͕ controller Ͱ༻Ͱ͖ΔΞϓϩʔνͰ Sharding Λߦ͏ػೳ͕࣮͞Ε͍ͯΔͨΊɺͦͷհΛ͠·͢
kube-state-metrics ͷ ShardingPod1Pod21. CM1 Metrics2. CM3 MetricsExport Metricsapi-server1. CM12. CM23. CM34. CM4ConfigMap List1. CM2 Metrics2. CM4 MetricsExport Metrics
kube-state-metrics ͷ Shardinghttps://github.com/kubernetes/kube-state-metrics/pull/613
kube-state-metrics ͷ Shardinghttps://github.com/kubernetes/kube-state-metrics/pull/613γϟʔυʹׂ͢Δ͜ͱͰॲཧ͢ΔΦϒδΣΫτ͕ݮΓϨΠςϯγ͕গͳ͘ͳΔ
࣮• kube-state-metrics Λ StatefulSet Ͱಈ͔͢• ϨϓϦΧͱ Pod ͷඌͷ൪߸͔Β Կ൪ͷγϟʔυͳͷ͔ݕग़͢Δ• Kubernetes ͷΦϒδΣΫτͷ UID Λ༻͍ͯ Consistent Hash ͠ɺॲཧ͢ΔγϟʔυΛܾఆ͢Δ
Pod ໊ͳͲΛҾʹऔΔ
Pod ͷ ownerReferences ͔ΒStatefulSet Λऔಘ
StatefulSet ͷϨϓϦΧΛτʔλϧͷγϟʔυPod ໊ͷඌ͔Βγϟʔυͷ൪߸Λऔಘ
StatefulSet Λ informer Ͱ watchEventHandler Ͱγϟʔυͷઃఆͱmetrics ͷϦηοτΛߦ͏
͜͏͢Δ͜ͱͰ HPA ͳͲͰStatefulSet ͕εέʔϧͨ͠ࡍʹγϟʔυͷ࠶ׂͯΛ ࣗಈͰߦ͏͜ͱ͕Ͱ͖Δ
client-go ͷΞʔΩςΫνϟ
kube-state-metrics ͷΞʔΩςΫνϟkube-state-metrics Ͱ Reflector Λ༻ਤͷΑ͏ʹ Delta FIFO Queue ʹΦϒδΣΫτΛ֨ೲ͢ΔͷͰͳ͘ϝτϦΫεΛ֨ೲ͢ΔMetricStore Λ࣮͍ͯ͠Δ
List & Watch ͷ࣮ͷதͰͲͷγϟʔυͰॲཧ͢Δ͔ͷఆΛߦ͍ͬͯΔ
Consistent Hash Ͱॲཧ͢ΔγϟʔυΛܾఆ͠ɺࣗγϟʔυͱҰக͢Δ߹ͷΈॲཧΛߦ͏
͜ͷ ListerWatcher Λ༻͍ͯinformer ͳΓΛੜ͢Ε controller ͕࡞ΕΔ
σϝϦοτ• StatefulSet ͷϩʔϧΞτʹىҼ͢ΔσϝϦοτ• ϩʔϧΞτ͕ 1 ͣͭߦΘΕΔͨΊ͍• Pod ͷআ͕ઌʹ࣮ࢪ͞ΕΔ• ͜ͷλΠϛϯάͰ Prometheus ͷεΫϨΠϓ͕ൃੜ͢Δͱ ϝτϦΫεͷܽଛʹܨ͕ΔՄೳੑ͕͋Δ• List & Watch ͷ෦γϟʔσΟϯάͰ͖ͳ͍ͨΊɺ ରͱͳΔશΦϒδΣΫτΛਫ਼ࠪ͢ΔͷϦιʔε͕ඞཁͱͳΔ
·ͱΊ• controller ͷγϟʔσΟϯάʹ͑ͦ͏ͳ kube-state-metrics Ͱ༻͍ΒΕ͍ͯΔγϟʔσΟϯάख๏Λհ• StatefulSet ͷಛੑΛ্ख͍ͬͯ͘Δ• ΦϒδΣΫτͷ UID Ͱ Consistent Hash
We are hiringͰYahoo! JAPAN ͚ʹϓϥοτϑΥʔϜΛ࡞Γ͍ͨΤϯδχΞઈࢍืूதͰ͢ʂ
Thank You for Listening