Home
home

09. Amazon EKS - Pod Autoscaling

1. 스케일링과 오토 스케일링

스케일링 (Scaling)
[정의]
스케일링은 애플리케이션의 워크로드 변화에 따라 리소스를 조정하여 성능과 비용 효율성을 최적화하는 작업입니다.
쿠버네티스 환경에는 파드 또는 노드에 대해 스케일링하여 클러스터의 처리를 조정합니다.
[유형]
수평 스케일링 (Horizontal Scaling)
대상의 수량을 늘리거나 줄이는 방식
워크로드가 증가할 때 대상을 생성하여 분산 처리 (감소하면 반대로 동작)
수직 스케일링 (Vertical Scaling)
대상의 리소스(CPU, 메모리 등) 용량을 늘리거나 줄이는 방식
워크로드가 증가할 때 대상 리소스의 스펙을 확장 (감소하면 반대로 동작)
[Caption] 수평 스케일링과 수직 스케일링
오토 스케일링 (Autoscaling)
[정의]
오토스케일링은 스케일링 작업을 자동화하여 애플리케이션이 동적으로 변화하는 워크로드에 적응하도록 합니다.
쿠버네티스에서는 CPU, 메모리 사용량, 사용자 정의 메트릭 등을 기반으로 자동으로 조정합니다.
[이점]
관리 편의성
스케일링 작업을 자동으로 수행하여 관리에 편의성 제공
비용 효율성
필요에 따라 리소스를 확장하거나 축소하여 비용 절감
성능 최적화
워크로드 변화에 빠르게 대응하여 최적화된 성능 보장
이번 포스팅에는 EKS 환경에서 파드 오토스케일링에 대해 알아봅니다.
참고로 이번에 알아 볼 사항은 VPA, HPA, KEDA 입니다.

2. VPA (Vertical Pod Autoscaler)

: VPA(Vertical Pod Autoscaler)는 파드에 할당된 CPU와 메모리 등의 리소스를 자동으로 조정하는 수직 오토 스케일링 기능입니다.
VPA 동작에 따른 리소스를 조정할 때 기존 파드를 삭제하고 다시 생성하거나 실행 중에 파드에 권장 값을 제공합니다.
VPA 특징
수동으로 리소스를 설정할 필요 없이 VPA가 적절한 리소스 값을 추천하거나 적용합니다.
CPU와 메모리가 과도하게 할당되거나 부족한 경우 이를 최적화합니다.
VPA 사용 사례
데이터베이스와 같이 고정된 수의 인스턴스로 동작하지만 리소스 요구사항이 가변적인 경우
초기 리소스 설정이 불확실한 경우
VPA 아키텍처
[Caption] VPA 아키텍처
[VPA 구성 요소]
Metric Server
쿠버네티스 클러스터에서 파드의 리소스 사용량(CPU, 메모리)을 수집하는 역할을 합니다.
VPA는 Metrics Server로부터 실시간 파드 리소스 사용 데이터를 가져옵니다.
VPA Recommender
파드의 리소스 사용 패턴을 분석하고 적절한 CPU/메모리 요청(Request) 및 제한(Limit)을 추천합니다.
이 정보는 VPA Admission Controller 또는 VPA Updater로 전달됩니다.
VPA Admission Controller
새로운 파드가 생성될 때, VPA Recommender로부터 추천받은 리소스 요청 및 제한 값을 파드의 스펙에 추가합니다.
파드 재생성 시 적절한 리소스 값을 적용하여 낭비를 줄입니다.
VPA Updater
실행 중인 파드의 리소스 요청이 추천 값과 크게 차이가 날 경우 파드를 삭제하고 새로운 설정으로 재생성하는 작업을 수행합니다.
이 과정은 Deployment나 ReplicaSet과 연동되어 이루어집니다.
[VPA 동작 흐름]
1.
Metrics Server에서 리소스 사용량 수집
Metrics Server는 클러스터 내의 모든 파드의 CPU와 메모리 사용량 데이터를 수집합니다.
2.
VPA Recommender로 데이터 전달
Metrics Server가 수집한 데이터를 기반으로 VPA Recommender는 파드에 필요한 적절한 리소스 요청과 제한 값을 계산합니다.
3.
추천 리소스 값 생성
VPA Recommender는 파드마다 추천 값을 생성하여 VPA Admission Controller와 VPA Updater에 전달합니다.
4.
파드 종료 및 재생성 (VPA Updater)
현재 파드의 리소스 설정이 추천 값과 크게 차이가 나면 VPA Updater가 해당 파드를 종료하고 새로운 설정으로 재생성합니다.
5.
Deployment를 통한 파드 재생성
VPA Updater가 Deployment와 통신하여 파드를 재생성하도록 트리거합니다.
6.
VPA Admission Controller 적용
새로운 파드 생성 시 VPA Admission Controller가 추천 값을 파드 스펙에 반영하여 적용합니다.
7.
새로운 리소스 요청 값으로 파드 배포
파드가 새롭게 배포되며 추천된 리소스 값(예: CPU: 200m)이 적용됩니다.

