IL-0097 2i2c · 2026-03-31kubernetesaws
2i2c 의 berkeley-geojupyter 클러스터는 AWS 에서 돌며 prod 허브를 운영한다. 이 클러스터는 대다수 클러스터보다 오래된 Kubernetes 1.33 을 쓰고 있었다. 하루 전 cluster autoscaler 버전을 올리는 업그레이드가 머지되면서 클러스터 버전과 autoscaler 버전이 맞지 않게 됐다. autoscaler 가 스케일업을 하지 않아 새 노드가 만들어지지 않았고, 그래서 서버가 시작되지 못했다.
팀은 업그레이드 묶음을 설계할 때 1.32 를 쓰는 클러스터만 고려했고, 1.33 을 쓰던 이 클러스터는 빠졌다. 팀은 클러스터를 1.33 에서 1.34 로 올리고, autoscaler 를 한 패치 버전 내려 k8s 1.34 용인 9.55.0 으로 맞췄다. 16:48 에 문제가 풀렸다. 영향 시간은 15:10 부터 17:00 까지였고, 지속 시간은 1시간 49분 10초로 기록됐다.
2026-03-31 15:10 부쿠레슈티 시각에 PagerDuty 알림 "[FIRING:1] At least two servers failed to start in the last 30m cluster=berkeley-geojupyter hub=prod (provider=aws immediate action needed)" 이 울렸다. 이 알림은 서버를 못 띄운 사용자의 신고가 아니라 자동 상태 점검에서 나왔다.
15:16 에 대응자는 스케일업 이벤트가 보이지 않는다고 적고 노드 그룹 라벨부터 확인했다. 15:23 에는 이 클러스터가 왜 아직 1.33 을 쓰고 있느냐는 의문이 나왔다.
15:35 에 대응자는 autoscaler 가 제대로 동작하지 않는다고 보고 autoscaler Deployment 로그를 보기 시작했다. 15:37 에 대응자는 전날 머지한 업그레이드에서 autoscaler 버전도 함께 올라갔다는 것을 떠올렸다.
증상 ? 노드 증설 실패
원인 ? 업그레이드로 깨진 호환성
15:10 에 자동 상태 점검이 서버 시작 실패를 잡아 PagerDuty 알림 "[FIRING:1] At least two servers failed to start in the last 30m" 을 API 로 띄웠고, 장애 #2057 이 열렸다. 실제 사용자가 서버를 못 띄워 알게 된 것이 아니었다.
대응자들이 autoscaler 버전을 올린 맥락을 생생히 기억하고 있어서 처음부터 올바른 방향으로 조사했다. 반면 팀이 업그레이드 묶음을 설계할 때 1.32 클러스터만 염두에 둬서 1.33 클러스터가 빠졌다. 이번에 맞춘 autoscaler 9.55.0 은 Kubernetes 1.34 용 버전이었다.
–