메뉴

문서정보

Kubernetes Horizontal Pod Autoscaler

목차

Horizontal Pod Autoscaler

쿠버네티스에 전개되는 애플리케이션은 MSA 모델을 따르는 경우가 많다. MSA 모델은 기능별로 서비스를 전개하고 이들 서비스를 (HTTP, gPRC, Message Queue 등을 이용) 느슨하게 연결하여 작동하게 한다. 서비스들이 분리되기 때문에, 서비스 단위로 모니터링/분석/기능추가/버그수정/배포가 가능하다. 또한 서비스별로 스케일링이 가능하다. 특정 서비스에 요청이 늘어나거나 줄어들면 , 해당 서비스만 Scale-In/Out 을 수행 할 수 있다.

이들 스케일링은 플랫폼에 맡긴다. AWS는 자체적으로 AutoScaling Group기능을 Kubernetes는 HPA(Horizontal Pod Autoscaler를 제공한다. 오토 스케일링이 하는 일은 단순하다.
  1. 애플리케이션을 모니터링 한다.
  2. 모니터링 결과가 어떤 조건을(CPU 사용율, 초당 요청수, 메모리 사용율 등) 만족하면, 애플리케이션을 늘이거나 줄인다.
AutoScaling 대상은 플랫폼 마다 달라질 것이다. 보통은 최소단위를 스케일링 할건데 결과적으로 쿠버네티스는 POD 단위로 스케일링을 하게 된다. 스케일링은 Horizontal scaling과 Vertical scaling으로 나뉜다. 여기에서서는 Horizontal pod scaling를 다룬다.

Horizontal Pod Autoscaler는 CPU 사용율, 메모리 사용율 기타 다른 메트릭을 모니터링한 정보를 이용하여, 사용자가 설정한 목표값에 일치하도록 레플리케이션 컨트롤로 또는 디플로이먼트 레플리케 개수를 조절하는 일을 한다.

HPA의 작동방식

 HPA 작동방식

HPA는 일정 시간 간격을 가진 컨트롤 루프로 구현된다. 이 시간 간격으로 자원을 모니터링하고 스케일링 정책에 일치하는지를 확인한다. 시간 간격은 --horizontal-pod-autoscaler-sync-period플래그로 설정한다.

HPA는 Auto Scaling 정책에 따라서 pod를 늘이거나 줄이는데, Minimum size, Desired capacity, Maximum size 범위내에서 스케일링 한다.

 Auto Scaling 정책

HPA 알고리즘

HPA를 위해서는 수집한 메트릭정보를 분석해서 "평가"하는 작업이 필요하다. 가장 기본적인 관점은 desired 값과 현재(current) 메트릭 값 사이의 비율로 작동한다.

원하는 레플리카 수 = ceil[현재 레플리카 수 * (현재 메트릭 값 / 원하는 메트릭 값)]

예를 들어 현재 레이턴시 측정 값이 200ms 이고 원하는 값이 100ms 이라면 200.0/100.0 == 2.0 이므로 복제를 두배만큼 늘려야 한다. 현재 값이 50m이면, 50.0/100.0 = 0.5 이므로 복제본을 반으로 줄인다.

HPA 테스트

.... 계속

참고