3. HPA (Horizontal Pod Autoscaler)

: HPA(Horizontal Pod Autoscaler)는 워크로드에 따라 파드의 수량을 동적으로 조정하는 수평적 오토 스케일링 기능입니다.
HPA 특징
CPU, 메모리, 사용자 정의 메트릭에 따라 오토 스케일링 동작
리소스 사용량이 높은 경우 파드를 추가로 생성하여 부하를 분산
리소스 사용량이 낮은 경우 불필요한 파드를 삭제하여 비용 절감
HPA 사용 사례
CPU/메모리 사용량이 일정 수준 이상으로 증가하거나 감소할 때 Pod 개수를 조정
웹 서버, API 서버와 같이 트래픽 변동이 큰 애플리케이션
HPA 아키텍처
[Caption] HPA 아키텍처
[HPA 구성 요소]
Kubelet
각 노드에서 실행되며 파드의 리소스 사용량(CPU, 메모리 등)을 모니터링하고 이 데이터를 Metrics Server로 전달합니다.
Metrics Server
쿠버네티스 클러스터의 리소스 사용량을 수집하고 HPA Controller에 제공합니다.
파드의 리소스 사용 데이터를 기반으로 HPA가 결정을 내릴 수 있도록 합니다.
HPA Controller
파드의 리소스 사용량을 기준으로 필요한 Pod 수(Replicas)를 계산합니다.
필요할 경우 Deployment나 ReplicaSet을 업데이트하여 Pod 수량을 조정합니다.
Deployment/ReplicaSet
HPA Controller가 요청한 대로 파드 수량을 조정합니다.
ReplicaSet은 Deployment를 통해 관리되며 파드의 복제를 담당합니다.
[HPA 동작 흐름]
1.
Metrics 수집 (Kubelet → Metrics Server)
각 노드의 Kubelet이 실행 중인 파드의 리소스 사용량을 모니터링하고 수집된 데이터는 Metrics Server로 전송합니다.
2.
Metrics 쿼리 및 Replicas 계산 (Metrics Server → HPA Controller)
HPA Controller는 Metrics Server로부터 리소스 사용량 데이터를 주기적으로 가져옵니다.
리소스 사용량이 목표(예: CPU 사용률 50%)를 초과하거나 미달할 경우, HPA Controller는 필요한 파드 수량을 계산합니다.
3.
Replicas 업데이트 요청 (HPA Controller → Deployment/ReplicaSet)
HPA Controller는 계산된 파드 수량을 Deployment 또는 ReplicaSet에 전달하여 파드의 복제를 요청합니다.
4.
파드 수량 조정 및 배포
Deployment 또는 ReplicaSet은 HPA의 요청에 따라 파드 수량을 증가하거나 감소합니다.
이에 따라 새로운 파드가 생성되거나 기존 파드가 종료됩니다.

4. KEDA (Kubernetes Event Driven Autoscaler)

