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/메모리 사용량 | 외부 및 사용자 정의 이벤트 |
파드 재생성 여부 | 파드 종료 후 재생성 | 파드 유지, 수량만 증감 | 파드 유지, 수량만 증감 |
설치 여부 | 별도 설치 필요 | 기본 설치 | 별도 설치 필요 |