EKS 고가용성 아키텍처 가이드
📅 작성일: 2026-02-10 | 수정일: 2026-02-13 | ⏱️ 읽는 시간: 약 20분
📌 기준 환경: EKS 1.30+, Karpenter v1.x, Istio 1.22+
1. 개요
레질리언시(Resiliency)는 시스템이 장애에 직면했을 때 정상 상태로 복구하거나, 장애 영향을 최소화하면서 서비스를 유지하는 능력입니다. 클라우드 네이티브 환경에서 레질리언시의 핵심 원칙은 단순합니다: 장애는 반드시 발생한다 — 설계로 대비한다.
단일 Pod 장애부터 리전 전체 장애까지, 각 계층에서 발생할 수 있는 Failure Domain을 이해하고 그에 맞는 방어 전략을 수립하는 것이 EKS 운영의 핵심입니다.
Failure Domain 계층 구조
레질리언시 성숙도 모델
조직의 레 질리언시 수준을 4단계로 분류하고, 현재 위치에서 점진적으로 발전시켜 나갈 수 있습니다.
| Level | 단계 | 핵심 역량 | 구현 항목 | 복잡성 | 비용 영향 |
|---|---|---|---|---|---|
| 1 | 기본 (Basic) | Pod 수준 복원력 | Probe 설정, PDB, Graceful Shutdown, 리소스 Limits | 낮음 | 최소 |
| 2 | Multi-AZ | AZ 장애 내성 | Topology Spread, Multi-AZ NodePool, ARC Zonal Shift | 중간 | Cross-AZ 트래픽 비용 |
| 3 | Cell-Based | Blast Radius 격리 | Cell Architecture, Shuffle Sharding, 독립 배포 | 높음 | Cell 별 오버헤드 |
| 4 | Multi-Region | 리전 장애 내성 | Active-Active 아키텍처, Global Accelerator, 데이터 복제 | 매우 높음 | 리전 별 인프라 비용 |
운영 중 장애 진단 및 해결은 EKS 장애 진단 및 대응 가이드를 참조하세요. 본 문서는 장애 예방과 설계에 초점을 맞추고 있으며, 실시간 트러블슈팅은 장애 진단 및 대응 가이드에서 다룹니다.
2. Multi-AZ 전략
Multi-AZ 배포는 EKS 레질리언시의 가장 기본적이면서도 강력한 전략입니다. 단일 AZ 장애가 서비스 전체를 중단시키지 않도록 워크로드를 여러 가용 영역에 분산합니다.
Pod Topology Spread Constraints
Topology Spread Constraints는 Pod를 AZ, 노드, 커스텀 토폴로지 도메인에 걸쳐 균등하게 분산시킵니다. minDomains 파라미터(K8s 1.24 alpha → 1.30 GA)를 통해 최소 분산 도메인 수를 지정할 수 있습니다.
| 파라미터 | 설명 | 권장값 |
|---|---|---|
maxSkew | 도메인 간 Pod 수 최대 차이 | AZ: 1, 노드: 2 |
topologyKey | 분산 기준 레이블 | topology.kubernetes.io/zone |
whenUnsatisfiable | 조건 불충족 시 동작 | DoNotSchedule (hard) 또는 ScheduleAnyway (soft) |
minDomains | 최소 분산 도메인 수 | AZ 수와 동일 (예: 3) |
labelSelector | 대상 Pod 선택 | Deployment의 matchLabels와 동일 |
Hard + Soft 조합 전략 (권장):
apiVersion: apps/v1
kind: Deployment
metadata:
name: critical-app
spec:
replicas: 6
selector:
matchLabels:
app: critical-app
template:
metadata:
labels:
app: critical-app
spec:
topologySpreadConstraints:
# Hard: AZ 간 균등 분산 (반드시 보장)
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: critical-app
minDomains: 3
# Soft: 노드 간 분산 (가능한 한 보장)
- maxSkew: 2
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: critical-app
maxSkew: 1은 가장 엄격한 균등 분산을 보장합니다. 6개 replica를 3 AZ에 배포하면 각 AZ에 정확히 2개씩 배치됩니다. 스케일링 속도가 중요한 경우 maxSkew: 2로 느슨하게 설정하여 스케줄링 유연성을 확보할 수 있습니다.