EKS 고급 디버깅 퀴즈

이 퀴즈는 Amazon EKS의 고급 디버깅 기법, 인시던트 대응, 컨트롤 플레인 디버깅, 노드 문제 해결, kubectl debug, PromQL 쿼리, 관측성(Observability)에 대한 이해를 테스트합니다.

퀴즈 개요

  • 인시던트 대응 프로세스

  • EKS 컨트롤 플레인 디버깅

  • 노드 및 kubelet 문제 해결

  • kubectl debug 명령어 활용

  • PromQL 쿼리 및 메트릭 분석

  • 분산 추적 및 로그 분석

객관식 문제

1. EKS에서 API 서버 감사 로그(Audit Log)를 확인하려면 어디서 조회해야 하나요?

A. /var/log/kubernetes/ 디렉토리 B. Amazon CloudWatch Logs C. etcd 데이터베이스 D. kubectl logs 명령어

chevron-right정답 보기hashtag

정답: B. Amazon CloudWatch Logs

설명: EKS 컨트롤 플레인 로그는 AWS에서 관리되며, CloudWatch Logs로 전송됩니다. 감사 로그는 /aws/eks/<cluster-name>/cluster 로그 그룹에서 확인할 수 있습니다.

로그 유형:

  • api: API 서버 로그

  • audit: 감사 로그

  • authenticator: 인증 로그

  • controllerManager: 컨트롤러 매니저 로그

  • scheduler: 스케줄러 로그

# 컨트롤 플레인 로그 활성화
aws eks update-cluster-config \
  --name my-cluster \
  --logging '{"clusterLogging":[{"types":["api","audit","authenticator","controllerManager","scheduler"],"enabled":true}]}'

# CloudWatch Logs Insights 쿼리
fields @timestamp, @message
| filter @logStream like /kube-apiserver-audit/
| filter @message like "403"
| sort @timestamp desc
| limit 100

2. kubectl debug 명령어로 실행 중인 Pod에 디버깅 컨테이너를 추가할 때 사용하는 플래그는?

A. --attach B. --copy-to C. --ephemeral D. --sidecar

chevron-right정답 보기hashtag

정답: B. --copy-to

설명: --copy-to 플래그를 사용하면 기존 Pod의 복사본을 생성하고 디버깅 컨테이너나 수정된 설정을 추가할 수 있습니다. --share-processes 플래그와 함께 사용하면 프로세스 네임스페이스를 공유할 수 있습니다.

주요 옵션:

  • --copy-to: Pod 복사본 생성

  • --share-processes: 프로세스 네임스페이스 공유

  • --target: 타겟 컨테이너 지정 (ephemeral container용)

3. 노드가 NotReady 상태일 때 가장 먼저 확인해야 할 것은?

A. Pod 로그 B. kubelet 상태 및 로그 C. etcd 상태 D. CoreDNS 로그

chevron-right정답 보기hashtag

정답: B. kubelet 상태 및 로그

설명: 노드가 NotReady 상태가 되는 가장 일반적인 원인은 kubelet 문제입니다. kubelet이 API 서버와 통신하지 못하면 노드 상태가 NotReady로 변경됩니다.

NotReady 원인 체크리스트:

  1. kubelet 프로세스 상태

  2. 네트워크 연결 (API 서버 접근성)

  3. 디스크 공간 부족

  4. 메모리 부족 (OOM)

  5. 컨테이너 런타임 상태

4. PromQL에서 최근 5분간 CPU 사용률이 80%를 초과한 Pod를 찾는 쿼리는?

A. cpu_usage > 80 B. rate(container_cpu_usage_seconds_total[5m]) > 0.8 C. sum(rate(container_cpu_usage_seconds_total[5m])) by (pod) / sum(kube_pod_container_resource_limits{resource="cpu"}) by (pod) > 0.8 D. container_cpu_percent > 80

chevron-right정답 보기hashtag

정답: C. sum(rate(container_cpu_usage_seconds_total[5m])) by (pod) / sum(kube_pod_container_resource_limits{resource="cpu"}) by (pod) > 0.8

설명: CPU 사용률은 실제 사용량을 limit으로 나눈 비율입니다. rate() 함수로 초당 CPU 사용량을 계산하고, limit으로 나누어 백분율을 구합니다.

5. EKS에서 노드 간 네트워크 문제를 디버깅할 때 사용하는 도구로 적합하지 않은 것은?

A. tcpdump B. wireshark C. kubectl exec으로 ping/curl 테스트 D. etcdctl

chevron-right정답 보기hashtag

정답: D. etcdctl

