EKS 고급 디버깅

지원 버전: EKS 1.28+, kubectl 1.28+ 마지막 업데이트: 2026년 2월 23일

Amazon EKS 클러스터의 안정적인 운영을 위해서는 체계적인 장애 대응 프레임워크와 고급 디버깅 기술이 필수입니다. 이 문서에서는 프로덕션 환경에서 발생하는 복잡한 문제들을 신속하게 진단하고 해결하기 위한 실전 가이드를 제공합니다.

목차


1. 장애 대응 프레임워크

첫 5분 체크리스트 (Initial Triage)

장애 발생 시 첫 5분이 가장 중요합니다. 다음 체크리스트를 순서대로 수행하세요.

초기 진단 스크립트

장애 심각도 매트릭스 (Severity Matrix)

심각도
분류
영향 범위
대응 시간
예시

P1

Critical

전체 서비스 중단

15분 이내

컨트롤 플레인 장애, 전체 노드 NotReady

P2

High

주요 기능 장애

1시간 이내

특정 워크로드 전체 실패, 네트워크 연결 문제

P3

Medium

부분적 영향

4시간 이내

일부 파드 재시작, 성능 저하

P4

Low

경미한 문제

24시간 이내

로그 수집 지연, 비핵심 모니터링 알림

신속한 문제 식별을 위한 의사결정 트리

spinner

2. 컨트롤 플레인 디버깅

EKS 컨트롤 플레인 로그 유형

EKS는 5가지 컨트롤 플레인 로그를 CloudWatch Logs로 전송합니다.

로그 유형
설명
주요 사용 사례

api

API 서버 로그

API 호출 추적, 에러 분석

audit

감사 로그

보안 감사, 변경 추적

authenticator

IAM 인증 로그

인증 실패 디버깅

controllerManager

컨트롤러 매니저 로그

리소스 조정 문제

scheduler

스케줄러 로그

파드 배치 문제

컨트롤 플레인 로깅 활성화

CloudWatch Logs Insights 쿼리

에러 분석 쿼리

인증 실패 분석

API 스로틀링 감지

IAM 인증 문제 해결

aws-auth ConfigMap 확인

인증 테스트

IRSA (IAM Roles for Service Accounts) 문제 해결

IRSA 설정 예시

IRSA 디버깅

Pod Identity 문제 해결

서비스 계정 토큰 만료 (1시간 기본 TTL)

EKS Add-on 오류 패턴


3. 노드 레벨 문제 해결

노드 조인 실패 진단 (8가지 일반적인 원인)

#
원인
증상
해결 방법

1

부트스트랩 스크립트 불일치

노드가 클러스터에 나타나지 않음

AMI 버전과 클러스터 버전 일치 확인

2

보안 그룹 설정 오류

노드-컨트롤플레인 통신 실패

443, 10250 포트 인바운드 규칙 확인

3

VPC DNS 설정 문제

DNS 해석 실패

enableDnsHostnames, enableDnsSupport 활성화

4

IAM 역할 권한 부족

인증 실패

노드 역할에 필수 정책 연결 확인

5

서브넷 태그 누락

노드 프로비저닝 실패

kubernetes.io/cluster/<name> 태그 확인

6

프라이빗 서브넷 NAT 미설정

이미지 풀 실패

NAT Gateway 또는 VPC 엔드포인트 설정

7

인스턴스 프로파일 미연결

EC2 시작 실패

Launch Template 설정 확인

8

사용자 데이터 스크립트 오류

부트스트랩 중단

/var/log/cloud-init-output.log 확인

NotReady 노드 의사결정 트리

spinner

SSM을 통한 kubelet/containerd 디버깅

리소스 압력 조건 (Resource Pressure)

DiskPressure 해결

MemoryPressure 해결

PIDPressure 해결

Karpenter 프로비저닝 문제

Karpenter 설정 예시

Managed Node Group 오류 코드

오류 코드
설명
해결 방법

AccessDenied

IAM 권한 부족

노드 역할 정책 확인

AsgInstanceLaunchFailures

ASG 인스턴스 시작 실패

Launch Template, 서브넷 용량 확인

ClusterUnreachable

클러스터 연결 불가

VPC 엔드포인트, 보안 그룹 확인

InsufficientFreeAddresses

IP 주소 부족

서브넷 CIDR 확장 또는 새 서브넷 추가

NodeCreationFailure

노드 생성 실패

EC2 서비스 한도, AMI 가용성 확인

Node Readiness Controller (단계별 부팅 검증)


4. 워크로드 디버깅

파드 상태 흐름도

spinner

기본 진단 명령어

kubectl debug 기법

임시 컨테이너 (Ephemeral Containers)

파드 복사 (Pod Copying)

노드 디버깅

Deployment 롤아웃 관리

HPA/VPA 스케일링 문제

HPA 디버깅

HPA 설정 예시

VPA 디버깅

프로브 설정 모범 사례


5. 네트워킹 진단

VPC CNI 문제 해결

IP 고갈 문제 해결

Prefix Delegation 모드 활성화

Secondary CIDR 추가

ENIConfig 설정

CoreDNS 설정 문제

ndots 문제와 해결책

CoreDNS 성능 최적화

Service Endpoint 검증

NetworkPolicy AND/OR 로직 디버깅

netshoot 컨테이너를 활용한 라이브 디버깅


6. 스토리지 문제 해결

