EKS GPU 노드 전 략: Auto Mode + Karpenter + Hybrid Node
1. 개요
EKS에서 GPU 워크로드를 운영할 때 노드 타입 선택은 운영 복잡도, 비용, 기능 활용도에 직접적인 영향을 미칩니다. GPU 추론과 훈련 워크로드는 일반 컨테이너 워크로드와 달리 다음과 같은 특수한 요구사항을 가집니다:
- 드라이버 의존성: NVIDIA GPU 드라이버, Container Toolkit, Device Plugin
- 고급 기능: MIG (Multi-Instance GPU), vGPU, Time-Slicing
- 모니터링: DCGM (Data Center GPU Manager) 기반 메트릭
- 스케줄링: Fractional GPU, Topology-Aware Placement, Gang Scheduling
AWS EKS는 GPU 워크로드를 위해 4가지 노드 타입을 제공합니다:
- EKS Auto Mode: AWS가 전체 노드 라이프사이클을 관리 (드라이버 사전 설치)
- Karpenter (Self-Managed): 자동 스케일링 + 사용자 정의 가능
- Managed Node Group: AWS 관리 노드 그룹 (제한적 자동 스케일링)
- Hybrid Node: 온프레미스 서버를 EKS 클러스터에 연결
핵심 원칙: 하나의 EKS 클러스터에서 여러 노드 타입을 동시에 운영할 수 있습니다. 이를 활용해 워크로드 특성에 맞는 최적의 노드 전략을 구성할 수 있습니다.
주요 목표
- Auto Mode의 제약사항 이해 (특히 GPU Operator 불가 이유)
- Karpenter + GPU Operator 조합의 장점
- Run:ai, DCGM, GPU Operator 의존 관계
- 하이브리드 아키텍처 설계 (Auto Mode + Karpenter + Hybrid Node)
2. EKS 노드 타입별 특성 비교
| 특성 | Auto Mode | Karpenter | Managed Node Group | Hybrid Node |
|---|---|---|---|---|
| 관리 주체 | AWS 완전 관리 | Self-Managed (사용자) | AWS 관리 | On-Premises 관리 |
| 자동 스케일링 | 자동 (AWS 제어) | 자동 (NodePool 기반) | 수동/제한적 | 수동 |
| Custom AMI | 불가 | 가능 | 가능 | 가능 |
| SSH 접근 | 불가 | 가능 | 가능 | 가능 |
| GPU 드라이버 | 사전 설치 (AWS) | 사용자 설치 | 사용자 설치 | 사용자 설치 |
| GPU Operator 호환 | 불가 | 가능 | 가능 | 가능 |
| Privileged DaemonSet | 제한적 | 가능 | 가능 | 가능 |
| Root Filesystem | Read-Only | Read-Write | Read-Write | Read-Write |
| SELinux | Enforcing | Permissive | Permissive | 사용자 설정 |
| MIG 지원 | 불가 (GPU Operator 필요) | 가능 | 가능 | 가능 |
| DCGM Exporter | 수동 설치 가능 | GPU Operator 포함 | 수동 설치 | GPU Operator 포함 |
| Run:ai 호환 | 불가 | 가능 | 가능 | 가능 |
| 비용 | 낮음 (관리 불필요) | 중간 | 중간 | 낮음 (Capex) |
| 적합 워크로드 | 단순 추론 | 고급 GPU 기능 | 정적 워크로드 | 온프레미스 통합 |
핵심 인사이트:
- Auto Mode: GPU 드라이버가 사전 설치되어 즉시 사용 가능하지만, GPU Operator를 설치할 수 없음
- Karpenter: Auto Mode의 자동 스케일링 장점 + GPU Operator 설치 가능
- Hybrid Node: 온프레미스 GPU 서버를 EKS로 통합 (GPU Operator 필수)
3. EKS Auto Mode의 GPU 지원과 제약
3.1 Auto Mode가 자동 제공하는 GPU 스택
EKS Auto Mode는 GPU 인스턴스 (p5, g6e, g5 등)에서 다음을 사전 설치합니다:
# Auto Mode GPU Node에서 자동 제공되는 컴포넌트
1. NVIDIA GPU 드라이버
- AWS가 관리하는 드라이버 버전
- /dev/nvidia* 디바이스 자동 생성
2. NVIDIA Container Toolkit
- containerd 플러그인 자동 구성
- nvidia-container-runtime 설치
3. NVIDIA Device Plugin
- kubernetes.io/nvidia-gpu 리소스 자동 등록
- GPU 디바이스 스케줄링 가능
4. GPU 리소스 등록
- Pod에서 nvidia.com/gpu: 1 요청 가능
- Topology-aware scheduling 지원
장점: Pod에서 바로 GPU 사용 가능
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
nodeSelector:
karpenter.sh/nodepool: auto-mode-gpu # Auto Mode NodePool
3.2 Auto Mode에서 GPU Operator를 설치할 수 없는 이유
핵심: "안 하는 게 아니라 못 하는 것"
많은 사용자가 "Auto Mode에서 GPU Operator를 설치하면 되지 않나?"라고 질문합니다. 하지만 기술적으로 불가능합니다.
구조적 제약 사항
| GPU Operator 동작 | 필요 권한 | Auto Mode 상태 | 결과 |
|---|---|---|---|
| Driver DaemonSet | Host /lib/modules 쓰기 | Read-Only Filesystem | FAIL |
| Container Toolkit | Host /usr/bin, /etc/containerd 쓰기 | Read-Only + AWS 관리 | FAIL |
| Device Plugin | Privileged DaemonSet | 이미 AWS가 등록 | CONFLICT |
| MIG Manager | nvidia-smi 호스트 실행 | Read-Only + No SSH | FAIL |
| DCGM Exporter | GPU 디바이스 접근 | Partially Possible | PARTIAL |
1) Read-Only Root Filesystem
# Auto Mode 노드에 접근 불가 (SSH/SSM 차단)
# 만약 접근 가능했다면 다음과 같은 상태:
$ mount | grep "/ "
/dev/nvme0n1p1 on / type ext4 (ro,relatime)
# ↑ "ro" = read-only
# GPU Operator Driver DaemonSet가 시도하는 작업:
$ nvidia-installer --kernel-module-only
ERROR: Unable to write to /lib/modules/5.15.0-1234-aws/
ERROR: Filesystem is read-only
GPU Operator의 Driver DaemonSet은 호스트 /lib/modules에 커널 모듈을 설치해야 하는데, Auto Mode는 루트 파일시스템이 Read-Only입니다.
2) SELinux Enforcing
$ getenforce
Enforcing
# GPU Operator Container Toolkit이 시도하는 작업:
$ ln -s /usr/bin/nvidia-container-toolkit /host/usr/bin/
ln: failed to create symbolic link: SELinux policy denies access
Auto Mode는 SELinux Enforcing 모드로 고정되 어 GPU Operator의 호스트 파일 수정이 차단됩니다.
3) Device Plugin 이중 등록 충돌
# Auto Mode는 이미 AWS가 관리하는 Device Plugin 실행 중
$ kubectl get pods -n kube-system | grep device-plugin
nvidia-device-plugin-daemonset-aws-managed-xxxxx 1/1 Running
# GPU Operator를 설치하면:
$ helm install gpu-operator nvidia/gpu-operator
# 결과: 두 개의 Device Plugin이 동일한 리소스 등록 시도
nvidia.com/gpu (AWS)
nvidia.com/gpu (GPU Operator)
# Kubelet 에러 발생:
E0316 12:34:56.789012 kubelet.go:2345] Failed to register resource provider:
duplicate resource name "nvidia.com/gpu"
Auto Mode의 AWS 관리 Device Plugin과 GPU Operator의 Device Plugin이 동일한 리소스를 등록하려고 하면 충돌이 발생합니다.
4) No SSH / No SSM Access
# Auto Mode 노드는 SSH, SSM Session Manager 모두 차단
$ aws ssm start-session --target i-0123456789abcdef
An error occurred (TargetNotConnected): The specified target instance is not connected.
# MIG 설정, 드라이버 업그레이드, 디버깅 모두 불가
$ nvidia-smi -mig 1
ERROR: Cannot access node shell
GPU Operator의 MIG Manager는 노드 셸 접근이 필요하지만, Auto Mode는 보안상 모든 접근을 차단합니다.
3.3 "driver: false 로 설치하면?" — 그래도 안 되는 이유
일부 사용자는 다음과 같이 시도합니다:
# GPU Operator Helm Values
driver:
enabled: false # AWS가 이미 설치했으니 드라이버 스킵
toolkit:
enabled: false # Container Toolkit도 스킵
devicePlugin:
enabled: true # Device Plugin만 사용
migManager:
enabled: true # MIG 관리 활성화
dcgm:
enabled: true # 모니터링 활성화
이 방법도 실패합니다. 이유:
1) Device Plugin 이중 등록 충돌 (위와 동일)
# AWS Device Plugin vs GPU Operator Device Plugin
# 동일한 nvidia.com/gpu 리소스 등록 시도 → 충돌