Skip to content

KR_K8s_Troubleshooting

somaz edited this page Mar 30, 2026 · 1 revision

쿠버네티스 트러블슈팅 실전 (Q31-Q35)

트러블슈팅 실전 (31~35번)


Q31. CPU Throttling 문제와 CFS Quota 최적화는?

  • CPU Limits 설정 시 CFS(Completely Fair Scheduler) Quota로 제한되며, 실제 사용률이 낮아도 throttling이 발생할 수 있다.
  • container_cpu_cfs_throttled_seconds_total 메트릭으로 감지한다.

해결:

  • ① Limits를 제거하거나 충분히 높게 설정(Guaranteed QoS 필요 없으면) →
  • ② CPU Requests만 설정하여 스케줄링 보장 →
  • --cpu-cfs-quota=false 로 Quota 비활성화(비권장).
  • Java 애플리케이션은 -XX:ActiveProcessorCount 로 CPU 개수 인식 조정한다. Requests는 실제 평균 사용량, Limits는 spike 허용 범위로 설정한다.

Q32. DNS 해석 지연과 ndots=5 문제 해결은?

  • Pod의 /etc/resolv.conf에 ndots:5 설정으로 인해 최대 6번의 DNS 쿼리가 발생한다.
  • example.com 조회 시 example.com.ns.svc.cluster.local → example.com.svc.cluster.local → example.com.cluster.local → example.com 순서로 조회한다.

해결:

  • ① FQDN 사용(예: api.example.com.) →
  • ② dnsConfig로 ndots:2 설정 →
  • ③ CoreDNS autopath plugin 활성화 →
  • ④ NodeLocal DNSCache 사용(노드별 DNS 캐시, UDP → eBPF).
  • coredns_dns_request_duration_seconds 메트릭으로 응답 시간 모니터링한다.

Q33. ImagePullBackOff vs ErrImagePull 차이와 Private Registry 인증 문제는?

ErrImagePull은 첫 번째 이미지 pull 실패, ImagePullBackOff는 재시도 중 백오프 상태다.

원인:

  • ① 이미지 존재 안 함 →
  • ② Private Registry 인증 실패 →
  • ③ Rate Limit(Docker Hub) →
  • ④ 네트워크 문제.

해결:

  • ① imagePullSecrets로 Registry 인증(docker-registry Secret 생성) →
  • ② ServiceAccount에 imagePullSecrets 추가하여 자동 적용 →
  • ③ ImagePullPolicy를 IfNotPresent로 변경하여 로컬 이미지 우선 사용 →
  • ④ Registry Mirror 또는 Harbor 구축.
  • kubectl describe pod로 정확한 에러 확인한다.

Q34. Node NotReady 상태의 원인 분석과 복구 절차는?

Node NotReady 원인:

  • ① kubelet 중지/crash →
  • ② 네트워크 파티션 →
  • ③ 디스크/메모리 부족 →
  • ④ CNI 문제.

진단:

  • ① kubectl describe node로 Condition 확인(DiskPressure, MemoryPressure, PIDPressure) →
  • ② 노드 SSH 접속 후 systemctl status kubelet →
  • ③ journalctl -u kubelet로 로그 확인 →
  • ④ df -h, free -m로 리소스 확인.

복구:

  • ① systemctl restart kubelet →
  • ② 디스크 정리(docker system prune, /var/log/* 삭제) →
  • ③ CNI Pod 재시작 →
  • ④ 복구 안 되면 노드 교체.
  • Pod는 --pod-eviction-timeout(기본 5분) 후 다른 노드로 재스케줄된다.

Q35. Persistent Volume이 Terminating 상태에서 멈춘 경우 해결 방법은?

PV/PVC가 Terminating 상태로 멈추는 원인은 Finalizer 때문이다. Finalizer는 리소스 삭제 전 정리 작업을 보장한다.

해결:

  • kubectl patch pv <pv-name> -p '{"metadata":{"finalizers":null}}'
  • kubectl patch pvc <pvc-name> -p '{"metadata":{"finalizers":null}}'

사용 중인 Pod가 있으면 먼저 삭제한다.

AWS EBS의 경우 Volume이 실제로 detach되지 않아 멈출 수 있으므로, AWS Console에서 수동 detach한다.

Reclaim Policy가 Retain이면 PVC 삭제 후 PV가 Released 상태로 남으므로 수동 정리가 필요하다.

volumeBindingMode: WaitForFirstConsumer 는 Pod 없이 PVC만 생성 시 Pending 상태로 유지된다.

💡 용어 설명:

  • 트러블슈팅 관련 용어들(CPU Throttling, CFS Quota, ndots, CoreDNS, ImagePullBackOff, Node NotReady, Finalizer 등)에 대한
  • 상세한 설명은 문서 상단의 주요 용어 통합 정리 > 문제 해결 섹션을 참고하세요.

Clone this wiki locally