EBS CSI Driver 오류 패턴

IRSA 권한 설정

EFS Mount Target 구성 문제

EFS StorageClass 및 PVC

PVC/PV 상태 관리

Finalizer 처리

WaitForFirstConsumer를 통한 AZ 매칭


7. 관측성 아키텍처

Container Insights 설정

PromQL 쿼리 예시

CPU 스로틀링 감지

OOMKilled 이벤트 감지

파드 재시작률

CloudWatch Logs Insights 검색 패턴

PrometheusRule 예시

ADOT (AWS Distro for OpenTelemetry) 설정


8. 장애 감지 아키텍처

4계층 감지 파이프라인

spinner

레퍼런스 아키텍처 1: AWS 네이티브

레퍼런스 아키텍처 2: 오픈소스 스택

감지 패턴

임계값 기반 감지

이상 감지 (Anomaly Detection)

Composite Alarm

로그 기반 메트릭

성숙도 모델 (Maturity Model)

레벨
설명
MTTD 목표
주요 기능

Level 1

기본

30분

기본 메트릭 알림, 수동 로그 검색

Level 2

반응형

15분

임계값 알림, 로그 기반 알림, 기본 대시보드

Level 3

선제적

5분

이상 감지, 복합 알람, 자동화된 런북

Level 4

예측적

2분

ML 기반 예측, 자동 복구, 카오스 엔지니어링

EventBridge + Lambda 자동 복구

심각도별 알림 채널 매트릭스

심각도
Slack
PagerDuty
Email
SMS
Auto-Remediation

P1 Critical

#incidents

Immediate

Team Lead

On-call

Yes

P2 High

#alerts-high

15min delay

Team

-

Conditional

P3 Medium

#alerts

-

Team

-

No

P4 Low

#alerts-low

-

Daily digest

-

No


9. 빠른 참조

오류 패턴 조회 테이블

증상
원인
해결 방법

CrashLoopBackOff

애플리케이션 크래시, 잘못된 명령, 누락된 의존성

kubectl logs --previous, 애플리케이션 코드/설정 검토

ImagePullBackOff

이미지 없음, 잘못된 태그, 인증 실패

이미지 이름 확인, imagePullSecrets 검토

OOMKilled

메모리 제한 초과

메모리 limit 증가, 메모리 누수 수정

CreateContainerConfigError

ConfigMap/Secret 누락, 잘못된 참조

kubectl describe pod, 참조된 리소스 존재 확인

Pending (리소스)

CPU/메모리 요청을 충족하는 노드 없음

노드 스케일 업, 리소스 요청 조정

Pending (스케줄링)

nodeSelector, affinity, taint 불일치

kubectl describe pod의 Events 섹션 확인

ContainerCreating (지연)

볼륨 마운트 실패, 네트워크 플러그인 문제

PVC 상태, CNI 파드 상태 확인

ErrImagePull

이미지 레지스트리 연결 실패

네트워크 연결, ECR 엔드포인트 확인

RunContainerError

잘못된 컨테이너 설정, securityContext 문제

kubectl describe pod, securityContext 검토

PostStartHookError

postStart 훅 실패

훅 명령어 검토, 타임아웃 조정

PreStopHookError

preStop 훅 실패

훅 명령어 검토, terminationGracePeriodSeconds 조정

FailedScheduling

리소스 부족, PVC 바인딩 대기

노드 리소스, PVC 상태 확인

FailedMount

볼륨 마운트 실패, CSI 드라이버 문제

CSI 드라이버 로그, PV/PVC 상태 확인

NetworkNotReady

CNI 플러그인 미준비

aws-node 파드 상태, CNI 로그 확인

NodeNotReady

kubelet 문제, 네트워크 단절

kubelet 로그, 노드 상태 확인

Evicted

노드 리소스 압력 (디스크, 메모리)

노드 리소스 정리, 리소스 limit 조정

BackOff

재시도 백오프 상태

이전 에러 로그 확인, 근본 원인 해결

InvalidImageName

잘못된 이미지 이름 형식

이미지 이름 문법 확인

필수 kubectl 명령어 치트시트

도구 추천

도구
용도
설치/사용

netshoot

네트워크 디버깅

kubectl run net --image=nicolaka/netshoot -it --rm

eks-node-viewer

노드 리소스 시각화

go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest

crictl

컨테이너 런타임 디버깅

노드에서 sudo crictl ps, sudo crictl logs

kubeval

YAML 검증

kubeval deployment.yaml

stern

멀티 파드 로그

stern <pod-pattern> -n <namespace>

k9s

TUI 클러스터 관리

k9s -n <namespace>

kubectx/kubens

컨텍스트/네임스페이스 전환

kubectx <context>, kubens <namespace>

EKS Log Collector (AWS Support용)

수집되는 정보:

  • 시스템 정보 (OS, 커널, 메모리, CPU)

  • kubelet 로그 및 설정

  • containerd 로그 및 설정

  • CNI 플러그인 로그

  • 네트워크 설정 (iptables, 라우팅)

  • 디스크 사용량


10. 다음 단계

퀴즈

이 문서에서 다룬 내용을 테스트하려면 EKS 고급 디버깅 퀴즈를 풀어보세요.

다음 문서

EKS 클러스터를 온프레미스 환경과 통합하는 방법을 알아보려면 EKS Hybrid Nodes를 참조하세요.

추가 학습 자료

마지막 업데이트