두개의 조합을 사용했을 때 문제없이 완벽할 수 있을까??
장,단점이 궁금해서 발생할 수 있는 경우를 정리해본다.
karpenter 의 문제보다는 Spot 인스턴스의 트레이트오프에서 발생하는 문제점이 있을 수 있다.
1. 콜드 스타트 문제
콜드 스타트는 새로운 인스턴스나 컨테이너가 처음 시작될 때 발생하는 초기화 지연이 발생하는 것을 의미한다.
Karpenter는 이러한 것을 보완해줄 수 있지만 완벽히 해결,없애지는 못한다.
Spot 인터럽트 발생 시 pod가 트래픽을 받기까지 걸리는 시간
- 노드 프로비저닝 ~60초 (Karpenter가 빠르게 처리)
- 이미지 pull ~5~60초
- Spring boot 기동 ~30~120초
- 헬스체크 최대 00초 (설정에 따라)
이렇게 까지보면 평균 2~3분은 걸릴 것 같다.
그럼 서비스 중단이 일어나지 않을까??
콜드 스타트가 있어도 서비스가 끊기지 않는 이유는 Karpenter가 아니라 아키텍처 설계 때문이다.
보통 운영에서는 파드 1개로 운영하지는 않기때문에..
service-spot 노드 A -> pod-1 (트래픽 처리 중)
service-spot 노드 B -> pod-2 (트래픽 처리 중)
노드 A Spot 인터럽트 발생 (회수될 예정)
-> pod-1 종료
-> pod-2가 혼자 트래픽 전부 처리
-> 노드 C 생성 + pod-1 재기동 완료 후 복귀
Pod Anti-Affinity : 2개 파드가 반드시 다른 노드에 배치
HPA minReplicas: 2 (항상 최소 2개 유지)
startupProbe: 기동 완료 전까지 트래픽을 받지 않음
위와 같은 설정으로 서비스 중단없이 진행할 수 있다.
다시 한번 그림으로 보면 아래와 같다.
[ 정상 상태 ]
──────────────────────────────────────────────────────
노드 A (Spot) 노드 B (Spot)
┌─────────────┐ ┌─────────────┐
│ Pod-1 ✅ │ │ Pod-2 ✅ │
│ 트래픽 50% │ │ 트래픽 50% │
└─────────────┘ └─────────────┘
↑ ↑
└──────────────────────┘
ALB
[ T+0 : Spot 인터럽트 신호 수신 ]
──────────────────────────────────────────────────────
노드 A (Spot) ⚠️ 노드 B (Spot)
┌─────────────┐ ┌─────────────┐
│ Pod-1 🔄 │ │ Pod-2 ✅ │
│ Drain 시작 │ │ 트래픽 100% │ ← 혼자 처리
└─────────────┘ └─────────────┘
Karpenter: 새 노드 C 프로비저닝 시작 (~60초)
[ T+60초 : 새 노드 준비 완료 ]
──────────────────────────────────────────────────────
노드 A (종료) 노드 B (Spot) 노드 C (Spot) 🆕
┌─────────────┐ ┌─────────────┐
│ Pod-2 ✅ │ │ Pod-1 ❄️ │
│ 트래픽 100% │ │ 기동 중... │
└─────────────┘ └─────────────┘
← startupProbe 통과 전까지 트래픽 차단
[ T+60~180초 : 콜드 스타트 구간 ]
──────────────────────────────────────────────────────
노드 B (Spot) 노드 C (Spot)
┌─────────────┐ ┌─────────────┐
│ Pod-2 ✅ │ │ Pod-1 ❄️ │
│ 트래픽 100% │ │ 이미지 pull │
└─────────────┘ │ JVM 기동 │
│ 헬스체크 │
└─────────────┘
↑
사용자는 영향 없음
[ T+180초~ : 정상 복구 ]
──────────────────────────────────────────────────────
노드 B (Spot) 노드 C (Spot)
┌─────────────┐ ┌─────────────┐
│ Pod-2 ✅ │ │ Pod-1 ✅ │
│ 트래픽 50% │ │ 트래픽 50% │
└─────────────┘ └─────────────┘
↑ ↑
└────────────────┘
ALB
--
2. spot은 실제로 얼마나 자주 회수될까 ?
AWS Spot Instance Advisor 기준 ARM64 Graviton 인스턴스의 회수 빈도는
- 회수 빈도: < 5~15% (한 달 기준)
- 즉, 한 달에 한 번 회수될까 말까 수준
일반 x86 대비 Gravition이 회수율이 낮은 이유는 수요가 상대적으로 적어서 AWS 유휴 자원이 더 풍부하다고 한다.
* https://aws.amazon.com/ko/ec2/spot/instance-advisor/
인스턴스 별 온디맨드 대비 절감액, 중단빈도 등 확인할 수 있다.
Amazon EC2 스팟 인스턴스 - AWS
* 온디맨드와 비교한 비용 절감은 지난 30일 간에 걸쳐 계산됩니다. 요금 이력 데이터는 전체 가용 영역의 평균이며 제공이 늦어질 수 있습니다. 현재 스팟 가격을 보려면 AWS Management Console의 스
aws.amazon.com
--
3. 진행 중인 API 요청은 유실될까?
설정이 올바르면 유실되지 않는다.
- ALB에서 해당 파드 제거 (신규 요청 차단)
- 진행 중인 요청 처리 완료 대기
- 대기 시간 초과 시 강제 종료 (terminationGracePeriodSeconds 설정)
* 설정안하면 기본 시간 30초 -> spot 인터럽트가 최대 2분이므로, 2분 초과는 효과 없음
--
4. Gravition(ARM64)을 선택한 이유
인프라 계획시 비용을 가장 우선시했다.
같은 스펙 기준 대비 약 20% 이상 저렴하다.
m6i.xlarge (x86, 4코어/16GB): $0.192/h
m6g.xlarge (ARM64, 4코어/16GB): $0.154/h → 20% 저렴
여기서 Spot 할인까지 적용하면 차이가 더 벌어진다.
추가적으로 Spot 재고는 x86 대비 수요가 적어서 비교적 풍부하고 회수율이 낮은 장점이 있다.
성능적인 면에서도 x86보다 최대 40% 높은 성능을 제공하고,
현재 프로젝트인 spring boot 기반 java 애플리케이션에서도 ARM64가 호환이 가능하다.
단점으로는 Graviton이 비용/성능 면에서 유리하지만 생태계가 x86보다 좁다.
새 도구를 도입할 떄마다 ARM64 지원 여부를 먼저 확인해야 하는 단점이 있다.
--
5. Spot 노드가 모두 동시에 회수되면?
특정 AZ 전체 장애가 나거나, 특정 인스턴스 타입 재고가 완전 소진되는 경우가 있을 '수' 있다.
이를 대비하기 위한 방법으로는 인스턴스 타입을 다양화 시키는 방안이 있다.
# 현재: 4코어 고정
{ key = "karpenter.k8s.aws/instance-cpu", values = ["4"] }
# 개선: 4코어 + 8코어 허용
{ key = "karpenter.k8s.aws/instance-cpu", values = ["4", "8"] }
{ key = "karpenter.k8s.aws/instance-family", values = ["m6g", "c6g", "r6g", "m7g", "c7g"] }
인스턴스 타입 풀이 넓을수록 동시 회수 리스크가 줄어든다.
--
6. Karpenter가 죽으면?
먼저 Karpenter가 하는 일은
- 새 pod 생성 요청이 오면 노드 프로비저닝
- 노드가 비어있을 때 노드 삭제
- spot 인터럽트가 오면 신호 수신 후 대응
이러한 역할을 하는데 죽게 되면
- 기존 노드와 pod는 영향이 없다 (계속 동작)
- 신규 노드 생성이 불가능
- spot 인터럽트가 일어나면 노드는 강제종료 되지만 pod 이동이 불가능하다.
- Consolidation도 중단
즉, 기존 서비스는 살아있지만 확장/복구 능력을 잃는다.
'DevOps' 카테고리의 다른 글
| CSI, CRD, CRI, CNI (0) | 2026.05.17 |
|---|---|
| Kubernetes Architecture (0) | 2026.05.16 |
| Karpenter + Spot 조합을 알아보자 (1) (0) | 2026.05.13 |
| 노드에 파드 할당하기 (0) | 2026.05.13 |
| EKS에서 파드에 AWS 권한 부여하는 3가지 방법 (0) | 2026.05.10 |