{"id":"IL-0099","org":"2i2c","date":"2025-05-12","docs":["https://github.com/2i2c-org/infrastructure/pull/6047","https://github.com/2i2c-org/meta/issues/2194","https://github.com/2i2c-org/meta/issues/2217","https://github.com/2i2c-org/infrastructure/issues/6105","https://github.com/2i2c-org/infrastructure/issues/6106"],"title":{"en":"User servers on 2i2c's Earthscope hub took over 15 minutes to start and kernels were killed during a workshop, because a profile option guaranteed 8 GB of memory with no limit on 32 GB nodes","ko":"메모리 상한 없이 8GB 만 보장한 프로필 때문에 워크숍 중 사용자 파드가 서로를 축출해 서버 시작이 15분을 넘고 커널이 죽었다."},"domain":["kubernetes"],"impact":{"scope":"Users of the Earthscope hub during a workshop and a short course, plus other instructors using the hub: server starts over 15 minutes and killed kernels","users":"about 30 users in the short course, plus other instructors","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"A memory guarantee without a limit lets a user server grow into memory that other pods on the same node were counting on, and on a shared node that ends with users' pods evicting each other. Setting the guarantee equal to the limit removes the overcommitment.\n\nFor a known workshop, pre-warming enough nodes ahead of time keeps server start times short.","ko":"메모리 상한 없이 보장량만 둔 프로필에서는 노드를 나눠 쓰는 사용자끼리 서로를 축출할 수 있다. 메모리 보장량과 상한을 같게 두면 한 사용자의 메모리 급증이 같은 노드의 다른 사용자에게 번지지 않는다. 이번에는 로그에 뚜렷한 오류가 없었고 원인은 프로필 설정에 있었다. 워크숍 직전에는 프로필 구조를 바꾸지 않고 노드를 미리 띄우는 쪽으로 대응했다."},"related":[],"sources":[{"url":"https://github.com/2i2c-org/incident-reports/blob/main/reports/2025-05-12-earthscope-resource-provisioning-issue.md","kind":"github","license":"unknown","archived":null}],"summary":{"en":"2i2c runs a JupyterHub for the Earthscope community. During a workshop, users started servers from a legacy profile option that guaranteed each server 8 GB of memory on a 32 GB node but set no memory limit. When users kept using more than their guarantee, the node's memory was heavily overcommitted, users' pods evicted each other, kernels were killed and server starts took more than 15 minutes.\n\nThe first response on the evening of 12 May was a helm rollout and hub redeploy, which helped only partly; the instructor switched to a local Python environment for the rest of the day. On 13 May at 14:30 the cause was identified as the legacy profile option. The engineers did not want to change the profile options so soon before that day's workshop, so they made the 'medium' profile available so more users could share a machine, raised its guarantee so the overcommitment was smaller, and pre-warmed the cluster with 15 nodes for the 30 users. The community confirmed at 19:28 that the workshop was running smoothly, and the minimum node count was set back to zero at 19:31.\n\nOn 14 May, before the next workshop, the engineers changed the community's profile options for small nodes so that the memory guarantee equals the memory limit. The community confirmed that workshop went well.","ko":"2025년 5월 12일 2i2c 가 운영하는 Earthscope 허브에서 워크숍과 단기 강좌 도중 사용자 서버 시작이 15분을 넘고 커널이 죽었다. 약 30명이 듣는 강좌와 허브를 쓰던 다른 강사들이 영향을 받았다.\n\n워크숍이 쓰던 예전 프로필 옵션은 32GB 노드에서 메모리를 8GB 보장했지만 상한을 두지 않아 메모리 오버커밋이 컸다. 한 사용자의 메모리 사용이 보장량을 넘어 치솟으면 같은 노드를 쓰는 다른 사용자의 파드가 축출돼 커널이 죽었다.\n\n첫날 밤 helm 롤아웃과 허브 재배포로 조금 나아졌지만 문제는 남았다. 다음 날 원인을 찾은 엔지니어들은 워크숍 직전에 사용자 프로필의 노드 공유 비율과 상한을 바꾸지 않기로 했다. 대신 medium 프로필을 열고 보장량을 올려 오버커밋을 줄였고, 노드 15개를 미리 띄워 30명 워크숍을 치렀다. 5월 14일에는 작은 노드용 프로필의 메모리 보장량과 상한을 같게 맞추는 변경을 배포했고, 그날 워크숍은 문제없이 끝났다."},"trigger":{"en":"A workshop with about 30 users on a profile option that guaranteed 8 GB of memory and set no memory limit on 32 GB nodes.","ko":"워크숍 사용자들이 메모리 상한이 없는 프로필로 보장량 8GB 보다 많은 메모리를 꾸준히 썼다."},"severity":"unknown","symptoms":["pods-evicted"],"timeline":{"detected_after":null,"resolved_after":null},"date_kind":"incident","detection":{"en":"A Freshdesk support ticket from the community at 20:15 EEST, brought to the team's attention in the #support-freshdesk Slack channel at 20:49.","ko":"커뮤니티가 Freshdesk 지원 티켓으로 알렸다. 티켓은 20:15 에 열렸고 20:49 에 #support-freshdesk 슬랙 채널로 팀에 전달됐으며, 20:57 에 첫 엔지니어가 확인했다."},"components":["memory-limit","node-pool"],"root_cause":"capacity","remediation":[{"text":{"en":"ran a helm rollout and hub redeploy, which partly improved server starts","ko":"5월 12일 21:05 에 helm 롤아웃과 허브 재배포를 했고 상황이 일부 나아졌다."}},{"text":{"en":"made the 'medium' profile available and raised its memory guarantee to reduce overcommitment","ko":"5월 13일 15:51 에 medium 프로필을 열었고, 그 메모리 보장량을 올려 오버커밋을 줄였다."}},{"text":{"en":"pre-warmed the cluster with 15 nodes for the 30-user workshop","ko":"17:15 에 30명 워크숍을 위해 노드 15개를 미리 띄웠다."}},{"text":{"en":"set explicit memory limits, with the guarantee equal to the limit, on the community's small-node profile options (https://github.com/2i2c-org/infrastructure/pull/6047)","ko":"5월 14일 워크숍 전에 작은 노드용 프로필의 메모리 보장량과 상한을 같게 맞춰 명시적인 메모리 상한을 두는 변경을 배포했다."}}],"action_items":[{"text":{"en":"Write an incident report","ko":"장애 보고서를 쓴다."}},{"text":{"en":"Hold an internal retrospective about the incident (https://github.com/2i2c-org/meta/issues/2194)","ko":"내부 회고를 열어 이번 장애에서 배울 점을 정리한다."}}],"contributing":["no-resource-limits"],"recurrence_of":null,"symptoms_text":{"en":"On 12 May 2025 at 20:15 EEST a Freshdesk ticket reported that users' servers on the Earthscope hub were taking more than 15 minutes to start and that their kernels were being killed. It happened during a workshop and also affected other instructors using the hub; a second report said a short course of about 30 users was having major problems.\n\nA helm rollout and hub redeploy at 21:05 seemed to help, and the community could launch servers again, but things still hung. At 22:00 an engineer reported the problem was still there, with the error `tornado.web.HTTPError: HTTP 404: Not Found (Kernel does not exist`.\n\nA second engineer went through the saved logs, found nothing obviously wrong with the hub, and concluded it was resource exhaustion. A Grafana panel showed high CPU usage on the core node where the hub was running.","ko":"2025년 5월 12일 20:15 EEST 에 Freshdesk 지원 티켓이 들어왔다. 워크숍 중 사용자 서버가 시작하는 데 15분 넘게 걸리고 커널이 죽는다는 내용이었다. 같은 허브를 다른 용도로 쓰던 강사들도 영향을 받았다.\n\n20:59 에는 약 30명이 듣는 단기 강좌에서 허브에 큰 문제가 있다는 보고가 따로 들어왔다. 21:05 에 엔지니어가 helm 롤아웃과 허브 재배포를 하자 상황이 나아지는 듯했다. 하지만 21:59 에 커뮤니티는 서버는 다시 뜨지만 여전히 멈춘다고 알렸고, 22:00 에 엔지니어는 문제가 계속된다며 tornado.web.HTTPError: HTTP 404: Not Found (Kernel does not exist 오류를 보고했다.\n\n두 번째 엔지니어가 로그를 살폈지만 뚜렷한 이상을 찾지 못했고, 허브 자체가 아니라 자원 고갈 문제라고 결론을 내렸다. Grafana 의 클러스터 정보 대시보드에서는 허브가 돌던 코어 노드의 CPU 사용률이 높았다.\n\n원인은 다음 날 14:30 에 찾았다. 워크숍이 쓰던 예전 프로필 옵션은 32GB 노드에서 메모리를 8GB 보장했지만 상한은 두지 않았다. 사용자가 보장량보다 꾸준히 더 쓰면 다른 사용자의 커널이 죽었다."},"updated_at":"2026-11-10T00:00:33.026812Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0099","org_slug":"2i2c"}