K8s HPA policies
정의 (Definition)
policies는 Horizontal Pod Autoscaler(HPA)가 레플리카를 조정할 때,주기당(scale window) 최대 증감량 을 제한하는 규칙 집합이며 behavior.scaleUp/scaleDown에 적용됩니다.
문제가 되는 배경 (Problem Context)
메트릭 스파이크나 일시적 노이즈에 HPA가 즉시 크게 반응하면, 파드 생성/삭제가 과도해지고 노드 오토스케일러까지 급격히 흔들릴 수 있습니다. “확장은 빠르게, 축소는 천천히” 같은 운영 의도를 코드로 고정하려면 속도 제한이 필요합니다.
핵심 메커니즘 (How it Works)
policies는 다음 형태로 정의합니다.
policies:
- type: Percent # 또는 Pods
value: 50 # 퍼센트 또는 파드 수
periodSeconds: 60
selectPolicy: Max # (선택) Max/Min/Disabledtype:Percent(현재 레플리카의 비율) 또는Pods(절대 개수)value:type에 따른 상한값periodSeconds: 상한이 적용되는 시간 창selectPolicy: 여러 정책이 있을 때 최종 적용 방식
예:
- scale up(Percent): 60초 동안 현재의 100%까지 증가 가능(10 → 20)
- scale down(Pods): 60초 동안 최대 2개만 감소 가능
불변 조건과 보장 범위 (Invariants & Guarantees)
- 보장: HPA가 레플리카를 변경할 때,
policies가 정의한 “주기당 상한”을 넘는 변화는 발생하지 않습니다. - 비보장: 제한을 걸어도 메트릭이 장기간 높게 유지되면 결국 레플리카는 상한(
maxReplicas)까지 도달할 수 있습니다.
비유 (Analogy)
policies는 급가속/급감속을 막는 가속 페달 리미터 입니다. 목적지는 같아도 변화율을 제한합니다.
실무적 함의 (Operational Implications)
- scale down 은 캐시/상태/워밍업 비용이 큰 워크로드일수록 더 보수적으로 제한하는 편이 안정적입니다.
- scale up 은 노드 확장 속도(노드 프로비저닝 지연)와 함께 설계해야 Pending 폭증을 줄일 수 있습니다.
주의사항 / 오해 (Pitfalls & Misconceptions)
policies만으로 플래핑이 완전히 없어지지 않습니다. (완충은 K8s HPA stabilizationWindowSeconds가 담당)- 제한을 과도하게 걸면 부하 상승 시 SLO를 위반할 수 있습니다(확장이 “느려지는” 것이기 때문).
References
- Kubernetes Docs: Horizontal Pod Autoscaling
- Related Note: K8s HPA behavior
- Related Note: K8s HPA stabilizationWindowSeconds