EKS GPU 노드 전략
개요
EKS에서 GPU 워크로드를 운영할 때 노드 타입 선택은 운영 복잡도, 비용, 기능 활용도에 직접적인 영향을 미칩니다. GPU 추론과 훈련 워크로드는 일반 컨테이너 워크로드와 달리 다음과 같은 특수한 요구사항을 가집니다:
- 드라이버 의존성: NVIDIA GPU 드라이버, Container Toolkit, Device Plugin
- 고급 기능: MIG (Multi-Instance GPU), Time-Slicing, Fractional GPU
- 모니터링: DCGM (Data Center GPU Manager) 기반 메트릭
- 스케줄링: Topology-Aware Placement, Gang Scheduling
AWS EKS는 GPU 워크로드를 위해 4가지 노드 타입을 제공합니다:
| 노드 타입 | 설명 |
|---|---|
| EKS Auto Mode | AWS가 전체 노드 라이프사이클을 관리 (GPU 드라이버 사전 설치) |
| Karpenter | 자동 스케일링 + Custom AMI, MIG 등 완전한 사용자 정의 |
| Managed Node Group | AWS 관리 노드 그룹, DRA(Dynamic Resource Allocation) 유일 지원 |
| Hybrid Node | 온프레미스 GPU 서버를 EKS 클러스터에 연결 |
하나의 EKS 클러스터에서 여러 노드 타입을 동시에 운영할 수 있습니다. 워크로드 특성에 맞는 최적의 노드 조합을 구성하세요.
이 문서의 범위
이 문서는 노드 타입 선택과 하이브리드 아키텍처 설계에 집중합니다. GPU Operator/DCGM/Dynamo 등 NVIDIA 소프트웨어 스택 상세, GPU 오토스케일링, llm-d 분산 추론, 보안/트러블슈팅은 각 전문 문서에서 다룹니다 (문서 하단 "관련 문서" 참조).
노드 타입별 특성 비교
기능 비교 테이블
| 특성 | Auto Mode | Karpenter | Managed Node Group | Hybrid Node |
|---|---|---|---|---|
| 관리 주체 | AWS 완전 관리 | Self-Managed | AWS 관리 | On-Premises |
| 자동 스케일링 | 자동 (AWS 제어) | 자동 (NodePool 기반) | 수동/제한적 | 수동 |
| Custom AMI | 불가 | 가능 | 가능 | 가능 |
| SSH 접근 | 불가 | 가능 | 가능 | 가능 |
| GPU 드라이버 | 사전 설치 (AWS) | 사용자 설치 | 사용자 설치 | 사용자 설치 |
| GPU Operator | 가능 (Device Plugin 레이블 비활성화) | 가능 | 가능 | 가능 |
| Root Filesystem | Read-Only | Read-Write | Read-Write | Read-Write |
| MIG 지원 | 불가 (NodeClass read-only) | 가능 | 가능 | 가능 |
| DRA 호환 | 불가 (관리형 내부 Karpenter, 버전 고정) | v1.14.0+ 지원 (Provider v1.14.0부터, v1.13 이하 미지원) | 가능 (권장) | 가능 |
| DCGM Exporter | GPU Operator로 설치 | GPU Operator 포함 | 수동 설치 | GPU Operator 포함 |
| Run:ai 호환 | 가능 (Device Plugin 비활성화) | 가능 | 가능 | 가능 |
| 비용 | 낮음 (관리 불필요) | 중간 | 중간 | 낮음 (Capex) |
| 적합 워크로드 | 단순 추론 | 고급 GPU 기능 | DRA 워크로드 | 온프레미스 통합 |
워크로드별 노드 선택 가이드
Auto Mode를 선택하는 경우:
- GPU 드라이버 관리 부담 없이 빠르게 추론 서비스를 시작하고 싶을 때
- MIG, Fractional GPU가 불필요한 대형 모델 (70B+) 서빙
- 시스템/비GPU 워크로드 (API Gateway, Agent, Observability)
Karpenter를 선택하는 경우:
- MIG 파티셔닝, Custom AMI, Spot Instance 유연한 제어가 필요할 때
- Run:ai, KAI Scheduler 등 GPU Operator ClusterPolicy 의존 프로젝트 사용
- 중소형 모델의 GPU 활용률 최적화 (MIG 분할)
Managed Node Group을 선택하는 경우:
- DRA(Dynamic Resource Allocation) 기반 GPU 관리가 필요할 때
- P6e-GB200 UltraServer 등 DRA 전용 인스턴스 사용
Hybrid Node를 선택하는 경우:
- 기존 온프레미스 GPU 서버 자산을 EKS에 통합할 때
- 데이터 주권 (Data Residency) 요구사항
EKS Auto Mode GPU 지원과 제약
Auto Mode 기본 GPU 스택
EKS Auto Mode는 GPU 인스턴스에서 다음을 사전 설치합니다:
- NVIDIA GPU 드라이버 - AWS 관리 버전,
/dev/nvidia*디바이스 자동 생성 - NVIDIA Container Toolkit - containerd 플러그인 자동 구성
- NVIDIA Device Plugin -
nvidia.com/gpu리소스 자동 등록 - GPU 리소스 등록 - Pod에서
nvidia.com/gpu: 1요청 즉시 가능
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
containers:
- name: cuda-test
image: nvidia/cuda:12.2.0-runtime-ubuntu22.04
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
Auto Mode에서 GPU Operator 설치 — Device Plugin 비활성화 패턴
GPU Operator는 Auto Mode에서 설치 가능합니다. 핵심은 Device Plugin만 노드 레이블로 비활성화하고 나머지 컴포넌트(DCGM Exporter, NFD, GFD)는 정상 운영하는 것입니다. 이 패턴은 awslabs/ai-on-eks PR #288에서 검증되었습니다.
왜 GPU Operator가 필요한가? KAI Scheduler, Run:ai 등 여러 프로젝트는 GPU Operator의 ClusterPolicy CRD에 의존합니다. ClusterPolicy 없이는 이들 프로젝트가 시작조차 하지 못합니다. Auto Mode에서도 GPU Operator를 설치해야 하는 핵심 이유입니다.
ClusterPolicy CRD (GPU Operator)
↓ depends on
KAI Scheduler (GPU-aware Pod 배치)
Run:ai (Fractional GPU, Gang Scheduling)
↓ reads
DCGM Exporter (GPU 메트릭)
NFD/GFD (하드웨어 레이블)
컴포넌트별 활성화 기준(환경별 매트릭스), Device Plugin 비활성화 NodePool 레이블, Auto Mode용/Karpenter용 Helm values 전체는 NVIDIA GPU 스택 — EKS 환경별 GPU Operator 구성을 참조하세요.
GPU Operator 설치는 가능하지만, NodeClass가 read-only이므로 다음은 불가합니다:
- MIG 파티셔닝: NodeClass에서 MIG 프로파일 설정 불가
- Custom AMI: 특정 드라이버 버전 핀 불가
- SSH/SSM 접근: 노드 직접 디버깅 불가
MIG 기반 GPU 분할이 필요하면 Karpenter + GPU Operator로 전환하세요.
대형 GPU 인스턴스 지원 현황 (2026.04 검증 시점 기준, 재검증 필요)
GLM-5 (744B MoE) 배포 과정에서 확인한 Auto Mode의 대형 GPU 인스턴스 지원 현황입니다. p5.48xlarge는 Spot 프로비저닝이 확인되었으나, p5en/p6는 2026.04 검증 시점에서 제약이 있었습니다 (재검증 필 요).
상세 지원 현황: EKS Auto Mode GPU 인스턴스 지원 현황 참조
Auto Mode + MNG 하이브리드 제약
p5en/p6 사용을 위해 Auto Mode 클러스터에 MNG를 추가하는 하이브리드 패턴은 현재 불가능합니다:
- MNG 생성 시
CREATING상태에서 30분 이상 멈춤 - CloudFormation 스택의
Resources필드가null로 유지 - Auto Mode의 managed compute 레이어와 MNG의 ASG 기반 관리가 내부적으로 충돌
결론: 대형 GPU (H200+, B200) 사용 시 EKS Standard Mode + Karpenter + MNG를 사용하세요.
Device Plugin 충돌 해결
Auto Mode 노드에서 GPU Operator를 devicePlugin.enabled=true로 설치하면 내장 Device Plugin과 충돌합니다.
kubectl describe node <gpu-node> | grep nvidia.com/gpu
# Allocatable: nvidia.com/gpu: 0 (예상: 8)
해결: NodePool에 nvidia.com/gpu.deploy.device-plugin: "false" 레이블 추가 (위 "Device Plugin 비활성화 패턴" 섹션 참조)
노드 강제 종료 제약
Auto Mode가 관리하는 EC2 인스턴스는 ec2:TerminateInstances를 차단합니다. 비정상 노드 복구 절차:
- 워크로드 삭제:
kubectl delete pod <gpu-pod> - NodeClaim 삭제:
kubectl delete nodeclaim <nodeclaim-name> - Karpenter가 Empty 노드 감지 후 자동 종료 (5-10분)
- 새 NodeClaim 생성으로 정상 노드 시작
Consolidation과 단 일 Replica 서비스 가용성 (2026.07 검증)
Auto Mode의 내장 Karpenter는 비용 최적화를 위해 노드 consolidation(통합·회수)을 상시 수행합니다. 이 과정에서 replica 1개로 운영되는 서비스는 Pod 재배치 동안 ALB 타깃그룹에 healthy 타깃이 없어져 503을 반환합니다. 응답 헤더가 server: awselb/2.0이면 애플리케이션이 아닌 ALB가 직접 생성한 503입니다.
실제 사례: Langfuse(replica 1)를 Auto Mode 클러스터에서 운영할 때, consolidation이 하루 수차례 노드를 교체하면서 타깃 Deregister → 신규 Pod 기동 → Register 사이의 공백마다 503이 발생했습니다. CloudTrail에서 eks-auto-mode-compute 역할의 TerminateInstances와 타깃그룹 DeregisterTargets/RegisterTargets 이벤트가 반복되는 패턴으로 확인할 수 있습니다.
해결 — 4가지를 세트로 적용해야 합니다. replicas 증설만으로는 불충분합니다:
- replicas 2 + PodDisruptionBudget: Karpenter는 PDB를 존중하므로
minAvailable: 1PDB가 있어야 순차 evict가 강제됩니다. PDB 없이 replicas만 늘리면 두 Pod가 연달아 evict될 수 있습니다.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: langfuse-web
spec:
minAvailable: 1
selector:
matchLabels:
app: langfuse-web
- 노드 분산: 두 replica가 같은 노드에 스케줄되면 노드 1개 회수로 동시에 중단됩니다.
topologySpreadConstraints또는 hostname 기준podAntiAffinity로 분산합니다.
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: langfuse-web
- ALB Pod Readiness Gate: Pod가 Ready여도 ALB 타깃은 아직
initial상태일 수 있습니다. 네임스페이스에 readiness gate 주입 라벨을 추가하면 ALB 헬스체크 통과까지 Pod가 Ready로 간주되지 않아, "신규 타깃 healthy 확인 → 기존 타깃 제거" 순서가 강제됩니다.
kubectl label namespace <ns> elbv2.k8s.aws/pod-readiness-gate-inject=enabled
- (대안) Disruption 제외: replica를 늘릴 수 없는 워크로드는 Pod에
karpenter.sh/do-not-disrupt: "true"어노테이션을 추가해 consolidation 대상에서 제외합니다. 단, 해당 노드는 비용 최적화 대상에서도 제외됩니다.
Auto Mode 인스턴스 지원 확인 방법
NodePool dry-run으로 특정 인스턴스 타입의 지원 여부를 사전 확인할 수 있습니다:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: gpu-test-dryrun
spec:
template:
spec:
requirements:
- key: node.kubernetes.io/instance-type
operator: In
values: ["p5en.48xlarge"]
nodeClassRef:
group: eks.amazonaws.com
kind: NodeClass
name: default
limits:
nvidia.com/gpu: "8"
dry-run 후 kubectl get nodeclaim 이벤트에서 NoCompatibleInstanceTypes가 발생하면 해당 인스턴스 타입은 Auto Mode에서 미지원입니다.
Karpenter GPU NodePool 구성
Karpenter 선택 기준
Karpenter는 Auto Mode의 자동 스케일링 장점을 유지하면서, GPU Operator를 완전히 활용할 수 있는 최적의 균형점입니다. Auto Mode와의 항목별 차이는 위 기능 비교 테이블을 참조하세요. 요약하면 Custom AMI·MIG·Spot 완전 지원이 Karpenter를 선택하는 결정 요인입니다.
NodePool·비용 구성 참조
추론/훈련 NodePool YAML, EC2NodeClass, Spot + On-Demand fallback, 토폴로지·Gang Scheduling, Spot 가격 비교와 비용 최적화 전략은 GPU 리소스 관리에서 다룹니다. Karpenter 노드 전용 GPU Operator Helm values는 NVIDIA GPU 스택 — EKS 환경별 GPU Operator 구성을 참조하세요.
노드 전략 관점의 요점은 다음과 같습니다.
- 추론 NodePool: On-Demand 우선,
consolidationPolicy: WhenEmpty로 서빙 중단 최소화 - 훈련 NodePool:
capacity-type: [spot, on-demand]로 Spot 우선 + fallback,consolidateAfter: 30m으로 훈련 중단 방지 - Spot 절감률: p5/p5en/p6 계열은 Spot으로 약 69-85% 절감 가능 (PoC/데모 환경 적극 활용)