이 퀴즈는 Amazon EKS 클러스터의 고가용성(HA), 복원력, Multi-AZ 배포, Cell-Based Architecture, Chaos Engineering, PodDisruptionBudget, Topology Spread Constraints에 대한 이해를 테스트합니다.
퀴즈 개요
Multi-AZ 아키텍처 및 구성
Cell-Based Architecture 패턴
Chaos Engineering 원칙 및 도구
PodDisruptionBudget (PDB) 구성
Topology Spread Constraints
장애 복구 및 재해 복구
객관식 문제
1. Amazon EKS에서 Multi-AZ 배포의 가장 큰 이점은 무엇인가요?
A. 비용 절감 B. 단일 AZ 장애 시에도 애플리케이션 가용성 유지 C. 네트워크 지연 시간 증가 D. 관리 복잡성 감소
정답 보기
정답: B. 단일 AZ 장애 시에도 애플리케이션 가용성 유지
설명: Multi-AZ 배포의 핵심 이점은 단일 가용 영역(AZ)에 장애가 발생하더라도 다른 AZ에서 워크로드가 계속 실행될 수 있어 애플리케이션의 가용성을 유지할 수 있다는 것입니다.
Multi-AZ 배포의 주요 이점:
단일 AZ 장애 시 자동 페일오버
데이터센터 수준의 장애 복원력
99.99% 이상의 가용성 달성 가능
지역 내 재해 복구 능력 향상
# Multi-AZ를 위한 노드 그룹 구성 예시apiVersion:eksctl.io/v1alpha5kind:ClusterConfigmetadata:name:ha-clusterregion:ap-northeast-2nodeGroups:-name:ng-multi-azinstanceType:m5.largedesiredCapacity:6availabilityZones:["ap-northeast-2a","ap-northeast-2b","ap-northeast-2c"]
2. PodDisruptionBudget(PDB)의 주요 목적은 무엇인가요?
A. Pod의 CPU 사용량 제한 B. 자발적 중단 시 최소 가용 Pod 수 보장 C. Pod 간 네트워크 트래픽 제어 D. Pod의 메모리 사용량 모니터링
정답 보기
정답: B. 자발적 중단 시 최소 가용 Pod 수 보장
설명: PodDisruptionBudget(PDB)은 노드 드레인, 클러스터 업그레이드, 자동 스케일링 등 자발적 중단(Voluntary Disruption) 상황에서 최소한의 Pod가 항상 실행 상태를 유지하도록 보장합니다.
PDB의 핵심 기능:
minAvailable: 항상 유지해야 할 최소 Pod 수
maxUnavailable: 동시에 중단될 수 있는 최대 Pod 수
롤링 업데이트 및 노드 유지보수 시 서비스 연속성 보장
3. Topology Spread Constraints에서 whenUnsatisfiable: DoNotSchedule의 의미는 무엇인가요?
A. 제약 조건을 만족하지 못하면 Pod를 아무 노드에나 스케줄링 B. 제약 조건을 만족하지 못하면 Pod 스케줄링을 거부 C. 제약 조건을 무시하고 항상 스케줄링 D. 제약 조건 위반 시 기존 Pod를 삭제
정답 보기
정답: B. 제약 조건을 만족하지 못하면 Pod 스케줄링을 거부
설명:whenUnsatisfiable: DoNotSchedule은 토폴로지 분산 제약 조건을 만족시킬 수 없는 경우 해당 Pod의 스케줄링을 거부합니다. 이는 엄격한 분산 정책을 적용할 때 사용됩니다.
whenUnsatisfiable 옵션:
DoNotSchedule: 제약 조건 미충족 시 스케줄링 거부 (Hard 제약)
ScheduleAnyway: 제약 조건을 최대한 만족시키되, 불가능하면 어디든 스케줄링 (Soft 제약)
4. Cell-Based Architecture에서 "Cell"의 주요 특징으로 올바르지 않은 것은?
A. 독립적으로 배포 및 확장 가능 B. 장애가 전체 시스템으로 전파됨 C. 자체 완결적인 기능 단위 D. 다른 Cell과 느슨하게 결합
정답 보기
정답: B. 장애가 전체 시스템으로 전파됨
설명: Cell-Based Architecture의 핵심 목적은 장애 격리입니다. 각 Cell은 독립적으로 동작하여 한 Cell의 장애가 다른 Cell로 전파되지 않도록 설계됩니다.
Cell-Based Architecture의 핵심 원칙:
장애 격리: 한 Cell의 장애가 다른 Cell에 영향을 주지 않음
독립적 배포: 각 Cell을 개별적으로 업데이트 가능
수평적 확장: Cell 단위로 용량 확장
자체 완결성: 각 Cell이 필요한 모든 구성 요소 포함
5. Chaos Engineering에서 "Steady State Hypothesis"의 의미는 무엇인가요?
A. 시스템을 항상 정지 상태로 유지 B. 실험 전후로 시스템이 정상 동작함을 검증하는 기준 C. 카오스 실험을 중단하는 조건 D. 시스템의 최대 부하 상태
정답 보기
정답: B. 실험 전후로 시스템이 정상 동작함을 검증하는 기준
설명: Steady State Hypothesis는 시스템의 "정상" 상태를 정의하는 측정 가능한 지표입니다. 카오스 실험 전에 이 가설이 참인지 확인하고, 실험 후에도 시스템이 이 상태로 돌아오는지 검증합니다.
Steady State 지표 예시:
응답 시간 < 200ms (p99)
에러율 < 0.1%
처리량 > 1000 req/s
Pod 가용률 > 99%
6. EKS에서 Zone-Aware Routing을 구현하기 위한 Service 설정은 무엇인가요?
A. service.kubernetes.io/topology-aware-hints: auto B. service.kubernetes.io/zone-routing: enabled C. service.kubernetes.io/local-only: true D. service.kubernetes.io/cross-zone: disabled
정답 보기
정답: A. service.kubernetes.io/topology-aware-hints: auto
설명: Kubernetes 1.23+에서 도입된 Topology Aware Hints를 사용하면 kube-proxy가 같은 Zone 내의 엔드포인트로 트래픽을 우선 라우팅하여 Cross-AZ 트래픽 비용과 지연 시간을 줄일 수 있습니다.
Zone-Aware Routing의 이점:
Cross-AZ 데이터 전송 비용 절감
네트워크 지연 시간 감소
같은 Zone 내 트래픽 유지로 안정성 향상
7. PDB에서 maxUnavailable: 25%를 설정하고 replicas가 8개일 때, 동시에 중단될 수 있는 최대 Pod 수는?
A. 1개 B. 2개 C. 3개 D. 4개
정답 보기
정답: B. 2개
설명:maxUnavailable: 25%는 전체 replicas의 25%까지 동시에 중단될 수 있음을 의미합니다. 8개의 25%는 2개입니다 (8 × 0.25 = 2).
계산 방식:
백분율은 내림 처리됨
replicas = 8, maxUnavailable = 25%
8 × 0.25 = 2개 (소수점 이하 내림)
따라서 최소 6개의 Pod가 항상 실행 상태 유지
8. Litmus Chaos에서 제공하는 실험 유형이 아닌 것은?
A. pod-delete B. node-drain C. network-loss D. cluster-delete
정답 보기
정답: D. cluster-delete
설명: Litmus Chaos는 클러스터 전체를 삭제하는 실험은 제공하지 않습니다. Chaos Engineering의 목적은 통제된 환경에서 시스템 복원력을 테스트하는 것이지, 전체 인프라를 파괴하는 것이 아닙니다.
Litmus Chaos 주요 실험 유형:
Pod 레벨: pod-delete, pod-cpu-hog, pod-memory-hog, pod-network-loss
# Deployment 생성
kubectl apply -f web-frontend.yaml
# Pod 분산 확인
kubectl get pods -l app=web-frontend -o wide
# Zone별 Pod 수 확인
kubectl get pods -l app=web-frontend -o jsonpath='{range .items[*]}{.spec.nodeName}{"\n"}{end}' | \
xargs -I {} kubectl get node {} -o jsonpath='{.metadata.labels.topology\.kubernetes\.io/zone}{"\n"}' | \
sort | uniq -c
# Litmus Chaos Operator 설치
kubectl apply -f https://litmuschaos.github.io/litmus/litmus-operator-v2.14.0.yaml
# ChaosExperiment CRD 설치
kubectl apply -f https://hub.litmuschaos.io/api/chaos/2.14.0?file=charts/generic/pod-delete/experiment.yaml
# ServiceAccount 생성
kubectl apply -f https://hub.litmuschaos.io/api/chaos/2.14.0?file=charts/generic/pod-delete/rbac.yaml -n production
# Chaos 실험 실행
kubectl apply -f payment-pod-delete.yaml
# 실험 상태 확인
kubectl get chaosengine payment-pod-delete -n production
# 실험 결과 확인
kubectl get chaosresult payment-pod-delete-pod-delete -n production -o yaml