Resource Optimization
Junseok Oh
Sr. Solutions Architect
Amazon Web Services
VPA와 Auto Mode의 시너지 효과
Pod의 CPU/Memory 요청을 자동으로 최적화
최적화된 요청 기반으로 적합한 인스턴스 자동 선택
리소스 낭비 감소 + 노드 비용 절감
updateMode별 동작 방식과 권장 사용 사례
추천값만 제공하고, Pod를 변경하지 않습니다. 가장 안전한 분석 모드입니다.
Pod 재시작 없음, 안전하게 분석 가능, 프로덕션에서 먼저 테스트
자동 적용되지 않음, 수동 업데이트 필요
신규 워크로드 분석, 프로덕션 사전 검증, 리소스 패턴 파악
Pod 생성 시에만 추천값을 적용하고, 실행 중인 Pod는 변경하지 않습니다.
실행 중 Pod 안정성 보장, 롤링 업데이트 시 자연스럽게 적용
즉시 적용되지 않음, 새 Pod 생성까지 대기 필요
Stateful 워크로드, 긴 실행 배치 작업, 재시작에 민감한 서비스
추천값이 변경되면 Pod를 재생성하여 적용합니다. 잠시 다운타임이 발생할 수 있습니다.
즉시 최적화 적용, 리소스 효율성 극대화, 자동화된 관리
Pod 재시작 발생, PDB 설정 필요, 잠재적 다운타임
Stateless 워크로드, 개발/스테이징 환경, 다중 레플리카 서비스
Recreate와 동일하게 동작합니다. (deprecated — Recreate 사용 권장)
최소 개입, 자동 리소스 조정, 편리한 관리
Deprecated 상태, Recreate와 동일, Pod 재시작 발생
일반적인 웹 서비스, 마이크로서비스, 유연한 운영 환경
리소스 사용량 기반 VPA 추천값 시각화
리소스 최적화에서 노드 비용 절감까지의 자동화 흐름
14일간 Pod CPU/Memory 사용 패턴 분석
분석 결과: CPU 300m, Memory 512Mi 권장
VPA가 Pod spec 자동 수정 (Recreate/Auto 모드)
새로운 Pod requests를 기반으로 스케줄링 재평가
c6g.large에서 c6g.medium으로 다운사이징
오버프로비저닝된 노드 통합, 빈 노드 제거
→ CPU 40% 절감, Memory 50% 절감 가능
→ 총 비용 절감: VPA + Consolidation = ~67%
QoS Class와 Request/Limit 설정 가이드
request == limit
request < limit
no request/limit
VPA + Auto Mode 최적화 실제 적용 결과
CPU, Memory, Custom Metrics 기반 수평 확장
HPA를 넘어서: 이벤트 기반 스케일링과 Scale-to-Zero
| 항목 | HPA (기본) | KEDA |
|---|---|---|
| 메트릭 소스 | CPU / Memory만 | 60+ 외부 스케일러 (SQS, MSK, Prometheus 등) |
| 최소 레플리카 | min: 1 | min: 0 (Scale-to-Zero → 비용 절감) |
| 설정 방식 | HPA 리소스 직접 관리 | ScaledObject → HPA 자동 생성/관리 |
| Prometheus 연동 | Prometheus Adapter 필요 | 네이티브 PromQL 지원 |
| AWS 통합 | CloudWatch Adapter 별도 설치 | SQS, MSK, CloudWatch 스케일러 내장 |
트래픽 없을 때 0으로 축소, 비용 절감
AWS, GCP, Azure, Kafka, Redis 등
기존 Prometheus 인프라 재활용
GitOps 친화적 선언형 관리
SQS Queue Depth / MSK Consumer Lag / ALB Request Count
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: sqs-consumer-scaler spec: scaleTargetRef: name: sqs-consumer minReplicaCount: 0 # Scale-to-Zero! maxReplicaCount: 20 triggers: - type: aws-sqs-queue authenticationRef: name: keda-aws-credentials metadata: queueURL: https://sqs.ap-northeast-2... queueLength: "5" # 메시지 5개당 1 Pod awsRegion: ap-northeast-2
aws-sqs-queue — Prometheus 불필요queueLength: "5" — 메시지 5개당 Pod 1개TriggerAuthentication)apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: msk-consumer-scaler spec: scaleTargetRef: name: kafka-consumer minReplicaCount: 1 maxReplicaCount: 30 triggers: - type: prometheus metadata: serverAddress: http://prometheus:9090 query: | sum(kafka_consumergroup_lag{ group="my-consumer", topic="orders" }) threshold: "1000" # Lag 1000당 1 Pod
prometheus 스케일러로 Consumer Lag 모니터링kafka_consumergroup_lag 메트릭 활용threshold: "1000" — Lag 1000당 Pod 1개apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: alb-scaler spec: scaleTargetRef: name: web-app minReplicaCount: 2 maxReplicaCount: 50 triggers: - type: aws-cloudwatch authenticationRef: name: keda-aws-credentials metadata: namespace: AWS/ApplicationELB dimensionName: TargetGroup dimensionValue: targetgroup/my-tg/... metricName: RequestCountPerTarget targetMetricValue: "100" # Pod당 100 req metricStatPeriod: "60"
aws-cloudwatch 스케일러 — Prometheus 불필요RequestCountPerTarget 메트릭PromQL + KEDA로 Istio 메트릭 기반 자동 스케일링
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: istio-rps-scaler spec: scaleTargetRef: name: my-app minReplicaCount: 0 maxReplicaCount: 10 cooldownPeriod: 120 triggers: - type: prometheus metadata: serverAddress: http://prometheus:9090 query: | sum(rate(istio_requests_total{ destination_service=~"my-app.*" }[1m])) threshold: "50" # Pod당 50 RPS
5xx > 5% → 즉시 스케일아웃
P99 > 500ms → Pod 추가
outlierDetection 연동
피크타임 사전 확보
리소스 최적화를 위한 운영 가이드
심화 학습을 위한 참고 자료
한국어로 작성된 EKS Auto Mode 및 Kubernetes 학습 자료. 실습 예제 포함.
atomoh.gitbook.io →EKS Auto Mode의 공식 문서. 설정 방법 및 모범 사례 안내.
docs.aws.amazon.com →Auto Mode의 기반이 되는 Karpenter의 상세 문서. NodePool, NodeClass 설정.
karpenter.sh →Logs, Metrics, Traces 연동을 위한 Grafana 데이터소스 설정 가이드.
grafana.com →분산 추적 및 관측성 표준. SDK, Collector, 계측 가이드.
opentelemetry.io →Vertical Pod Autoscaler 공식 리포지토리. 설치, 구성, FAQ.
github.com →Event-driven Autoscaling. 60+ 스케일러, ScaledObject/ScaledJob 구성 가이드.
keda.sh →SQS, MSK, Istio RPS 기반 스케일링 예제. 한국어 실습 자료.
atomoh.gitbook.io →Key Takeaways
Auto Mode는 Karpenter 기반 - NodePool/NodeClass로 세밀한 제어 가능. 인스턴스 선택, Consolidation, Drift 처리 자동화.
Prometheus 쿼리 + AlertManager로 노드 가시성 확보. Spot 인터럽트 대응, expireAfter 전략으로 Day-2 운영 안정화.
Exemplars + Derived Fields + tracesToLogs로 Logs/Metrics/Traces 상관분석. MTTR 단축 및 근본 원인 분석 가속화.
VPA로 리소스 최적화, KEDA로 이벤트 기반 스케일링(SQS/MSK/Istio RPS), Auto Mode가 최적 노드 선택.
질문과 답변
오늘 교육이 도움이 되셨나요?
피드백은 더 나은 콘텐츠를 만드는 데 큰 힘이 됩니다.
Session: EKS Auto Mode & Observability (2 Hours)