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 말고도 다양한 오토스케일링 방식이 있습니다.
- VPA (Vertical Pod Autoscaler)
- 파드 개수는 그대로 두고, CPU/메모리 요청치와 제한치를 자동 조정
- HPA와 동시에 같은 지표에 쓰면 충돌 위험
- Cluster Autoscaler (CA)
- 클러스터의 노드 개수를 자동 조정
- HPA가 파드를 늘렸는데 노드가 부족하면, CA가 노드를 늘려줌
- EC2 Auto Scaling Group (ASG)
- 클라우드 레벨에서 VM 인스턴스 개수를 조정
- Kubernetes에 종속적이지 않고 노드 단위로만 동작
HPA와 VPA를 함께 쓰면?
- HPA는 CPU/메모리 사용률(%) 기반으로 파드 개수를 늘리거나 줄입니다.
- VPA는 CPU/메모리 requests 값을 변경합니다.
이렇게 되면 HPA의 판단 기준이 흔들려서 스케일링이 꼬일 수 있습니다.
따라서 동시에 같은 지표(CPU, 메모리)를 기준으로 적용하는 것은 권장되지 않습니다.
HPA와 EC2 Auto Scaling을 함께 쓰면?
- HPA는 파드 개수를 조정
- ASG는 노드 개수를 조정
발생할 수 있는 문제
- 스케일 기준 불일치
- HPA는 트래픽/CPU 기준으로 파드 늘림
- ASG는 노드 CPU 기준으로 늘림
- 기준이 다르면 파드가 Pending 상태로 남을 수 있음
- 중복 확장
- 둘 다 CPU 기준으로 확장하면 이중 스케일링으로 불필요하게 리소스가 늘어남
- 예상치 못한 축소
- 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 조합이 가장 적합합니다.