설명: etcdctl은 etcd 데이터베이스를 관리하는 도구로, 네트워크 디버깅과는 관련이 없습니다. EKS에서는 etcd가 AWS에 의해 관리되므로 직접 접근할 수도 없습니다.

네트워크 디버깅 도구:

6. 인시던트 대응에서 MTTD(Mean Time To Detect)를 줄이기 위한 가장 효과적인 방법은?

A. 수동 모니터링 강화 B. 알림 임계값을 매우 낮게 설정 C. 적절한 알림 규칙과 자동화된 모니터링 시스템 구축 D. 로그 보관 기간 연장

chevron-right정답 보기hashtag

정답: C. 적절한 알림 규칙과 자동화된 모니터링 시스템 구축

설명: MTTD를 줄이려면 적절한 임계값의 알림 규칙과 자동화된 모니터링이 필요합니다. 너무 민감한 알림은 알림 피로(Alert Fatigue)를 유발합니다.

MTTD 최적화 전략:

  • SLO 기반 알림 설정

  • Multi-window burn rate 알림

  • 알림 우선순위 분류

  • On-call 로테이션 및 에스컬레이션

7. kubectl debug로 노드에 직접 디버깅 Pod를 생성하는 명령어는?

A. kubectl debug node/<node-name> -it --image=busybox B. kubectl exec node/<node-name> -- sh C. kubectl attach node/<node-name> D. kubectl run debug --node=<node-name>

chevron-right정답 보기hashtag

정답: A. kubectl debug node/<node-name> -it --image=busybox

설명: Kubernetes 1.20+에서 kubectl debug node/ 명령어를 사용하면 노드에 privileged Pod를 생성하여 호스트 파일시스템과 네트워크에 접근할 수 있습니다.

주의사항:

  • 노드 디버깅 Pod는 privileged 모드로 실행됨

  • 호스트 네임스페이스에 접근 가능

  • 프로덕션 환경에서는 RBAC으로 접근 제한 필요

8. 분산 추적(Distributed Tracing)에서 Span의 의미는?

A. 전체 요청의 처리 시간 B. 단일 작업 단위의 시간 측정 C. 서비스 간 네트워크 지연 D. 로그 메시지의 타임스탬프

chevron-right정답 보기hashtag

정답: B. 단일 작업 단위의 시간 측정

설명: Span은 분산 시스템에서 하나의 작업 단위를 나타내며, 시작 시간, 종료 시간, 메타데이터를 포함합니다. 여러 Span이 모여 하나의 Trace를 구성합니다.

분산 추적 개념:

  • Trace: 전체 요청 흐름을 나타내는 Span들의 집합

  • Span: 단일 작업 단위 (예: HTTP 요청, DB 쿼리)

  • Parent-Child 관계: Span 간의 호출 관계

  • Baggage: Span 간 전파되는 컨텍스트 정보

9. EKS에서 CoreDNS 문제를 디버깅할 때 가장 유용한 명령어는?

A. kubectl logs -n kube-system -l k8s-app=kube-dns B. kubectl describe service kubernetes C. aws eks describe-cluster D. kubectl get endpoints

chevron-right정답 보기hashtag

정답: A. kubectl logs -n kube-system -l k8s-app=kube-dns

설명: CoreDNS Pod의 로그를 확인하면 DNS 쿼리 처리 상태, 오류, 타임아웃 등을 파악할 수 있습니다.

CoreDNS 일반적인 문제:

  • Pod 리소스 부족 (CPU/Memory)

  • ConfigMap 설정 오류

  • 업스트림 DNS 연결 문제

  • 클러스터 IP 서비스 연결 문제

10. kubectl을 사용하여 Pod의 리소스 사용량을 실시간으로 확인하는 명령어는?

A. kubectl describe pod B. kubectl top pods C. kubectl get pods -o wide D. kubectl logs

chevron-right정답 보기hashtag

정답: B. kubectl top pods

설명: kubectl top 명령어는 Metrics Server가 수집한 리소스 사용량 데이터를 표시합니다. CPU와 메모리 사용량을 실시간으로 확인할 수 있습니다.

사전 요구사항:

  • Metrics Server 설치 필요

  • kubectl top은 실시간 스냅샷만 제공 (히스토리 없음)

  • 장기 모니터링은 Prometheus + Grafana 사용

단답형 문제

1. EKS 컨트롤 플레인 로그를 CloudWatch Logs에서 확인할 때 사용하는 로그 그룹 이름 패턴은 무엇인가요?

chevron-right정답 보기hashtag

정답: /aws/eks/<cluster-name>/cluster

설명: EKS 컨트롤 플레인 로그는 자동으로 이 로그 그룹으로 전송됩니다.

