HPA가 무엇인가?
- 장애 상황을 경험해 보고, 이것을 Pod의 개수(Deployment에서 Replica의 개수를 조정)를 늘려서 해결했다.
- 너무 많은 유저가 접속해서 각 Pod에서 감당할 수 있는 연산량의 한계가 온 것이고, 그래서 더 많은 Pod를 가동해 하나의 Pod가 처리해야 할 연산량을 줄여준 것이다.
- 매번 이렇게 부하 정도(트래픽량)에 따라서 Replica의 개수를 조정해 주기는 너무 불편하다.
- 그래서 존재하는 오브젝트가 바로 HPA(Horizontal Pod Autoscaler)!
- Node를 Scale-in/out 해주는 클러스터 오토스케일러와 같이, HPA는 Pod를 Scale-in/out 해주는 쿠버네티스 오브젝트인 것이다.

HPA 직접 설정해보기
- metrics-server라는 쿠버네티스 플러그인을 설치해야 한다.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- HPA를 세팅하기 전, 모든 컨테이너에 resources.requests.cpu가 설정되어 있는지 확인한다.
- HPA에서 CPU의 Utilization을 보겠다는 의미는 해당 Pod 내의 컨테이너들의 resources,requests.cpu의 총합을 기준으로 몇 퍼센트의 사용량을 맞추겠다는 것을 의미한다.
- 즉, requests가 설정되어 있지 않은 컨테이너가 있는 경우 오류가 발생하게 된다.
- 다음과 같이 오브젝트의 사양을 작성하고 apply 해주자.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: last-week-project-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: last-week-project-deployment
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50