[k8s] 오토스케일링(HPA, VPA) 기본개념

2023. 7. 1. 15:45[ DevOps ]/[ k8s ]

Horizontal Pod Autoscaler(HPA) 및 Vertical Pod Autoscaler(VPA)

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

 

[Horizontal Pod Autoscaler (HPA)]

HPA는 Kubernetes에서 가장 일반적으로 사용되는 오토 스케일링 기술로 애플리케이션의 수평적인 replicas 수를 동적으로 조정하여 애플리케이션의 부하에 따라 자동으로 조정하는 기능을 제공한다. HPA는 CPU 사용률, 메모리 사용률 또는 사용자 정의 지표를 기반으로 Pod의 replicas 수를 조정한다.

 

[Vertical Pod Autoscaler (VPA)]

HPA는 Pod의 replicas 수를 조정하여 가용 자원의 사용을 최적화하지만, VPA는 개별 Pod의 resources, request을 조정하여 수직 스케일링을 수행한다. 예를 들어, Pod가 실제로 요청한 메모리보다 더 많은 메모리를 사용하고 있으면 VPA는 메모리 request를 증가시켜 메모리 사용을 최적화한다.

 

cf. VPA에 비해 HPA가 갖는 장점

- Pod를 수평적으로 확장함으로써 failover 처리에 더 효율적일 것이다.

- 여러 노드를 보다 효율적으로 사용할 수 있게 된다.

 

 

 

Horizontal Pod Autoscaling (HPA)

- 쿠버네티스의 워커 노드의 리소스(Deployment, StatefulSet 등)를 자동으로 업데이트할 수 있는 '오브젝트'

- 워크로드의 크기를 수요에 맞게 자동으로 스케일링

- 메트릭 서버에서 수집한 데이터를 기반으로 함

- HPA는 쿠버네티스 오브젝트이기 때문에 k get hpa가 가능함

 

 

HPA의 scale-out 수행기준

- 한 가지 예시로 Pod manifest에서 resources 필드의 requests 및 limits 필드로 Pod가 사용할 자원을 결정할 수 있는데 여기서 requests 필드의 cpu를 기준으로 HPA의 scale-out(upscale)을 수행할 수 있다. 즉, CPU 사용량이 특정 값(requests.cpu) 이상이 될 경우 자동으로 sacle-out이 발생하도록 구성할 수 있다.

- scale-out의 범위를 지정할 수 있다. 예를 들어 최소 1개 최대 10개의 Pod로 한정하여 오토 스케일링이 발생하도록 구성할 수 있다.

- 기본적으로 CPU 사용률은 1분 간격으로 확인한다.

- Deployment의 replicas에 설정한 값은 우선시 되지 않는다.

- 만약 한 개의 Pod가 사용할 수 있는 CPU 기준을 100m(requests.cpu 값의 특정 퍼센트 값으로 지정)으로 설정했고, 현재 deployment가 사용 중인 cpu가 500m라면 5개의 Pod를 scale-out 한다.

- 마찬가지로 downscale(scale-in) 과정 역시 특정 기준을 기반으로 자동으로 수행된다.

- 보통 downscale을 감지하는 주기는 scale-out을 감지하는 시간보다 4~5배가량 길게 설정한다. 이는 주기적인 scale-out, scale-in을 방지하여 안정적인 시스템 운영을 하기 위함이다.

 

 

 

Metric 데이터 파이프라인

https://kubernetes.io/ko/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/

1) cAdvisor

- kubelet에 포함되며 컨테이너 런타임으로부터 컨테이너의 메트릭을 수집하는 데몬.

- kubelet은 cAdvisor가 수집한 데이터의 요약을 제공하는 API를 제공함

 

2) metrics-server

- 클러스터 애드온 구성요소로 각 kubelet이 제공하는 메트릭 요약 API를 호출하여 '클러스터 전체'의 워크로드 데이터를 수집함. - 또한 metrics-server는 쿠버네티스 API인 메트릭 API를 제공하며 이는 오토스케일링에 사용됨

 

3) API 서버

- HPA, VPA, kubectl top 커맨드가 사용할 수 있도록 메트릭 API를 제공함.

- 즉, 메트릭 정보는 API 서버를 통해서 조회할 수 있음.

 

 

 

HPA 수행 절차

https://www.stacksimplify.com/aws-eks/aws-eks-kubernetes-autoscaling/learn-to-master-horizontal-pod-autoscaling-on-aws-eks/

 

1. HAP가 주기적으로 metrics server에 질의하여 metrics 정보를 가져온다.

2. 오토스케일을 위해 metrics 정보를 기준으로 계산한다.

3. 변경된 기준으로 scaling 한다.

 

 

 

 

 

 

 

Reference

- k8s metric server dosc, https://kubernetes.io/ko/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/

- k8s HPA docs, https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale/

- metric server github, https://github.com/kubernetes-sigs/metrics-server#compatibility-matrix

 

 

 

 

 

'[ DevOps ] > [ k8s ]' 카테고리의 다른 글

[k8s] controlplane Pod들이 CNI망에 속하지 않는 이유  (1) 2023.08.08
[k8s] Kustomize  (0) 2022.12.05
[k8s] Controller - CronJob  (0) 2022.10.01
[k8s] Controller - Job  (0) 2022.09.27
[k8s] Controller - StatefulSet(sf)  (0) 2022.09.22