HorizontalPodAutoscaler(HPA) 는 Deployment/Replicaset/Replication Controller의 레플리카 수를 CPU 부하 등에 따라 자동으로 스케일하는 리소스다.
부하가 높아지면 scale out하고, 부하가 낮아지면 scale in 된다.
또 파드에 Resource Requests가 설정되어 있지 않은 경우에는 동작하지 않는다.
HPA는 30초에 한번 꼴로 오토 스케일링 여부를 확인한다.
구체적으로는 다음 수식에서 필요한 레플리카 수를 계산한다.
(ceil함수는 소수점 첫째 자리에서 올림하여 정수 값을 리턴하는 함수)
필요한 레플리카 수 = ceil(sum(파드의 현재 CPU 사용률) / targetAverageUtilization)
CPU 사용률은 metrics-server에서 가져온 각 파드의 1분간 평균값을 사용한다.
최대 3분에 1회 스케일 아웃을 실행하고, 최대 5분에 1회 스케일 인을 실행함으로써 기동 시에만 CPU 부하가 상승하는 메트릭 노이즈 영향을 최소화할 수 있다.
(일반적으로 스케일 아웃은 빨리 해야하지만, 스케일 인은 그렇게까지 중요하지 않아 이런 차이가 있다.)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
kubectl command로도 직접 생성할 수 있다.
$ k autoscale deploy myapp --cpu-percent=50 --min=1 --max=10