Kubernetes

[k8s] HorizontalPodAutoscaler - 수평적 오토스케일링

비번변경 2023. 12. 26. 19:02

HPA (HorizontalPodAutoscaler)

Kubernetes에서 HorizontalPodAutoscaler는 Deployment나 ReplicaSet의 리소스 수요에 맞춰 Pod의 수를 자동으로 Scale-up/down 하는 기능을 제공한다.

보통 컴퓨팅 리소스를 추가로 확보할 때는 더 많은 리소스가 있는 자원을 사용하거나, 적당한 리소스가 있는 자원을 여러 대 사용하는 방법을 사용하는데 HorizontalPodAutoscaler는 후자에 해당한다. 때문에 DaemonSet과 같은 복제본 수를 지정할 수 없는 객체를 대상으로 동작하지 않는다.

HorizontalPodAutoscaler는 Kubernetes 리소스와 컨트롤러로 구현되어 있다. 리소스는 컨트롤러의 동작을 지정하고, 컨트롤러는 주기적으로 대상의 CPU 사용량, 메모리 사용량 등의 지표를 모니터링하여 그 크기를 조정한다.

 

 

동작 방식

Kubernetes HorizontalPodAutoscaler는 지속적인 프로세스가 아니라, 간헐적으로(intermittently) 반복 실행하는 형태로 구현되어 있다. 반복 주기는 kube-controller-manager의 --horizontal-pod-autoscaler-sync-period 옵션에 의해 지정되며, 기본값은 15초이다.

1. 컨트롤러 매니저는 HPA에 지정된 지표에 대한 사용률을 질의한다.

2. 리소스 사용률을 기반으로 필요한 복제본 수를 계산한다.

3. 대상을 필요 복세준 수만큼 늘리거나 줄인다.

4. 원하는 복제본 수를 변경한다.

5. 1번으로 돌아간다.

 

 

HPA 객체 생성

HPA는 kubectl autoscale 명령으로 HPA 객체를 생성할 수 있다.

kubectl autoscale <대상> <목표 사용률> --min=<최소 크기> --max=<최대 크기>

# 예시
kubectl autoscale deployment nginx --cpu-percent=80 --min=1 --max=10

 

 

HPA 객체 확인

HPA 객체는 get 명령어로 정보를 확인할 수 있다.

kubectl get hpa

 

 

참고 문서

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

https://www.kubecost.com/kubernetes-autoscaling/kubernetes-hpa/

728x90