Kubernetes HPA와 Auto Scaling 비교: 함께 쓰면 문제 없을까?

Kubernetes HPA란?
HPA(Horizontal Pod Autoscaler)는 Kubernetes에서 파드 개수를 자동으로 조정하는 리소스입니다.

  • CPU, 메모리 같은 리소스 메트릭이나 사용자 정의 메트릭을 기반으로 스케일 아웃/인을 수행합니다.
  • 트래픽이 몰리면 파드 수를 늘리고, 부하가 줄면 파드를 줄여 리소스를 효율적으로 사용합니다.

예시 YAML:

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

HPA와 자주 비교되는 Autoscaling
Kubernetes에는 HPA 말고도 다양한 오토스케일링 방식이 있습니다.

  1. VPA (Vertical Pod Autoscaler)
    • 파드 개수는 그대로 두고, CPU/메모리 요청치와 제한치를 자동 조정
    • HPA와 동시에 같은 지표에 쓰면 충돌 위험
  2. Cluster Autoscaler (CA)
    • 클러스터의 노드 개수를 자동 조정
    • HPA가 파드를 늘렸는데 노드가 부족하면, CA가 노드를 늘려줌
  3. EC2 Auto Scaling Group (ASG)
    • 클라우드 레벨에서 VM 인스턴스 개수를 조정
    • Kubernetes에 종속적이지 않고 노드 단위로만 동작

HPA와 VPA를 함께 쓰면?

  • HPA는 CPU/메모리 사용률(%) 기반으로 파드 개수를 늘리거나 줄입니다.
  • VPA는 CPU/메모리 requests 값을 변경합니다.

:오른쪽을_가리키는_손_모양: 이렇게 되면 HPA의 판단 기준이 흔들려서 스케일링이 꼬일 수 있습니다.
 따라서 동시에 같은 지표(CPU, 메모리)를 기준으로 적용하는 것은 권장되지 않습니다.

HPA와 EC2 Auto Scaling을 함께 쓰면?

  • HPA는 파드 개수를 조정
  • ASG는 노드 개수를 조정

발생할 수 있는 문제

  1. 스케일 기준 불일치
    • HPA는 트래픽/CPU 기준으로 파드 늘림
    • ASG는 노드 CPU 기준으로 늘림
    • 기준이 다르면 파드가 Pending 상태로 남을 수 있음
  2. 중복 확장
    • 둘 다 CPU 기준으로 확장하면 이중 스케일링으로 불필요하게 리소스가 늘어남
  3. 예상치 못한 축소
    • HPA가 파드를 줄이기도 전에 ASG가 먼저 노드를 줄여버리면 파드가 Eviction될 수 있음

안전한 패턴

  • HPA + Cluster Autoscaler 조합 권장
    • HPA는 파드 개수 조정
    • 노드 부족 시 Cluster Autoscaler가 ASG를 통해 노드 추가
  • EC2 Auto Scaling은 최소/최대 노드 풀 크기를 보장하는 용도로만 활용

정리

  • HPA: 파드 개수 자동 조정
  • VPA: 파드 리소스 요청/제한 자동 조정
  • Cluster Autoscaler: 노드 개수 자동 조정
  • EC2 Auto Scaling: VM 인스턴스 개수 자동 조정

:오른쪽_화살표: 안정적인 Kubernetes 환경을 원한다면
:오른쪽을_가리키는_손_모양: HPA + Cluster Autoscaler 조합이 가장 적합합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다