IL-0010 Skyscanner · 2021-08-25kubernetesaws
Skyscanner 는 셀 아키텍처로 서비스를 운영한다. 셀 하나는 리전 하나에 있고, 가용 영역마다 쿠버네티스 클러스터 여러 개로 이뤄진다. 셀 안의 서비스는 n+2 구성으로 배포한다. 클러스터 하나가 고장 나고 하나가 유지 보수로 빠져도 트래픽 전부를 처리할 수 있다는 뜻이다. 모든 서비스는 AWS 스팟 인스턴스에서 돈다.
바뀐 파일은 셀 설정의 루트에 있어 거의 바뀌지 않는 파일이었다. 이 파일은 리전 설정을 배포하는 파일이라, 시스템은 이 변경을 전 세계에 곧바로 밀어 넣었다. {{ }} 가 빠지자 템플릿이 더는 적용되지 않았고, 이 설정을 쓰는 네임스페이스가 모두 다시 적용되면서 망가졌다. GMT 16:00 에 ArgoCD 가 클러스터를 이 설정에 맞추면서 서비스 478개를 모두 지웠다.
Skyscanner 는 GitOps 로 클러스터가 스스로 설정을 맞추게 한다. 그래서 클러스터마다 올바른 설정을 되돌려 놓자 클러스터가 스스로 원래 상태로 돌아왔다. 팀은 리전 하나와 핵심 서비스를 먼저 복구해 GMT 20:30 무렵 리전 하나에서 모든 트래픽을 받으며 skyscanner.net 을 다시 열었다. 나머지 리전과 핵심이 아닌 서비스는 목요일과 금요일에 걸쳐 되살리고 확인했다.
2021년 8월 25일 Skyscanner 는 네 시간 반 동안 전 세계에서 완전히 멈췄다. skyscanner.net 웹사이트에 접속할 수 없었고 모바일 앱도 동작하지 않았다. 여행자와 비즈니스 파트너 모두 Skyscanner 를 쓸 수 없었다.
GMT 16:00 에 배포 시스템 ArgoCD 가 클러스터를 설정에 맞추는 동기화를 시도했다. 새 설정에는 유효한 네임스페이스가 하나도 없었고, ArgoCD 는 전 세계 모든 리전과 가용 영역의 모든 네임스페이스에서 서비스 478개를 지우기 시작했다.
백업은 준비돼 있었지만, 그 전에 바뀐 IAM 정책 때문에 정작 필요한 순간에 백업을 꺼내기가 어려웠다.
–
설정에 템플릿과 로직을 넣는 순간 그 설정은 코드가 된다. 팀은 설정의 복잡도를 높이면서도 이 파일을 설정으로만 여겨 테스트도 린트도 두지 않았다. 전역 설정 배포를 막으려고 오래 공을 들였지만, 이 경로로 변경이 나가는 일은 아주 드물어서 미처 떠올리지 못했다. 시나리오와 런북은 이 정도 규모의 장애를 상정하지 않았다. 백업은 복원해 보기 전까지 백업이 아니다. 장애 대응을 지휘하는 인시던트 커맨더를 가장 경험 많은 사람이 맡아 누구도 탓하지 않고 상황을 이끈 것이 복구에 큰 도움이 됐다.
같은 원인 · 공통 설정 템플릿, Argo CD
IL-0192 Crossplane 컴포지션의 병합 정책 변경이 Service 타입을 ClusterIP 로 바꿔 클라우드 로드 밸런서가 지워지고 Grafana Cloud 서비스의 약 25%가 끊겼다.Grafana Labs · 2025같은 원인 · 공통 설정 템플릿
IL-0191 Loki distributor 서비스에 레이블 셀렉터가 하나 더 들어가 롤아웃 중 새 파드 몇 개에만 쓰기 트래픽이 몰렸고, 그 파드들이 OOM으로 죽으면서 로그 쓰기 경로가 약 25분간 멈췄다.Grafana Labs · 2022같은 원인 · 공통 설정 템플릿
https://incidentlib-mcp.benchlet.com/mcpAPI 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.