ML/MLOps Engineer
Kubernetes HPA (Horizontal Pod Autoscaler) ์•Œ์•„๋ณด๊ธฐ

Horizontal Pod Autoscaler (HPA)๋Š” Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€ํ•˜์— ๋”ฐ๋ผ Pod์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. CPU ์‚ฌ์šฉ๋Ÿ‰, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํŠธ๋ฆญ(์˜ˆ: ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ, ์š”์ฒญ ์ˆ˜ ๋“ฑ)์„ ๊ธฐ์ค€์œผ๋กœ ์Šค์ผ€์ผ๋งํ•ฉ๋‹ˆ๋‹ค.

HPA์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

  1. Target Resource:
  • HPA๊ฐ€ ์ ์šฉ๋  Deployment, ReplicaSet, ๋˜๋Š” StatefulSet ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค.
  1. Metrics:
  • ๊ธฐ๋ณธ์ ์œผ๋กœ CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉ.
  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํŠธ๋ฆญ(Custom Metrics)๊ณผ ์™ธ๋ถ€ ๋ฉ”ํŠธ๋ฆญ(External Metrics)๋„ ์ง€์›.
  1. ์Šค์ผ€์ผ๋ง ๋ฒ”์œ„:
  • ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ Pod ๊ฐœ์ˆ˜๋ฅผ ์„ค์ •.

HPA ์ž‘๋™ ๋ฐฉ์‹

  1. ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘:
  • HPA๋Š” Metrics Server๋ฅผ ํ†ตํ•ด ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  1. ์Šค์ผ€์ผ๋ง ๊ณ„์‚ฐ:
  • HPA๋Š” ๋ชฉํ‘œ ๋ฉ”ํŠธ๋ฆญ(Target Value)๊ณผ ํ˜„์žฌ ๋ฉ”ํŠธ๋ฆญ(Current Value)์„ ๋น„๊ตํ•˜์—ฌ Pod ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ •.
  • ์˜ˆ: CPU ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ์ค€ ์Šค์ผ€์ผ๋ง ๊ณต์‹
    $DesiredReplicas = CurrentReplicas \times \frac{CurrentMetricValue}{TargetMetricValue}$
  1. Pod ์ˆ˜ ์กฐ์ •:
  • ๊ณ„์‚ฐ๋œ Pod ์ˆ˜๊ฐ€ ์„ค์ •๋œ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ํ•œ, Kubernetes๋Š” ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Pod๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ.

HPA ์„ค์ • ๋ฐฉ๋ฒ•

1. ์ „์ œ ์กฐ๊ฑด

  • Metrics Server ์„ค์น˜: HPA๋Š” Metrics Server๋ฅผ ํ†ตํ•ด ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  • ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค(์˜ˆ: Deployment)๊ฐ€ ์ด๋ฏธ ๋ฐฐํฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. HPA ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ž‘์„ฑ ๋ฐ ์ ์šฉ

(1) Deployment ์ƒ์„ฑ

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
 matchLabels:
app: my-app
  template:
 metadata:
labels:
  app: my-app
 spec:
containers:
- name: my-app
  image: nginx
  resources:
 requests:
cpu: 200m
 limits:
cpu: 500m

์ ์šฉํ•˜๊ธฐ

kubectl apply -f deployment.yaml

(2) HPA ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ž‘์„ฑ

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
 apiVersion: apps/v1
 kind: Deployment
 name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
 resource:
name: cpu
target:
  type: Utilization
  averageUtilization: 50

์ ์šฉํ•˜๊ธฐ

kubectl apply -f hpa.yaml

3. HPA ํ™•์ธ

kubectl get hpa

์ถœ๋ ฅ ์˜ˆ์‹œ

NAME          REFERENCE            TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
my-app-hpa    Deployment/my-app    40% / 50%       2         10        3          5m

HPA ๋™์ž‘ ํ…Œ์ŠคํŠธ

  1. ๋ถ€ํ•˜ ์ƒ์„ฑ
  • ๋ถ€ํ•˜๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด kubectl run ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ(์˜ˆ: stress, ab)๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
kubectl run -i --tty load-generator --image=busybox /bin/sh
# ๋ถ€ํ•˜ ์ƒ์„ฑ (CPU๋ฅผ 100% ์‚ฌ์šฉ)
while true; do :; done
  1. HPA ์ƒํƒœ ํ™•์ธ
kubectl get hpa

๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด REPLICAS ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์„ค์ • ์˜ต์…˜

  1. ๋ฉ”ํŠธ๋ฆญ ํƒ€์ž…
  • Resource: CPU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ๋ฉ”ํŠธ๋ฆญ.
  • Pods: Pod์˜ ํŠน์ • ๋ฉ”ํŠธ๋ฆญ(์˜ˆ: ์š”์ฒญ ์ˆ˜).
  • External: ์™ธ๋ถ€ ๋ฉ”ํŠธ๋ฆญ(์˜ˆ: ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค, ์™ธ๋ถ€ API).
  1. ์Šค์ผ€์ผ๋ง ์ •์ฑ…
    HPA v2๋ถ€ํ„ฐ๋Š” ์Šค์ผ€์ผ๋ง ์ •์ฑ…์„ ์„ธ๋ถ€์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    behavior:
    scaleUp:
    stabilizationWindowSeconds: 30
    selectPolicy: Max
    policies:
    - type: Percent
    value: 50
    periodSeconds: 60
    scaleDown:
    stabilizationWindowSeconds: 60
    selectPolicy: Min
    policies:
    - type: Percent
    value: 20
    periodSeconds: 60

๊ธฐํƒ€ ํŒ

  • HPA๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ:
    • Metrics Server๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ:
      kubectl get apiservices | grep metrics
    • Deployment๊ฐ€ resources.requests๋ฅผ ์ •์˜ํ–ˆ๋Š”์ง€ ํ™•์ธ.
  • Custom Metrics ์‚ฌ์šฉ:
    • Prometheus Adapter๋ฅผ ์„ค์น˜ํ•˜๊ณ  Prometheus ๋ฉ”ํŠธ๋ฆญ์„ ํ™œ์šฉ.

HPA๋Š” Kubernetes ํ™˜๊ฒฝ์—์„œ ์›Œํฌ๋กœ๋“œ๋ฅผ ๋™์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ CPU/๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์ค€ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.