-
Notifications
You must be signed in to change notification settings - Fork 0
KR_K8s_Troubleshooting
somaz edited this page Mar 30, 2026
·
1 revision
- 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 허용 범위로 설정한다.
- 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메트릭으로 응답 시간 모니터링한다.
ErrImagePull은 첫 번째 이미지 pull 실패, ImagePullBackOff는 재시도 중 백오프 상태다.
- ① 이미지 존재 안 함 →
- ② Private Registry 인증 실패 →
- ③ Rate Limit(Docker Hub) →
- ④ 네트워크 문제.
- ① imagePullSecrets로 Registry 인증(docker-registry Secret 생성) →
- ② ServiceAccount에 imagePullSecrets 추가하여 자동 적용 →
- ③ ImagePullPolicy를 IfNotPresent로 변경하여 로컬 이미지 우선 사용 →
- ④ Registry Mirror 또는 Harbor 구축.
- kubectl describe pod로 정확한 에러 확인한다.
- ① 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분) 후 다른 노드로 재스케줄된다.
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 등)에 대한
- 상세한 설명은 문서 상단의 주요 용어 통합 정리 > 문제 해결 섹션을 참고하세요.