IL-0468 UC Berkeley · 2017-03-20kubernetesgcp
노드당 볼륨 개수 한도에 걸려 새 학생 서버 파드가 Pending 에 머물고 학생들이 500 오류를 받았다
2017-03-18 16:30 에 자원을 아끼려고 학생 한 명에게 주는 RAM 을 2G 에서 1G 로 줄였다. 노드 크기는 26G RAM 그대로였고, 기존 노드 여럿은 cordon 해 며칠에 걸쳐 천천히 내리는 중이었다. 2017-03-20 이른 시각부터 13:00 무렵까지 새 학생 서버 일부가 Pending 에 머물러 500 오류를 냈다. 스케줄러는 MaxVolumeCount 때문에 파드를 어느 노드에도 올리지 못했다. Google Compute Engine 은 노드당 16개가 넘는 디스크를 받지만 쿠버네티스는 아직 그러지 못했다. 팀은 이 점을 내다보지 못했다.
13:03 에 Google Container Engine 이 쓰는 인스턴스 템플릿을 복사해 n1-highmem-4 대신 더 작은 n1-highmem-2 노드를 띄우게 고치고, 관리형 인스턴스 그룹이 새 템플릿을 쓰게 했다. 잘 쓰고 있는 학생을 건드리지 않으면서 새 학생이 로그인할 수 있게 하는 가장 쉬운 방법이었다. 인스턴스 그룹을 30노드 늘리고 populate.bash 를 돌렸다. 13:04 에는 노드가 섞인 상태에서 오작동할까 봐 간단한 오토스케일러를 멈췄다. 13:11 에 새 노드가 모두 붙어 파드가 Pending 을 벗어났다.
그러나 이미 JupyterHub 가 파드를 기다리는 5분이 지나 있어서 JupyterHub 는 그 파드들을 알지 못했다. 그래서 'redirected too many times' 오류가 났다. 관리자들은 사용자가 알려 올 때마다 제어판에서 그 사용자의 파드를 멈췄다가 다시 켰다. 14:23 에는 허브와 프록시 파드를 재시작해 대부분의 사용자 상태를 바로잡았다. 일부 요청은 599 타임아웃으로 실패했고, 관리자가 손으로 하는 사용자 재시작은 며칠 더 이어졌다.
- 심각도
- –
- 영향 범위
- Some new student servers on the JupyterHub could not start and returned 500 errors from early on 20 March 2017 until about 13:00, followed by 'redirected too many times' errors, some 599 timeouts and manual restarts over the following days
- 영향 사용자
- Students starting new servers on the JupyterHub
- 지역
- –
- 감지까지
- –
- 복구까지
- –
증상
2017-03-20 12:44 에 새 학생 서버가 500 오류를 내며 로그인을 막는다는 보고가 들어왔다. 한 사람의 문제가 아니라 널리 퍼진 증상이었다.
영향받은 학생의 파드를 kubectl describe pod 로 보니 Pending 상태에 머물러 있었고, 오류 메시지는 `pod failed to fit in any node fit failure on node (XX): MaxVolumeCount` 였다. 새 학생 서버 파드가 모두 같은 상태였다.
오류를 검색해 보니 kubernetes/kubernetes 이슈 24317 이 나왔다. Google Compute Engine 은 노드 하나에 디스크를 16개보다 많이 붙일 수 있고, 팀은 배포 전에 이를 확인해 두었다. 그러나 쿠버네티스는 아직 그만큼 붙이지 못했다.
새 노드를 붙여 파드가 Pending 을 벗어났을 때는 JupyterHub 가 파드를 기다리는 5분이 이미 지나 있었다. 그래서 JupyterHub 는 그 파드들을 알지 못했다. 클러스터의 상태와 JupyterHub 의 상태가 어긋나 사용자들은 'redirected too many times' 오류를 받았다. 허브와 프록시를 재시작한 뒤에도 일부 요청은 599 타임아웃으로 실패했다.
원인
- 촉발
- 2017-03-18 16:30 에 자원을 아끼려고 학생 한 명에게 주는 메모리를 2G 에서 1G 로 줄였지만, 노드 크기는 26G RAM 그대로 두었다. 그 결과 Google Cloud 의 노드당 디스크 개수 한도에 닿았다.
감지
12:44 에 새 학생 서버가 500 오류로 로그인을 막는다는 보고가 들어왔고, 팀은 이것이 한 사람의 문제가 아니라 널리 퍼진 장애라고 판단했다.
조치
- Google Container Engine 이 쓰는 인스턴스 템플릿을 복사해 n1-highmem-4 대신 더 작은 n1-highmem-2 노드를 띄우도록 고쳤다.
- Google Container Engine 의 관리형 인스턴스 그룹이 새 템플릿을 쓰게 바꿨다.
- 새 인스턴스 그룹을 30노드 늘렸다. 노드 하나에 학생 12명쯤이 들어가는 용량이었다.
- populate.bash 를 돌려 새 노드에서 학생 파드가 제때 뜨게 했다.
- 노드가 섞인 낯선 상태에서 오작동할까 봐 간단한 오토스케일러를 멈췄다.
- 'redirected too many times' 오류를 알려 온 사용자마다 관리자가 제어판에서 그 사용자의 파드를 멈췄다가 다시 켰다.
- 'redirected too many times' 오류가 많이 나서 허브 파드와 프록시 파드를 재시작했다.
후속 조치
- 이번에 부딪힌 쿠버네티스 버그인 kubernetes/kubernetes 이슈 24317 의 진행을 지켜본다.
- JupyterHub 의 'too many redirects' 문제를 근원에서 찾아 고친다.
- 더 이상 쓰지 않는 예전의 큰 노드를 모두 지운다.
- 파드가 Pending 상태로 무시할 수 없을 만큼 오래 머물면 개수와 상관없이 알림을 보낸다.
교훈
–
출처
참고 문서
관련 사례
IL-0102배포와 워커 오토스케일링 폭주가 겹치자 크기를 고정해 둔 CoreDNS 가 메모리 한도를 넘겨 재시작된 뒤 회복하지 못했고, Buildkite 사이트 전체가 약 30분 멈췄다.Buildkite · 2026같은 원인 · 공통 노드 풀, 컨테이너 메모리 한도
같은 원인 · 공통 노드 풀, 컨테이너 메모리 한도
같은 원인 · 공통 노드 풀, 컨테이너 메모리 한도
같은 원인 · 공통 노드 풀, 컨테이너 메모리 한도
IL-0016네임스페이스와 규칙이 늘어 live 클러스터의 Prometheus 가 메모리 부족으로 OOMKilled 되며 플랫폼 모니터링이 끊겼다UK Ministry of Justice · 2023같은 원인 · 공통 노드 풀, 컨테이너 메모리 한도
IL-0094JupyterHub 클러스터에서 학생 파드가 노드의 CPU 와 메모리를 다 써서 자원 보장이 부족했던 코어 파드가 자원을 얻지 못했고, 허브 전체가 멈췄다.2i2c · 2020같은 원인 · 공통 노드 풀, 컨테이너 메모리 한도
IL-0155NYC1 의 일부 DOKS 클러스터에서 공유 CPU 노드 위의 CoreDNS 때문에 DNS 가 간헐적으로 실패하고 NodeNotReady 가 났다DigitalOcean · 2026같은 원인 · 공통 노드 풀
같은 원인 · 공통 노드 풀
IL-0082EKS 노드 교체 중 CoreDNS 파드 하나가 종료되자 남은 CoreDNS 파드가 늘어난 부하를 버티지 못해 DNS 조회가 느려지고 타임아웃이 났다.RebelMouse · 2025같은 원인 · 공통 노드 풀
같은 원인 · 공통 클라우드 블록 스토리지
IL-0044kube-prometheus-stack 업그레이드 뒤 Prometheus 가 WAL 재생 중 메모리를 50Gi 넘게 써서 시작할 때마다 OOMKilled 로 죽었다Saifeddine Rajhi · 2024같은 원인 · 공통 컨테이너 메모리 한도
IL-0110Grafana Agent 파드가 메모리를 많이 쓰던 노드에 Hangfire 파드가 함께 올라가 시스템 OOM 으로 CrashLoopBackOff 를 반복했고, 노드가 응답을 멈추고 NotReady 가 됐다.DFDS · 2024같은 원인 · 공통 컨테이너 메모리 한도
IL-0169FR-PAR 의 Scaleway Kubernetes API 가 메모리 부족으로 쓰러져 노드 인증이 막히고 Kapsule 노드가 NotReady 가 됐다.Scaleway · 2024같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 컨테이너 메모리 한도
IL-0070dask-gateway로 워커를 대량으로 띄우자 노드가 1분 만에 100대 늘었고, Prometheus가 메모리를 거의 다 쓰던 코어 노드에서 hub 파드를 비롯한 중요한 파드들이 축출되거나 재시작됐다2i2c · 2023같은 원인 · 공통 노드 풀
IL-0206GKE 파드 안의 Consul 에이전트가 메모리 급증으로 거듭 OOM kill 되어 Rails 파드가 데이터베이스 복제본을 찾지 못했고, 모든 쿼리가 primary 로 몰려 GitLab.com 이 느려졌다.GitLab · 2022같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 클라우드 블록 스토리지
같은 원인 · 공통 노드 풀
같은 원인 · 공통 노드 풀
IL-0026메모리 제한이 없는 fluentd-sumologic 파드가 메모리를 다 써서 운영 쿠버네티스 노드 두 대에 이틀 연속 SystemOOM 이 났다Blue Matador · 2019같은 원인 · 공통 컨테이너 메모리 한도
IL-0401Kubernetes 프로젝트의 Prow 빌드 클러스터 노드가 GCP 디스크 IOPS 스로틀링에 걸려 테스트가 이상하게 실패하고 PR 머지가 몇 시간 멈췄다Kubernetes project · 2019같은 원인 · 공통 클라우드 블록 스토리지
같은 원인 · 공통 컨테이너 메모리 한도
IL-0518GKE 위 gitlab.freedesktop.org 의 디스크가 모자라 저장소를 늘리려던 30분 작업이 GitLab 전체의 4시간 장애가 됐다freedesktop.org · 2018같은 원인 · 공통 클라우드 블록 스토리지
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 클라우드 블록 스토리지
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0468
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0468/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.