<aside> 💡 기본 정책으로 ‘Requests와 Limits에 너무 큰 차이를 주지 않는 것’과 ‘Requests를 너무 크게 설정하지 않는 것’이 중요하다.
</aside>
HorizontalPodAutoscaler(HPA)는 디플로이먼트/레플리카셋/레플리케이션 컨트롤러의 레플리카 수를 CPU 부하 등에 따라 자동으로 스케일하는 리소스다.
부하가 높아지면 스케일 아웃하고, 부하가 낮아지면 스케일 인된다.
HorizontalPodAutoscaler는 30초에 한 번 오토 스케일링 여부를 확인한다.
필요한 레플리카 수 계산 수식
ceil(sum(파드의 현재 CPU 사용률) / targetAverageUrilization
최대 3분에 1회 스케일 아웃을 실행하고, 최대 5분에 1회 스케일 인을 실행함으로써 기동 시에만 CPU의 부하가 상승하는 메트릭 노이즈 영향을 최소화 가능
HorizontalPodAutoscaler에서 사용 가능한 메트릭 종류
<aside> 💡 파드에 Resource Requests가 설정되어 있지 않은 경우에는 동작하지 않는다.
</aside>
HorizontalPodAutoscaler 매니페스트 예시
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: sample-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: sample-hpa-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageutilization: 50
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
# 레플리카 수가 15초 동안 100% 감소
- type: Percent
value: 100
periodSeconds: 15
scaleUp:
stabilizationWindowSeconds: 0
policies:
# 레플리카 수가 15초 동안 100% 증가
- type: Percent
value: 100
periodSeconds: 15
# 레플리카 수가 15초 동안 4개 증가
- type: Pods
value: 4
periodSeconds: 15
# 2개의 정책 중 최댓값 선택
# selectPolicy: Min # 2개의 정책 중 최솟값 선택
selectPolicy: Max
spec.behavior
에는 스케일 인(ScaleDown)과 스케일 아웃(ScaleUp) 각각에 대해 정책을 정의한다.type: Percent
) 또는 정수값(type: Pod
)을 지정할 수 있다.selectPolicy
에는 여러 개의 지정된 정책 중 어떤 값을 선택할지 지정한다.spec.behavior.scaleDown.selectPolicy
를 Disabled
로 지정한 경우 스케일 아웃만 실행되고 스케일 인은 실행되지 않게 할 수 있다.selectPolicy
선택 항목
stabilizationWindowSeconds
에서 지정된 기간 동안 추천 레플리카 수를 바탕으로 레플리카 수를 결정한다.
stabilizationWindowSeconds: 0
의 경우 바로 추천 레플리카 수로 변경
VerticalPodAutoscaler
는 컨테이너에 할당하는 CPU/Memory 리소스의 할당을 자동으로 스케일 업해준다.VerticalPodAutoscaler
에 대한 설정은 주로 ‘대상이 되는 워크로드 리소스
’, ‘파드 내부 컨테이너 제한
’, ‘업데이트 정책
’ 세 부분으로 구성된다.