AWS EKS에서 GPU 서버 비용을 줄이기 위해 EC2 Spot과 Karpenter를 프로덕션에 적용한 구성과 안전장치를 설명한다. Cluster Autoscaler보다 빠르고 다양한 인스턴스 타입을 유연하게 고르는 Karpenter로 전환하고, Spot 회수 전후 처리는 Node Termination Handler로 보완했다. 마지막에는 AWS Fault Injection Simulator로 2분 회수 이벤트를 실제처럼 발생시켜 노드 교체 경로를 검증한다.
핵심 포인트- Spot은 On-Demand보다 최대 90% 저렴하지만 용량 부족 시 2분 안에 회수될 수 있고 SLA도 적용되지 않는다.
- Cluster Autoscaler는 Auto Scaling Group 크기를 조정해 노드를 만들기 때문에 느리고 GPU별 Node Group 추가도 번거로웠다.
- Karpenter는 EC2를 직접 생성하고 CRD로 노드 요구사항을 관리해 빠른 프로비저닝과 다양한 타입 선택을 지원한다.
- 여러 AZ와 인스턴스 타입을 열어 Spot capacity를 넓히고 priceCapacityOptimized 전략으로 가격과 가용성을 함께 고려했다.
- Node Termination Handler가 Rebalance Recommendation에 선제 대응하고 FIS가 실제 중단 시나리오를 검증했다.
상세 정리- 운영 배경: AI 모델별로 최적 GPU가 달라 여러 고가 인스턴스 타입을 EKS에서 사용했다. 비용 절감을 위해 Inferentia와 custom metric scaling에 이어 Spot을 검토했다.
- Spot 특성: AWS의 남는 EC2 용량을 할인받는 대신 회수 가능성을 감수한다. Fault Tolerant한 워크로드에서만 비용 장점이 의미 있다.
- 중단 신호: Spot Interrupt는 회수 2분 전에 온다. Rebalance Recommendation은 최대 15분 전에 올 수 있지만 best-effort라 항상 발생하는 신호는 아니다.
- 기존 병목: Cluster Autoscaler는 unscheduled Pod가 생기면 ASG desired size를 바꾼다. Spot 중단 뒤 새 노드가 빨리 필요할 때 반응이 늦었다.
- 타입 확장 문제: 새로운 GPU나 CPU 타입을 추가할 때 eksctl과 CloudFormation으로 Node Group을 만들어야 해 변경 속도가 느렸다.
- Karpenter 선택: Karpenter는 EC2 인스턴스를 직접 만들고 Kubernetes CRD로 사양을 선언한다. Helm과 ArgoCD에 익숙한 개발자가 Git으로 노드 타입을 관리할 수 있다.
- 설치 격리: Karpenter 자체는 EKS Managed Node Group에 배치하고 taint와 toleration으로 다른 워크로드와 분리했다.
- AWSNodeTemplate: Subnet, Security Group, userdata, EBS를 정의했다. 예시 디스크는 gp3 100Gi, 3,000 IOPS, 125 throughput으로 구성했다.
- AZ 확보: Spot capacity가 AZ마다 달라 리전의 모든 AZ Subnet을 선택지에 넣어 회수와 할당 실패 위험을 낮췄다.
- Provisioner: 인스턴스 타입, CPU 아키텍처, Spot·On-Demand 허용 여부, consolidation을 Kubernetes 요구사항으로 선언했다.
- 할당 전략: Karpenter는 Spot Fleet의 priceCapacityOptimized 전략을 사용한다. 다양한 인스턴스 타입을 허용할수록 capacity 부족과 비용을 줄일 수 있다.
- 타입 제한: 팀의 서버는 하드웨어 민감도가 높아 CPU·메모리 속성만으로 자동 선택하지 않고 검증된 인스턴스 타입을 직접 지정했다.
- 중단 처리: Karpenter도 Spot Interrupt를 처리하지만 Rebalance Recommendation은 다루지 않았다. NTH를 함께 배포해 신호 발생 시 노드를 cordon하고 Pod를 drain했다.
- 선제 이동: NTH가 회수 전에 Pod를 On-Demand 또는 다른 Spot 노드로 옮기게 했다. 팀은 최소 On-Demand 수량과 별도 Rebalance 처리도 추가했다.
- 장애 주입과 결과: FIS의 aws:ec2:send-spot-instance-interruptions 액션으로 대상 Spot에 PT2M 중단을 발생시켜 Karpenter와 NTH 동작을 테스트했다. 초기 시행착오 뒤 중단 대응 안정성을 확보하면서 프로덕션 서버를 더 낮은 비용으로 운영했다.
왜 읽나EKS의 비용을 Spot으로 줄이면서 노드 생성 속도, capacity 분산, 회수 처리, 장애 주입까지 운영 안전성을 설계하려는 인프라 엔지니어에게 실전적이다.