IL-0001 Zalando · 2019-01-07kubernetesaws
2019년 1월 7일 월요일, Zalando Fashion Store 의 모든 웹 상품 페이지와 코디 페이지가 한 시간 넘게 오류를 냈다. 오류는 쿠버네티스 클러스터에서 도는 데이터 집계 계층 서비스에서 나왔고, 근본 원인은 클러스터 DNS 인 CoreDNS 의 전면 장애였다.
하위 서비스 하나에서 타임아웃이 나자 클라이언트가 재시도했고, 집계 계층으로 들어오는 요청이 급증했다. 집계 계층은 Node.js 애플리케이션이고 Node.js 의 기본 DNS 해석 방식을 썼다. 이 방식은 DNS 조회 결과를 캐시하지 않는다. 애플리케이션은 쿠버네티스 기본 DNS 설정으로 돌아서 ndots 5 문제를 그대로 안고 있었다. 이 문제 때문에 클러스터 밖 이름을 한 번 조회할 때마다 DNS 쿼리가 10개 나갔다. DNS 를 바꿔 트래픽을 전환하는 서비스들이 있어서, HTTP 클라이언트 커넥션 풀은 연결의 최대 수명도 짧게 잡고 있었다. 연결을 계속 새로 열면서 DNS 요청이 더 늘었다.
CoreDNS 파드의 메모리 한도는 과거 사용량을 근거로 100Mi 로 아주 작게 잡혀 있었다. 쿼리가 치솟자 CoreDNS 파드는 바로 OOM 으로 죽었다. 높은 쿼리 부하가 계속되는 데다 메모리 한도를 자동으로 올릴 방법이 없어 회복하지 못했다. Zalando 는 몇 달 전부터 일부 시스템 구성 요소에 Vertical Pod Autoscaler 를 쓰고 있었지만 CoreDNS 에는 쓰지 않았다. CoreDNS 에도 썼다면 파드가 자동으로 회복했을 수도 있었다.
DNS 가 멈추자 클러스터 내부 모니터링도 멈춰 당직 호출이 늦어졌고, 대응도 느린 데다 사람이 손으로 해야 했다. 연락을 받은 쿠버네티스 당직 엔지니어는 CoreDNS 파드가 OOM 으로 죽고 있는 것을 확인하고 메모리 request 와 limit 을 100Mi 에서 2000Mi 로 직접 올렸다. CoreDNS 파드가 회복하자 집계 계층은 서킷 브레이커를 닫았고 Fashion Store 는 완전히 회복했다.
Zalando Fashion Store 의 모든 웹 상품 페이지와 코디 페이지가 한 시간 넘게 고객에게 오류를 많이 냈다. 오류는 쿠버네티스 클러스터 하나에서 도는 핵심 데이터 집계 계층 서비스에서 나왔다.
시작은 집계 계층이 호출하는 여러 하위 서비스 가운데 하나에서 난 타임아웃이었다. 집계 계층은 타임아웃 난 호출에 404 로 응답했고, 클라이언트가 재시도하면서 집계 계층으로 들어오는 요청이 치솟았다. 이 요청 급증은 클러스터 DNS 인 CoreDNS 로 가는 DNS 쿼리 급증으로 그대로 이어졌다.
DNS 쿼리가 몰리자 CoreDNS 파드의 메모리 사용량이 치솟았고, CoreDNS 파드들은 한꺼번에 메모리를 다 써서 OOM Killed 상태로 종료됐다. 파드는 첫 OOM 이후 회복하지 못하고 메모리가 바닥나 죽기를 반복했다. 그 결과 클러스터 전체의 DNS 가 완전히 멈췄다. 집계 계층 서비스는 어떤 호스트 이름도 해석하지 못했고 DNS 캐시도 없었기 때문에 하위 서비스로 가는 서킷 브레이커를 열었다.
DNS 가 멈추자 클러스터 내부 모니터링도 함께 완전히 멈췄다. 이 모니터링은 알림을 보내고 지표를 올리려면 외부 서비스와 통신해야 했기 때문이다. 당직 호출이 자동으로 가지 않아, 집계 계층 서비스 당직 엔지니어가 쿠버네티스 담당 당직 엔지니어에게 직접 전화해야 했다.
DNS 장애로 클러스터 내부 모니터링이 함께 멈춰 당직 호출이 자동으로 가지 않았다. 집계 계층 서비스 당직 엔지니어가 평소처럼 자동 호출에 기대지 못하고 쿠버네티스 담당 당직 엔지니어에게 직접 전화했다. 그래서 쿠버네티스 당직 엔지니어가 장애를 알기까지 예상보다 오래 걸렸다. 연락을 받은 엔지니어가 CoreDNS 파드가 OOM 으로 죽고 있는 것을 찾아냈다.
쿠버네티스 DNS 구성은 충분히 튼튼하지 않았다. 애플리케이션 하나가 DNS 를 사실상 서비스 거부 공격하듯 몰아붙여 클러스터 전체를 멈추게 할 수 있어서는 안 된다. DNS 쿼리를 늘린 애플리케이션의 영향 범위는 적어도 노드 하나, 가능하면 파드 하나 안에 갇혀야 한다.
팀은 conntrack 을 처리하는 리눅스 커널의 경쟁 상태나 ndots 5 문제 같은 쿠버네티스 DNS 문제를 대부분 알고 있었고, 일부는 완화책도 갖고 있었다. 하지만 이 문제들이 DNS 구성에 얼마나 크게 영향을 주는지는 제대로 알지 못했다.
모니터링도 충분히 튼튼하지 않았다. 일부 알림은 클러스터 밖에서 돌았지만 대부분은 클러스터 안에서 돌았다. 그래서 DNS 가 무너졌을 때 당직 엔지니어가 자동으로 호출되지 않았고 복구 시간이 필요 이상으로 길어졌다.
같은 원인 · 공통 클라이언트 쪽 DNS 리졸버와 캐시, 컨테이너 메모리 한도, CoreDNS
IL-0102 배포와 워커 오토스케일링 폭주가 겹치자 크기를 고정해 둔 CoreDNS 가 메모리 한도를 넘겨 재시작된 뒤 회복하지 못했고, Buildkite 사이트 전체가 약 30분 멈췄다.Buildkite · 2026같은 원인 · 공통 컨테이너 메모리 한도, CoreDNS
IL-0048 대형 EKS 클러스터에서 CoreDNS 가 VPC DNS 리졸버로 보내는 질의가 링크 로컬 트래픽의 초당 1024 패킷 한도에 걸려 DNS 조회가 간헐적으로 타임아웃됐다.unknown · 2025같은 원인 · 공통 클라이언트 쪽 DNS 리졸버와 캐시, CoreDNS
IL-0155 NYC1 의 일부 DOKS 클러스터에서 공유 CPU 노드 위의 CoreDNS 때문에 DNS 가 간헐적으로 실패하고 NodeNotReady 가 났다DigitalOcean · 2026같은 원인 · 공통 CoreDNS
IL-0082 EKS 노드 교체 중 CoreDNS 파드 하나가 종료되자 남은 CoreDNS 파드가 늘어난 부하를 버티지 못해 DNS 조회가 느려지고 타임아웃이 났다.RebelMouse · 2025같은 원인 · 공통 CoreDNS
https://incidentlib-mcp.benchlet.com/mcpAPI 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.
같은 원인 · 공통 컨테이너 메모리 한도
IL-0204 Render 프랑크푸르트 클러스터에서 etcd 메모리 급증으로 컨트롤 플레인이 과부하에 걸렸고, 컨트롤 플레인 노드를 재부팅하자 그 위의 CoreDNS 가 다시 뜨지 못해 DNS 가 멈췄다.Render · 2024같은 원인 · 공통 CoreDNS
IL-0044 kube-prometheus-stack 업그레이드 뒤 Prometheus 가 WAL 재생 중 메모리를 50Gi 넘게 써서 시작할 때마다 OOMKilled 로 죽었다Saifeddine Rajhi · 2024같은 원인 · 공통 컨테이너 메모리 한도
IL-0182 트래픽이 급변할 때 수가 모자란 CoreDNS 가 과부하로 지연과 간헐적 네트워크 끊김을 일으켰고, 나중에는 과하게 늘린 CoreDNS 파드가 Karpenter 의 노드 통합을 막았다이언철 · 2024같은 원인 · 공통 CoreDNS
IL-0110 Grafana Agent 파드가 메모리를 많이 쓰던 노드에 Hangfire 파드가 함께 올라가 시스템 OOM 으로 CrashLoopBackOff 를 반복했고, 노드가 응답을 멈추고 NotReady 가 됐다.DFDS · 2024같은 원인 · 공통 컨테이너 메모리 한도
IL-0169 FR-PAR 의 Scaleway Kubernetes API 가 메모리 부족으로 쓰러져 노드 인증이 막히고 Kapsule 노드가 NotReady 가 됐다.Scaleway · 2024같은 원인 · 공통 컨테이너 메모리 한도
IL-0016 네임스페이스와 규칙이 늘어 live 클러스터의 Prometheus 가 메모리 부족으로 OOMKilled 되며 플랫폼 모니터링이 끊겼다UK Ministry of Justice · 2023같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 컨테이너 메모리 한도
IL-0206 GKE 파드 안의 Consul 에이전트가 메모리 급증으로 거듭 OOM kill 되어 Rails 파드가 데이터베이스 복제본을 찾지 못했고, 모든 쿼리가 primary 로 몰려 GitLab.com 이 느려졌다.GitLab · 2022같은 원인 · 공통 컨테이너 메모리 한도
IL-0094 JupyterHub 클러스터에서 학생 파드가 노드의 CPU 와 메모리를 다 써서 자원 보장이 부족했던 코어 파드가 자원을 얻지 못했고, 허브 전체가 멈췄다.2i2c · 2020같은 원인 · 공통 컨테이너 메모리 한도
IL-0033 kube-dns 파드 사이의 트래픽 불균형과 DNS 초당 패킷 한도 때문에 외부 DNS 조회가 많은 여러 서비스의 지연 시간이 20초까지 늘었다Airbnb · 2019같은 원인 · 공통 클라이언트 쪽 DNS 리졸버와 캐시
IL-0026 메모리 제한이 없는 fluentd-sumologic 파드가 메모리를 다 써서 운영 쿠버네티스 노드 두 대에 이틀 연속 SystemOOM 이 났다Blue Matador · 2019같은 원인 · 공통 컨테이너 메모리 한도
IL-0005 편집자가 연결함