← 아티클 목록

쿠버네티스 HPA 설정 — 파드 오토스케일링과 흔한 함정

2026-10-12#kubernetes#오토스케일링#kubectl

트래픽이 몰릴 때마다 수동으로 kubectl scale을 치고 있다면 HPA(HorizontalPodAutoscaler)를 쓸 차례입니다. HPA는 CPU·메모리 사용률을 보고 파드 수를 자동으로 늘리고 줄입니다. 그런데 막상 만들어 보면 TARGETS<unknown>만 뜨고 스케일이 전혀 안 되는 경우가 가장 흔합니다. 원인은 대부분 정해져 있습니다.

1단계 — 현재 상태부터 본다

Kubernetes
# HPA 상태와 현재/목표 사용률
kubectl get hpa

# 왜 스케일했는지/못했는지 이벤트와 조건
kubectl describe hpa <name>

describeConditions와 하단 이벤트가 핵심 단서입니다. ScalingActive: False면 메트릭을 못 읽고 있다는 뜻입니다.

2단계 — HPA 만들기

YAML
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60

averageUtilization: 60은 "파드 평균 CPU가 requests 대비 60%를 넘으면 늘려라"는 뜻입니다.

스케일이 안 될 때 원인별 해결

증상원인해결
TARGETS가 <unknown>metrics-server 미설치kubectl top pods가 되는지 확인, 없으면 metrics-server 배포
사용률이 항상 0 또는 비정상resources.requests 누락Deployment에 requests.cpu 지정(없으면 % 계산 불가)
부하인데 안 늘어남maxReplicas 도달 또는 쿨다운describe에서 TooManyReplicas 확인, 한도 상향
줄었다 늘었다 진동임계값 너무 빡빡behavior.scaleDown.stabilizationWindowSeconds 상향

가장 많이 걸리는 함정은 requests 누락입니다. Utilization 방식은 requests를 기준으로 비율을 계산하므로, requests가 없으면 HPA가 사용률 자체를 계산하지 못합니다.

검증 체크리스트

Kubernetes
kubectl top pods               # 메트릭 수집 자체가 되는지
kubectl get hpa -w             # 부하 줄 때 REPLICAS 변화 관찰
kubectl describe hpa <name>    # ScalingActive 조건·이벤트

이 3개로 "메트릭이 오는가 → requests가 있는가 → 한도에 막혔는가" 순서로 좁히면 대부분 해결됩니다.


HPA를 직접 만들고 부하를 걸어 파드가 늘어나는 걸 눈으로 확인하는 실습은 쿠버네티스 트랙에서 해볼 수 있습니다 — 회원가입 없이 무료로.