Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Autoscaling in Kubernetes
Search
Atsushi Tanaka
September 09, 2018
Programming
1.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Autoscaling in Kubernetes
Atsushi Tanaka
September 09, 2018
More Decks by Atsushi Tanaka
See All by Atsushi Tanaka
継続的なAIコスト最適化
bgpat
1
460
プロダクト専任SREを置かずに 信頼性を追求する
bgpat
1
180
OpenCensusと歩んだ7年間
bgpat
0
800
SREだけど社内営業組織の業務改善をしてみた
bgpat
0
1k
ウォンテッドリーにおける Platform Engineering
bgpat
0
930
Wantedly での Datadog 活用事例
bgpat
2
6.5k
KubernetesでDatadogを飼うならオートディスカバリーを使わないと損
bgpat
2
1.2k
マイクロサービス基盤にフルマネージドサービスではなくKubernetesを選択する理由
bgpat
12
4.8k
400万ユーザーに価値を届けるエンジニアを を支えるインフラ基盤
bgpat
3
590
Other Decks in Programming
See All in Programming
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2k
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
220
SFCで実現する病院・医療システムの動的組み立て式UI
koukimiura
1
170
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.4k
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
160
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
290
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
300
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
230
AI Augmentation Techniques with Liberty
ivargrimstad
1
380
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
220
Engineering Biometric UX Across Android Versions | DroidKnights 2026
ryunen344
1
180
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
304
22k
So, you think you're a good person
axbom
PRO
2
2.2k
Speed Design
sergeychernyshev
33
2.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
510
Optimizing for Happiness
mojombo
378
71k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
570
Ruling the World: When Life Gets Gamed
codingconduct
0
430
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
630
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
Site-Speed That Sticks
csswizardry
13
1.6k
Test your architecture with Archunit
thirion
2
2.5k
Skip the Path - Find Your Career Trail
mkilby
1
280
Transcript
©2018 Wantedly, Inc. Autoscaling in Kubernetes KubernetesͱΦʔτεέʔϧ ,VCFSOFUFT LT ษڧձ!ຊϚΠΫϩιϑτגࣜձࣾ
9.Sep.2018 - Atsushi Tanaka - @bgpat
©2018 Wantedly, Inc. • Atsushi Tanaka ాதಞࢤ • Infrastructure
Engineer at Wantedly, Inc. • Interested in k8s, Docker and Golang About @bgpat
©2018 Wantedly, Inc. Φʔτεέʔϧͷ
©2018 Wantedly, Inc. https://ja.wikipedia.org/wiki/εέʔϥϏϦςΟ "εέʔϧ"
©2018 Wantedly, Inc. https://ja.wikipedia.org/wiki/εέʔϥϏϦςΟ "εέʔϧ"
©2018 Wantedly, Inc. ෛՙʹ߹ΘͤͯࣗಈͰαʔόʔΛ֦ு͢Δ
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS w $MVTUFS"VUPTDBMFS w 7FSUJDBM1PE"VUPTDBMFS w
"EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS w $MVTUFS"VUPTDBMFS w 7FSUJDBM1PE"VUPTDBMFS w
"EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ ਫฏεέʔϧ ਨεέʔϧ
©2018 Wantedly, Inc. εϖοΫ Scale Out Scale In Scale
Down Scale Up
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS w $MVTUFS"VUPTDBMFS w 7FSUJDBM1PE"VUPTDBMFS w
"EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ /PEF 1PE
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS )1" w $MVTUFS"VUPTDBMFS w
7FSUJDBM1PE"VUPTDBMFS w "EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ
©2018 Wantedly, Inc. w ϝτϦΫε͕ઃఆΛ͍͑ͯͳ͍͔ࢹ w 1PEͷΛ૿͢ݮΒ͢ EFQMPZNFOUͷSFQMJDBTͷΛมߋ ࣮ࡍʹεέʔϧΛߦ͏ͷεέδϡʔϥʔ Horizontal
Pod Autoscaler
©2018 Wantedly, Inc. /PEF /PEF /PEF Kubernetesͷεέʔϧ 1PE 4FSWJDF 1PE
1PE 1PE 1PE %FQMPZNFOU 3FQMJDB4FU Service Pod ʹରͯ͠ ϦΫΤετΛϩʔυόϥϯε͢Δ Deployment Pod ͷΛ Ұఆʹอͭ
©2018 Wantedly, Inc. εέʔϧ͢Δج४ w $16༻ͷΈ BVUPTDBMJOHW w Ϧιʔεʹඥ͘ϝτϦΫε
BVUPTDBMJOHW w Ϧιʔεʹඥ͔ͳ͍ϝτϦΫε LTW Horizontal Pod Autoscaler
©2018 Wantedly, Inc. HPA autoscaling/v1
©2018 Wantedly, Inc. HPA autoscaling/v1
©2018 Wantedly, Inc. HPA autoscaling/v1
©2018 Wantedly, Inc. HPA autoscaling/v1
©2018 Wantedly, Inc. autoscaling/v2 ෳͷϝτϦΫεΛઃఆՄೳ ͲΕ͔ͻͱͭͰᮢΛ͑Δͱεέʔϧ͢Δ • Resource: CPUɾϝϞϦ ͷ༻
• Object: Kubernetes ͕ཧ͢ΔϦιʔεͷϝτϦΫε • Pods: Pod ʹؔ͢ΔϝτϦΫε • External: Kubernetes ͷϦιʔεʹؔ࿈͠ͳ͍ϝτϦΫε Horizontal Pod Autoscaler
©2018 Wantedly, Inc. HPA autoscaling/v2
©2018 Wantedly, Inc. HPA autoscaling/v2
©2018 Wantedly, Inc. HPA autoscaling/v2
©2018 Wantedly, Inc. HPA autoscaling/v2
©2018 Wantedly, Inc. HPA autoscaling/v2
©2018 Wantedly, Inc. HPA autoscaling/v2
©2018 Wantedly, Inc. API ΛͬͯϝτϦΫεΛऔಘ͢Δ • Resource Metrics API •
Custom Metrics API • External Metrics API Horizontal Pod Autoscaler
©2018 Wantedly, Inc. • Metrics Server or Heapster • Pod
Λ Node ʹஔ͢Δͱ͖ʹΘΕΔ • औΕΔϝτϦΫε CPU ͱ ϝϞϦ ͷΈ Resource Metrics API
©2018 Wantedly, Inc. • CPU, ϝϞϦ༻ྔҎ֎ͷϝτϦΫε͕औΕΔ • API αʔόʔΛ༻ҙͯ͠Ϋϥελʹొ͠ͳ͍ͱ͍͚ͳ͍ •
Prometheus • Azure • Stackdriver Custom & External Metrics API
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS )1" w $MVTUFS"VUPTDBMFS w
7FSUJDBM1PE"VUPTDBMFS w "EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ
©2018 Wantedly, Inc. Pod Λεέδϡʔϧ͢ΔͨΊͷϊʔυ͕Γͳ͘ͳΔͱ ΫϥελΛߏ͢ΔϊʔυͷΛ૿͢ ରԠ͍ͯ͠Δ CloudProvider • AWS
• Azure • GCP Cluster Autoscaler
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS )1" w $MVTUFS"VUPTDBMFS w
7FSUJDBM1PE"VUPTDBMFS w "EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ
©2018 Wantedly, Inc. • Pod ͷਨεέʔϧ • resource.limit ͱ resource.request
Λมߋ • Node ͷεέδϡʔϦϯά࣌ʹӨڹ • ᮢࣗಈઃఆ • HPAͱͷซ༻Մೳ Vertical Pod Autoscaler
©2018 Wantedly, Inc. w )PSJ[POUBM1PE"VUPTDBMFS )1" w $MVTUFS"VUPTDBMFS w
7FSUJDBM1PE"VUPTDBMFS w "EEPO3FTJ[FS KubernetesͰ͑ΔΦʔτεέʔϧ
©2018 Wantedly, Inc. • Pod ͷதʹϦιʔεΛࢹ͢ΔίϯςφΛཱͯͯ (sidecar) ༻ྔʹ߹Θͤͯཁٻ͢ΔϦιʔεΛ૿ݮͤ͞Δ • ૿ݮ͢Δྔϊʔυͷʹґଘ
• ΫϥελΛߏ͢Δίϯϙʔωϯτʹ༻͍ΒΕ͍ͯΔ • cluster-autoscaler • metrics-server Addon Resizer
©2018 Wantedly, Inc. ͔͜͜Βࣄྫհ
©2018 Wantedly, Inc. • kops Ͱ AWS ্ʹߏங • ϊʔυ:
40 • αʔϏε: 70ݸ • ΞϓϦέʔγϣϯͷ࣮ • Ruby on Rails • Goݴޠ • Python (ػցֶश) • C++, Rust (ը૾ॲཧ) WantedlyͷKubernetesΫϥελ
©2018 Wantedly, Inc. • HPA + Custom Metrics • Prometheus
• k8s-prometheus-adapter • Prometheus Operator • nginx-exporter • Cluster Autoscaler WantedlyͰ͍ͬͯΔΦʔτεέʔϧ
©2018 Wantedly, Inc. 1SPNFUIFVT 1SPNFUIFVT 1PE 1PE HPA + Custom
Metrics ͷߏ .BTUFS/PEF $VTUPN.FUSJDT "1*4FSWFS ,VCFSOFUFT "1*4FSWFS 1PE "QQMJDBUJPO /HJOY OHJOY FYQPSUFS proxy )1" metrics proxy stub_status 1SPNFUIFVT 1SPNFUIFVT 0QFSBUPS manage metrics %FQMPZNFOU scale 3FQMJDB4FU manage manage metrics
©2018 Wantedly, Inc. 1SPNFUIFVT 1SPNFUIFVT 1PE 1PE HPA + Custom
Metrics ͷߏ .BTUFS/PEF $VTUPN.FUSJDT "1*4FSWFS ,VCFSOFUFT "1*4FSWFS 1PE "QQMJDBUJPO /HJOY OHJOY FYQPSUFS proxy )1" metrics proxy stub_status 1SPNFUIFVT 1SPNFUIFVT 0QFSBUPS manage metrics %FQMPZNFOU scale 3FQMJDB4FU metrics manage manage
©2018 Wantedly, Inc. Prometheus Operator https://coreos.com/operators/prometheus/docs/latest/user-guides/getting-started.html
©2018 Wantedly, Inc. Prometheus Operator apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata:
name: service-monitor namespace: custom-metrics labels: service-monitor: prometheus spec: selector: matchLabels: custom-metrics: prometheus namespaceSelector: any: true endpoints: - port: http - port: https custom-metrics: prometheus ͷϥϕϧ͕͍͍ͯΔαʔϏε Λࢹ
©2018 Wantedly, Inc. 1SPNFUIFVT 1SPNFUIFVT 1PE 1PE HPA + Custom
Metrics ͷߏ .BTUFS/PEF $VTUPN.FUSJDT "1*4FSWFS ,VCFSOFUFT "1*4FSWFS 1PE "QQMJDBUJPO /HJOY OHJOY FYQPSUFS proxy )1" metrics proxy stub_status 1SPNFUIFVT 1SPNFUIFVT 0QFSBUPS manage metrics %FQMPZNFOU scale 3FQMJDB4FU metrics manage manage
©2018 Wantedly, Inc. Nginxͷstub_status location /basic_status { stub_status; } Active
connections: 291 server accepts handled requests 16630948 16630948 31070465 Reading: 6 Writing: 179 Waiting: 106 ͪίωΫγϣϯΛ͏
©2018 Wantedly, Inc. Active connections: 291 server accepts handled requests
16630948 16630948 31070465 Reading: 6 Writing: 179 Waiting: 106 nginx-exporter # HELP nginx_connections_current Number of connections currently processed by nginx # TYPE nginx_connections_current gauge nginx_connections_current{state="active"} 2 nginx_connections_current{state="reading"} 0 nginx_connections_current{state="waiting"} 1 nginx_connections_current{state="writing"} 1
©2018 Wantedly, Inc. 1SPNFUIFVT 1SPNFUIFVT 1PE 1PE HPA + Custom
Metrics ͷߏ .BTUFS/PEF $VTUPN.FUSJDT "1*4FSWFS ,VCFSOFUFT "1*4FSWFS 1PE "QQMJDBUJPO /HJOY OHJOY FYQPSUFS proxy )1" metrics proxy stub_status 1SPNFUIFVT 1SPNFUIFVT 0QFSBUPS manage metrics %FQMPZNFOU scale 3FQMJDB4FU metrics manage manage
©2018 Wantedly, Inc. 1SPNFUIFVT 1SPNFUIFVT 1PE 1PE HPA + Custom
Metrics ͷߏ .BTUFS/PEF $VTUPN.FUSJDT "1*4FSWFS ,VCFSOFUFT "1*4FSWFS 1PE "QQMJDBUJPO /HJOY OHJOY FYQPSUFS proxy )1" metrics proxy stub_status 1SPNFUIFVT 1SPNFUIFVT 0QFSBUPS manage metrics %FQMPZNFOU scale 3FQMJDB4FU create create metrics
©2018 Wantedly, Inc. 1SPNFUIFVT 1SPNFUIFVT 1PE 1PE HPA + Custom
Metrics ͷߏ .BTUFS/PEF $VTUPN.FUSJDT "1*4FSWFS ,VCFSOFUFT "1*4FSWFS 1PE "QQMJDBUJPO /HJOY OHJOY FYQPSUFS proxy )1" metrics proxy stub_status 1SPNFUIFVT 1SPNFUIFVT 0QFSBUPS manage metrics %FQMPZNFOU scale 3FQMJDB4FU metrics manage manage
©2018 Wantedly, Inc. HPA apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name:
wantedly spec: maxReplicas: 50 minReplicas: 20 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: wantedly metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50 - type: Pods pods: metricName: nginx_connections_current{state="writing"} targetAverageValue: 2.5 CPU ͱ Nginx ͷ ͪίωΫγϣϯͰεέʔϧ
©2018 Wantedly, Inc. ΦʔτεέʔϧͱϦΫΤετ
©2018 Wantedly, Inc. ΦʔτεέʔϧͱϦΫΤετ
©2018 Wantedly, Inc. • αʔόʔͷίετ͕͑ΒΕͨ • EC2 30 → Pod
20 (EC2 7) • εύΠΫʹڧ͘ͳͬͨ(ؾ͕͢Δ) • Ξϥʔτ͕ݮͬͨ • ᮢܾΊ͕େม • ௨ৗ࣌ʹΪϦΪϦεέʔϧ͠ͳ͍Λ୳͢ KubernetesͷΦʔτεέʔϧΛಋೖͯ͠
©2018 Wantedly, Inc. • KubernetesͰ͑ΔΦʔτεέʔϧͷ • εέʔϧͷΈ • ઃఆͷํ •
࣮ࡍʹͬͯΈͨ • ߏྫ • Ͳ͏ͳ͔ͬͨ ·ͱΊ
©2018 Wantedly, Inc. • Custom Metrics Λಋೖ͢Δ • CPU͚ͩͷͱ͖ΑΓޮΑ͘Φʔτεέʔϧ͕͑Δ •
ΞϓϦέʔγϣϯͷىಈΛૣ͘͢Δ • ͘͢εέʔϧͯ͠ىಈ͕͍ͱεύΠΫʹউͯͳ͍ • API Server ͷΦϓγϣϯΛมߋ͢Δ • --horizontal-pod-autoscaler-sync-period • ϞχλϦϯάͰ͖ΔΈ • Wantedly Ͱ DataDog Λ͍ͬͯΔ KubernetesͷΦʔτεέʔϧಋೖͷTips