개요
kubernetes의 Autoscaler는 대표적으로 HPA, VPA, CA가 있습니다.
이 페이지에서는 각각의 개념에 대해 정리합니다.
HPA(Horizontal Pod Autoscaler)
Horizontal Pod Autoscaler는 파드의 리소스를 감시하여, 리소스가 부족한 경우 Controller의 replicas를 증가시켜, 파드의 수를 늘리도록 합니다. 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 합니다. 파드가 증가하였기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 합니다.
HPA는 다음과 같은 경우에 사용이 권장됩니다.
- 기동이 빠르게 되는 App
파드의 장애가 났을 때 대응하기 위한 용도로 사용되기 때문에 파드의 생성이 빠르게 되어야 합니다. 따라서 기동이 빠르게 되는 애플리케이션에 더 적합합니다.
- Stateless App
새로운 파드를 생성할 때 Stateful 애플리케이션과 같이 Master-slave의 역할이 정해져있다면 어떤 역할의 파드를 생성할지 판단을 할 수 없습니다. 따라서 단순히 양적인 증가를 해도 상관이 없는 Stateless App에 더 적합합니다.
단, Horizontal Pod Autoscaling은 데몬셋과 같이 크기 조절이 불가능한 오브젝트에는 적용할 수 없습니다.
HorizontalPodAutoscaler의 전제 조건
HorizontalPodAutoscaler는 쿠버네티스 API 자원 및 컨트롤러 형태로 구현되어 있습니다. 따라서 따로 배포할 필요 없으며, 쿠버네티스 컨트롤 플레인 내에서 실행되는 HPA 컨트롤러는 평균 CPU 사용률, 평균 메모리 사용률, 또는 다른 커스텀 메트릭 등의 관측된 메트릭을 목표에 맞추기 위해 목표물(예: 디플로이먼트)의 적정 크기를 주기적으로 조정합니다. 이를 위해, 클러스터에 Metrics Server가 배포 및 구성되어 있어야 합니다.
쿠버네티스 Metrics Server는 클러스터의 kubelet으로부터 리소스 메트릭을 수집하고, 수집한 메트릭을 쿠버네티스 API를 통해 노출시키며, 메트릭 수치를 나타내는 새로운 종류의 리소스를 추가하기 위해 APIService를 사용할 수 있습니다.
Kubernetes HPA 문서 : Horizontal Pod Autoscaling
HPA 예제 : HorizontalPodAutoscaler 연습
VPA(Vertical Pod Autoscaler)
Vertical Pod Autoscaler는 파드의 리소스를 감시하여, 파드의 리소스가 부족한 경우 파드를 교체하여 파드의 리소스를 증가시킵니다. 이처럼 파드의 리소스가 수직적으로 증가하는 것을 Scale Up, 감소하는 것을 Scale Down이라고 합니다.
따라서 VPA는 다음과 같은 경우에 사용합니다.
- Stateful App
각각 파드를 Restart하고, 자원의 성능만 좋아지기 때문에 각각 파드의 역할은 유지됩니다. 따라서 Stateful App에 적합합니다.
단, 한 Controller에 HPA와 함께 사용할 수 없습니다.
VerticalPodAutoscaler의 전제 조건
Metric 서버가 설치되어 있고, OpenSSL 1.1.1 이상이 설치되어 있어야 합니다. 또한, HPA 와는 다르게, 클러스터에 Vertical Pod Autoscaler를 배포 하여 사용합니다.
배포가 완료되면 vpa controller 가 동작하며, 파드의 리소스가 부족한 경우, 새로운 파드가 생성되며, 이전 파드는 종료되는 방식으로 리소스의 크기를 조절하기 때문에, 기존 파드가 종료될 수 있다는 것을 감안하여 설계해야 합니다.
eks vpa 설치 가이드 : Vertical Pod Autoscaler - Amazon EKS
github : https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
CA(Cluster Autoscaler)
앞서 살펴본 VPA와 HPA가 Pod의 리소스 양을 늘려주거나 Pod의 수를 조정해서 부하를 감당하는 Pod 기반의 오토 스케일러라면 Cloud Autoscaler는 Node의 수를 조정하는 오토 스케일러입니다.
Cluster Autoscaler는 워커 노드의 자원이 모두 소모된 경우 자원이 더 필요하다고 판단하면 새로운 노드를 생성하고, 더 이상 새로운 자원이 필요하지 않게되면 생성된 노드를 삭제합니다.
AWS의 경우 CA는 nodegroup 과 연결된 autoscaling group 와 같이 동작하여 서버의 Scale in/out을 진행하게 됩니다.
Autoscaler 대안
AWS : karpenter → CA 의 대체로 인스턴스 생성 속도 이슈를 해결
GKE : MultidimPodAutoscaler → HPA와 VPA의 기능을 모두 제공하여 하나의 Autoscaler로 충돌없이 사용
Reference
[k8s] 쿠버네티스의 Autoscaler (HPA, VPA, CA 개념) (tistory.com)
쿠버네티스 VPA: 작동 방식, HPA와 VPA 비교 & 7가지 모범 사례 (granulate.io)
쿠버네티스 1.27: 쿠버네티스 파드에 대한 현재 위치 리소스 크기 조정(알파) | 쿠버네티스 (kubernetes.io)
'Kubernetes' 카테고리의 다른 글
Sidecar Containers (v1.28~) (0) | 2024.01.07 |
---|---|
Sidecar Containers (v1.28~) (0) | 2023.12.27 |
Authentication / Authorization (0) | 2023.02.09 |
Controller (0) | 2023.02.08 |
AutoScaler (0) | 2023.02.08 |