EKS 1.32 + Karpenter v1.5로 운영 중입니다. Spot 인스턴스를 적극 활용하고 있는데 인스턴스 회수(disruption)가 너무 자주 일어나서 일부 batch job이 30분도 못 살아남습니다.
Karpenter v1.5의 disruption budget 설정을 어떻게 잡아야 batch job 안정성을 유지할 수 있을까요? 단순히 on-demand로 다 바꾸기는 비용이 부담입니다.
EKS 1.32 + Karpenter v1.5로 운영 중입니다. Spot 인스턴스를 적극 활용하고 있는데 인스턴스 회수(disruption)가 너무 자주 일어나서 일부 batch job이 30분도 못 살아남습니다.
Karpenter v1.5의 disruption budget 설정을 어떻게 잡아야 batch job 안정성을 유지할 수 있을까요? 단순히 on-demand로 다 바꾸기는 비용이 부담입니다.
댓글 1
Karpenter v1.5에서 disruption 모델이 정리되었지만, 기본값이 비용 최적화 우선이라 batch 워크로드 입장에서는 공격적입니다. 핵심은 워크로드 종류별로 NodePool을 분리하는 것입니다.
1) 워크로드 분리 — NodePool 두 개 운영
그리고 batch job은 toleration으로 ondemand-batch에만 스케줄:
2) Spot 안정성 강화 — 다양화
Spot disruption 빈도는 인스턴스 타입·AZ 다양성과 직접 관련됩니다.
3) Spot interruption 미리 대응 — node-termination-handler
이게 있으면 EC2 회수 2분 알림을 받자마자 Pod를 graceful하게 빼냅니다.
4) PodDisruptionBudget 강제
Karpenter는 PDB를 존중합니다. minAvailable 위반 시 disruption 자동 보류.
5) Karpenter v1.5 disruption budget 활용
실무 체크리스트
대안 — Karpenter Spot Block (v1.5 신기능)
Spot인데 명시 시간(최대 6시간) 동안은 회수되지 않습니다. 가격은 일반 Spot보다 약 30% 비싸지만 batch에는 합리적입니다.
마지막으로 — "Spot이 너무 자주 죽는다"의 절반은 인스턴스 다양화 부족입니다. 단일 타입에 의존하면 그 풀의 가격 변동이 그대로 회수로 이어집니다.