์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

๐Ÿ“ˆ Kubernetes HPA ์‹ค์Šต: Horizontal Pod Autoscaler

AWS CLOUD SCHOOL 9๊ธฐ

by AI Engineer crystal 2025. 4. 15. 14:12

๋ณธ๋ฌธ

๐Ÿ” ๋ชฉํ‘œ

  • Kubernetes์—์„œ HPA (Horizontal Pod Autoscaler) ๋ฅผ ์ด์šฉํ•ด CPU ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ Pod ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด Apache Benchmark๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • HPA์˜ ์›๋ฆฌ์™€ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ , KEDA์™€์˜ ์ฐจ์ด๋„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ์‚ฌ์ „ ์ค€๋น„: Metrics Server ์„ค์น˜

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ HPA๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” metric-server๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฅ Step 1. ๊ตฌ์„ฑ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

๐Ÿ› ๏ธ Step 2. 136๋ฒˆ์งธ ์ค„์— ์•„๋ž˜ ์˜ต์…˜์„ ์ถ”๊ฐ€

# components.yaml > args ํ•ญ๋ชฉ ํ•˜๋‹จ์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€
- --kubelet-insecure-tls

โ–ถ๏ธ Step 3. metrics-server ์„ค์น˜

kubectl apply -f components.yaml

โœ… Step 4. ์„ค์น˜ ํ™•์ธ

kubectl get pod -n kube-system

→ metrics-server Pod๊ฐ€ Running ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.


๐Ÿš€ HPA ์‹ค์Šต: CPU ๊ธฐ๋ฐ˜ ์ž๋™ ์Šค์ผ€์ผ๋ง

โš™๏ธ Step 5. Apache Benchmark ์„ค์น˜ (ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ์šฉ)

apt install -y apache2-utils

๐Ÿ› ๏ธ Step 6. HPA ์ƒ์„ฑ

kubectl autoscale deployment aws9-deploy-blue \
  --cpu-percent=40 \
  --min=3 \
  --max=10

aws9-deploy-blue์˜ Pod ํ‰๊ท  CPU ์‚ฌ์šฉ๋ฅ ์ด 40%๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด, ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ์ฆ๊ฐ€, ๋‚ฎ์•„์ง€๋ฉด ๋‹ค์‹œ 3๊ฐœ๊นŒ์ง€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”„ Step 7. ์‹ค์ œ ํŠธ๋ž˜ํ”ฝ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ

ab -c 200 -n 200 -t 30 http://<EXTERNAL-IP>/
  • -c: ๋™์‹œ์— ์š”์ฒญ์„ ๋ณด๋‚ผ ํด๋ผ์ด์–ธํŠธ ์ˆ˜ (concurrent)
  • -n: ์ด ์š”์ฒญ ์ˆ˜
  • -t: ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ (์ดˆ)

→ ๋ช‡ ์ดˆ ๋’ค์— kubectl get hpa๋กœ ํ™•์ธํ•˜๋ฉด ์Šค์ผ€์ผ์—…์ด ์‹œ์ž‘๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿง  ์ฐธ๊ณ : HPA vs VPA vs KEDA

๊ธฐ๋Šฅ ์„ค๋ช…

HPA ์‹ค์‹œ๊ฐ„ CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์— ๋”ฐ๋ผ Pod ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆ
VPA ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค(cpu/memory)๋ฅผ ์‹ค์‹œ๊ฐ„ ๋ถ„์„ํ•˜์—ฌ request/limit ์ž๋™ ์กฐ์ •
KEDA ์˜ˆ์•ฝ ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜, ๋ฉ”์‹œ์ง€ ํ, Kafka ๋“ฑ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฏธ๋ฆฌ ์Šค์ผ€์ผ๋ง ๊ฐ€๋Šฅ

โš ๏ธ HPA์™€ VPA๋Š” ๋™์‹œ์— ์“ฐ๋ฉด ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์–ด ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ณดํ†ต์€ HPA๋กœ CPU ์Šค์ผ€์ผ๋ง, VPA๋กœ Memory๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌ

  • HPA๋Š” ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ "์‚ฌํ›„ ๋Œ€์‘" ์„ฑ๊ฒฉ์ด ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์ „์— ํŠธ๋ž˜ํ”ฝ ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด KEDA๋ฅผ ํ™œ์šฉํ•œ ์‚ฌ์ „ ์Šค์ผ€์ผ๋ง์ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฒˆ ์‹ค์Šต์œผ๋กœ Kubernetes ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ์ „๋žต์„ ํ•œ์ธต ๋” ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

HPA์˜ ๋™์ž‘ ํ๋ฆ„(๋ชจ๋‹ˆํ„ฐ๋ง → metric-server → controller-manager → Pod ์ฆ๊ฐ€)

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