: KEDA(Kubernetes Event Driven Autoscaler)는 이벤트 기반으로 애플리케이션을 동적으로 조정하는 수평적 오토 스케일링 기능입니다.
KEDA 특징
일반적인 메트릭 외에 특정 이벤트에 따라 작동할 수 있습니다.
HPA와 통합하여 이벤트 발생 시 빠르게 대응하여 오토 스케일링을 수행합니다.
HPA는 일반적인 메트릭을 기준으로 오토 스케일링을 수행하는 반면, KEDA는 다양한 이벤트를 기준으로 오토 스케일링을 수행할 수 있습니다. (예를 들어 Redis 큐 사이즈에 따른 동작, 시간을 통한 Cron에 따른 동작)
KEDA 사용 사례
SQS 메시지 대기열 길이에 따라 스케일링
IoT 데이터 처리에 따른 이벤트 기반 스케일링
KEDA 아키텍처
[Caption] KEDA 아키텍처
[KEDA 구성 요소]
ScaledObject
KEDA의 CRD(Custom Resource Definition)로 확장 기준과 트리거 조건을 정의합니다.
쿠버네티스 API Server에 등록되고 KEDA Controller에 전달하여 이를 기반으로 작업을 수행합니다.
KEDA Core Components
Metrics Adapter:
외부 이벤트 데이터를 쿠버네티스 HPA가 이해할 수 있는 메트릭 형식으로 변환
Controller:
ScaledObject와 External Trigger Source를 감시하며 확장 조건에 따라 스케일링을 트리거
Scaler:
실제 확장 또는 축소 작업을 수행하며 파드의 수량을 동적으로 조정
Admission Webhooks:
KEDA 관련 리소스를 생성하거나 수정할 때 유효성을 검증
External Trigger Source
외부 시스템에서 발생하는 이벤트를 기반으로 확장 조건을 제공합니다.
Workload
KEDA가 확장하거나 축소하는 대상입니다.(Pod, Deployment 등)
Horizontal Pod Autoscaler (HPA)
쿠버네티스의 기본 HPA를 활용하여 확장 작업을 수행합니다.
KEDA의 Metrics Adapter를 통해 전달받은 메트릭을 기반으로 작동합니다.
[KEDA 동작 흐름]
1.
ScaledObject 정의
사용자가 ScaledObject(Custom Resource Definition, CRD)를 생성하여 KEDA에 확장 기준과 트리거 조건을 설정합니다.
2.
외부 트리거 감지
KEDA Controller는 정의된 ScaledObject를 기반으로 External Trigger Source를 감시합니다.
트리거 조건이 충족되면 Scaler를 호출하여 스케일링이 필요한 상태임을 알립니다.
3.
Metrics Adapter 변환
외부 이벤트 데이터는 KEDA의 Metrics Adapter에 전달됩니다.
Metrics Adapter는 이러한 데이터를 쿠버네티스 HPA가 이해할 수 있는 표준 메트릭 형식으로 변환합니다.
4.
HPA 연동
쿠버네티스 HPA는 Metrics Adapter가 제공한 메트릭 데이터를 기반으로 파드의 스케일링 작업을 수행합니다.
5.
파드 확장/축소
HPA가 결정한 파드 수량을 Deployment, ReplicaSet에 적용하여 파드 수량을 동적으로 조정합니다.
KEDA 스케일링 주체
HPA 작동: 파드 수가 1개 이상일 때 파드 확장 및 축소
KEDA Scaler 작동: 파드 수가 0인 경우 Scaler가 직접 Pod 수를 1로 증가시키는 Zero-to-N 스케일링을 담당

4. 결론

EKS에서 제공하는 Pod Autoscaling(HPA, VPA, KEDA)은 다양한 워크로드 요구사항에 맞게 애플리케이션을 효율적으로 확장할 수 있는 강력한 기능입니다.
트래픽 변동이 큰 애플리케이션에는 HPA를 활용합니다.
리소스를 최적화하고 싶은 경우 VPA를 고려합니다.
이벤트 기반 워크로드에는 KEDA가 적합합니다.
구분
VPA
HPA
KEDA
스케일링 방식
수직 스케일링
수평 스케일링
수평 스케일링
스케일링 대상
파드 리소스(CPU/메모리)
파드 수량
이벤트 기반 파드 수량
참조 대상
CPU/메모리 사용량
CPU/메모리 사용량
외부 및 사용자 정의 이벤트
파드 재생성 여부
파드 종료 후 재생성
파드 유지, 수량만 증감
파드 유지, 수량만 증감
설치 여부
별도 설치 필요
기본 설치
별도 설치 필요