2. Kubernetes에서 Ephemeral Container를 활성화하는 데 필요한 feature gate 이름은 무엇인가요?

chevron-right정답 보기hashtag

정답: EphemeralContainers (Kubernetes 1.25+에서는 기본 활성화)

설명: Kubernetes 1.23부터 beta, 1.25부터 GA(Generally Available)로 기본 활성화되어 있습니다. EKS 1.25 이상에서는 별도 설정 없이 사용 가능합니다.

3. PromQL에서 rate() 함수와 irate() 함수의 차이점은 무엇인가요?

chevron-right정답 보기hashtag

정답:

  • rate(): 지정된 시간 범위 전체의 평균 변화율 계산 (smooth)

  • irate(): 가장 최근 두 데이터 포인트만 사용하여 순간 변화율 계산 (volatile)

사용 예시:

선택 가이드:

  • 알림 규칙: rate() 사용 (노이즈 감소)

  • 디버깅/급격한 변화 감지: irate() 사용

  • 장기 트렌드 분석: rate() 사용

4. kubectl debug로 노드에 접속했을 때 호스트 파일시스템이 마운트되는 경로는 어디인가요?

chevron-right정답 보기hashtag

정답: /host

설명: kubectl debug node/ 명령어로 생성된 Pod에서 호스트의 루트 파일시스템은 /host에 마운트됩니다.

5. 인시던트 대응에서 MTTR(Mean Time To Resolve)을 구성하는 두 가지 주요 요소는 무엇인가요?

chevron-right정답 보기hashtag

정답:

  1. MTTD (Mean Time To Detect): 문제 발생부터 감지까지의 시간

  2. MTTI (Mean Time To Investigate/Identify): 문제 감지부터 원인 파악 및 해결까지의 시간

또는:

  • MTTD + MTTI + MTTFix (실제 수정 시간)

MTTR 개선 전략:

실습 문제

1. 다음 요구사항을 충족하는 PromQL 쿼리를 작성하세요.

  • production 네임스페이스에서 최근 5분간 재시작된 컨테이너를 찾는 쿼리

  • 재시작 횟수가 2회 이상인 것만 필터링

chevron-right정답 보기hashtag

변형 쿼리:

Grafana 대시보드용:

2. CrashLoopBackOff 상태의 Pod를 디버깅하는 단계별 명령어를 작성하세요.

chevron-right정답 보기hashtag

일반적인 CrashLoopBackOff 원인:

  • 잘못된 설정 파일

  • 누락된 환경 변수 또는 시크릿

  • 리소스 부족 (OOM Kill)

  • 헬스 체크 실패

  • 의존성 서비스 연결 실패

3. CloudWatch Logs Insights를 사용하여 EKS 감사 로그에서 최근 1시간 동안 발생한 권한 거부(403) 이벤트를 조회하는 쿼리를 작성하세요.

chevron-right정답 보기hashtag

AWS CLI를 통한 실행:

심화 문제

1. 마이크로서비스 아키텍처에서 특정 API의 응답 시간이 간헐적으로 느려지는 문제가 발생했습니다. 분산 추적, 메트릭, 로그를 활용한 종합적인 디버깅 전략을 수립하세요.

chevron-right정답 보기hashtag

종합 디버깅 전략: 간헐적 지연 문제 분석

1단계: 문제 범위 파악 (Metrics)

2단계: 분산 추적으로 병목 지점 식별

3단계: 로그 상관관계 분석

4단계: 인프라 수준 분석

5단계: 종합 대시보드

6단계: 자동화된 이상 탐지

결과 분석 체크리스트:

2. EKS 클러스터에서 노드가 간헐적으로 NotReady 상태가 되는 문제가 발생했습니다. 체계적인 근본 원인 분석(RCA) 프로세스와 재발 방지 대책을 수립하세요.

chevron-right정답 보기hashtag

근본 원인 분석 (RCA) 프로세스

Phase 1: 데이터 수집

Phase 2: 시스템 로그 분석

Phase 3: 네트워크 분석

Phase 4: 리소스 압박 분석

Phase 5: 근본 원인 분류

카테고리
가능한 원인
확인 방법

리소스

OOM Kill

dmesg | grep -i oom

리소스

디스크 풀

df -h

네트워크

CNI 문제

aws-node 로그

네트워크

API 서버 연결

curl healthz

시스템

kubelet 크래시

journalctl -u kubelet

인프라

EC2 인스턴스 문제

CloudWatch 메트릭

Phase 6: 재발 방지 대책

RCA 보고서 템플릿:

마지막 업데이트