IL-0207 GitLab · 2022-11-30kubernetes
2022년 11월 30일 GitLab.com 전체가 내려갔다. 한 엔지니어가 로컬 개발 환경에서 사내 도구로 일상적인 작업을 돌렸다. 로컬 배포나 롤백 도중 컨텍스트가 로컬 개발에서 운영으로 바뀌었고, 이때 잘 알려진 오픈소스 도구가 예상하지 못한 동작을 해 운영 환경에 변경이 들어갔다.
이 변경은 운영 Kubernetes 클러스터의 Consul 릴리스를 통째로 지웠다. Consul 은 GitLab 의 Postgres 고가용성 구성인 Patroni 의 핵심 구성 요소다. Consul 클러스터가 내려가자 Patroni 클러스터가 비정상이 됐고, GitLab.com 으로 가는 트래픽이 모두 5XX 오류로 끝났다.
팀은 Consul 릴리스를 운영에 다시 적용했다. Consul 클러스터가 빠르게 올라왔고 데이터베이스 클러스터도 회복했다. 쓰던 도구로는 Consul 릴리스를 다시 배포하기가 간단하지 않아 손으로 개입해야 했다. GitLab 은 이 장애가 코드 배포나 인프라 변경으로 생긴 것이 아니라고 밝혔다.
모니터링과 알림이 곧바로 울렸다. 알림 하나는 Patroni 페일오버를 가리켰다. GitLab.com 으로 가는 트래픽은 모두 5XX 오류로 끝났다.
CDN 은 장애 동안 약 1300만 건의 요청이 503 으로 끝났다고 집계했다.
엔지니어들은 페일오버 알림 때문에 Patroni 부터 살폈다. Patroni 가 응답하지 않아 Patroni 가 의존하는 Consul 을 봤고, Consul 서버가 없어진 것을 발견했다. Kubernetes 클러스터에서 Consul 릴리스가 통째로 사라져 있었고, Consul 관련 파드와 서비스가 모두 없었다.
원인 ? 운영 실수
모니터링과 알림 인프라가 곧바로 경보를 보냈다. 팀은 Consul 클러스터가 내려가 Patroni 클러스터에 영향을 주자마자 큰 장애가 난 것을 알았고, 근본 원인도 몇 분 안에 찾았다.
로컬 개발 환경에서 운영 클러스터에 접근할 수 있으면 도구가 컨텍스트를 예상과 다르게 바꾸는 순간 일상 작업이 운영 장애가 된다. GitLab 은 Kubernetes 배포 방식을 개선하고, Teleport 로 SRE 의 기본 권한을 읽기 전용으로 둘 수 있게 하면 이런 위험이 크게 줄어든다고 봤다. 알림과 원인 파악은 빨랐다. 지워진 릴리스를 다시 배포하는 데는 손으로 해야 할 일이 있었지만 비교적 빨리 끝났다.
–