본문 바로가기
클라우드/쿠버네티스

쿠버네티스 HPA(Horizontal Pod Autoscaler) 완벽 가이드: 트래픽 변화에 유연하게 대응하기 🚀

by gasbugs 2026. 2. 19.

쿠버네티스 환경에서 서비스의 안정성을 유지하기 위해 가장 중요한 요소 중 하나는 부하에 따른 적절한 리소스 할당입니다. 트래픽이 몰릴 때 수동으로 파드(Pod)의 개수를 늘리는 것은 한계가 있습니다. 이를 자동화해주는 핵심 기능이 바로 HPA(Horizontal Pod Autoscaler)입니다.

1. HPA란 무엇인가? 🤔

HPA는 CPU 사용량이나 사용자 정의 메트릭(Custom Metrics)을 감시하여, 파드의 개수를 자동으로 늘리거나 줄이는 기능입니다. 이는 부하가 증가하면 복제본(Replicas)을 늘려 처리 능력을 확보하고, 부하가 줄어들면 다시 축소하여 리소스 낭비를 방지하는 방식으로 동작합니다. 📈

2. HPA 작동을 위한 필수 전제 조건 🛠️

HPA가 정상적으로 동작하려면 클러스터 내에 다음과 같은 설정이 반드시 필요합니다.

  • Metrics Server: 클러스터 내의 리소스 사용 데이터를 수집하는 metrics-server가 설치되어 있어야 합니다. HPA는 이 서버로부터 메트릭 데이터를 가져옵니다.
  • Resource Requests: 각 컨테이너는 CPU 및 메모리에 대한 requests를 정의해야 합니다. HPA는 이 요청량 대비 현재 사용 비율을 계산하여 스케일링 여부를 결정합니다.
# 파드 정의 시 반드시 리소스 요청량이 포함되어야 함
resources:
  requests:
    cpu: "100m"
    memory: "128Mi"
  limits:
    cpu: "500m"
    memory: "256Mi"

3. HPA의 작동 원리 (알고리즘) ⚙️

HPA는 다음과 같은 공식을 사용하여 원하는 복제본 수를 계산합니다.

원하는 복제본 수 = ceil[현재 복제본 수 × (현재 메트릭 값 / 원하는 메트릭 값)]

 

예를 들어, 현재 CPU 사용률이 100%이고 목표 값이 50%라면, 현재 파드 개수의 2배로 확장을 시도합니다.

4. HPA 생성 및 관리 방법 💻

HPA는 kubectl 명령어를 통해 빠르게 생성하거나 YAML 파일을 통해 정의할 수 있습니다.

 

명령어로 생성하기 (Imperative):

# deployment 'web-server'에 대해 CPU 사용률 50%를 기준으로 2~10개 사이로 확장 설정
kubectl autoscale deployment web-server --cpu-percent=50 --min=2 --max=10

 

YAML 파일로 정의하기 (Declarative):

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

5. HPA 상태 확인 및 트러블슈팅 🔍

설정된 HPA가 잘 동작하는지 확인하려면 다음 명령어를 사용합니다.

# HPA 목록 및 현재 사용량 확인
kubectl get hpa

# 상세 정보 확인 (이벤트 로그 확인 시 중요)
kubectl describe hpa web-server-hpa

 

TARGETS 항목이 <unknown>/50%로 표시된다면 metrics-server가 설치되지 않았거나, 대상 파드에 resources.requests 설정이 누락된 경우가 대부분입니다. ⚠️

6. 안정성을 위한 쿨다운(Cooldown) 정책 🧊

트래픽이 요동칠 때 파드가 너무 자주 생성되고 삭제되는 현상(Thrashing)을 방지하기 위해, 쿠버네티스는 기본적으로 확장 후 일정 시간 동안 대기하는 정책을 가지고 있습니다. 최신 버전에서는 behavior 필드를 통해 확장(Scale-up)과 축소(Scale-down)의 속도를 세밀하게 제어할 수 있습니다.

요약 📝

HPA는 단순한 자동 확장을 넘어 클러스터의 비용 효율성과 가용성을 극대화하는 필수 도구입니다. 실무에서는 단순히 CPU 사용량뿐만 아니라 메모리 사용량, 그리고 애플리케이션 특성에 맞는 커스텀 메트릭을 결합하여 사용하는 것이 권장됩니다.