IL-0074 AirMap · 2018-07-19kubernetesnetworking
AirMap 플랫폼은 2018년 7월 19일 15:00 UTC 부터 20:00 UTC 까지 서비스가 중단되었다. 사용자 프로필을 가져오는 pilot 서비스부터 응답하지 않아 로그인이 실패했고, 결국 모든 서비스가 응답하지 않았다. 운영 쿠버네티스 클러스터에서 API 레플리카 대부분이 재시작을 반복했고 워커 노드 일부가 Not Ready 가 되었다. 로그에는 네트워크와 DNS 실패가 있었다. 내부 트래픽 관리 인프라에 붙는 사이드카 컨테이너가 이 실패로 죽으면서 워크로드 컨테이너도 함께 죽었다.
kubelet 을 되살려도 노드는 곧 다시 Not Ready 가 되었고, Not Ready 노드는 늘어났다. 18:00 UTC 쯤 대응팀은 클러스터의 모든 워커 노드를 시차를 두고 재시작하기로 했다. 서비스 에이전트 풀을 받치는 워커 노드가 정족수를 채울 만큼 재시작되자 상황이 풀리기 시작했고, 재시작한 노드에 정상 레플리카가 스케줄되었다. 약 1.5시간 뒤 모든 워커 노드의 재시작이 끝났고, 5xx 응답이 사라지고 상태 표시가 초록으로 바뀌었다.
AirMap 은 장애 중 조사와 사후 조사를 거쳐 증상을 쿠버네티스 이슈 #45419 와 연결했다. 이 이슈에서 근본 원인이 밝혀졌고 좋은 수정 후보도 나와 있었다. AirMap 이 쓰던 클라우드는 MS Azure 였다.
2018년 7월 19일 15:00 UTC 쯤 모니터링 인프라가 일부 API, 특히 pilot 과 tiles 의 5xx 응답 증가를 알렸다. 사용자 프로필을 가져오는 pilot 서비스가 먼저 응답하지 않아 플랫폼 로그인이 실패했고, 문제는 거기서 퍼져 나갔다.
영향을 받은 API 는 모두 운영 쿠버네티스 클러스터에서 돌고 있었다. API 레플리카 대부분이 재시작을 반복하며 트래픽을 받지 못했고, 워커 노드 일부가 Not Ready 로 보고되었다.
팀은 멈춘 워커 노드의 kubelet 을 되살려 보았지만 노드는 곧 다시 Not Ready 가 되었고, 그사이 다른 워커 노드도 Not Ready 로 표시되기 시작했다.
파드와 컨테이너 로그에는 네트워크와 DNS 실패가 찍혀 있었다. 내부 트래픽 관리 인프라에 연결하는 사이드카 컨테이너가 이 실패로 죽으면서 워크로드 컨테이너까지 함께 죽었고, 그래서 재시작이 반복되었다.
원인 ? 소프트웨어 결함
15:00 UTC 쯤 모니터링 인프라가 일부 API, 특히 pilot 과 tiles 의 5xx 응답 증가를 알렸다.
AirMap 은 운영 클러스터의 증상을 오픈소스 커뮤니티의 알려진 이슈와 대조해 근본 원인과 수정 후보를 찾을 수 있었다. 업스트림 수정이 클라우드 제공자에게 반영되기 전까지는 워커 노드를 정기적으로 롤링 재시작해 같은 장애를 막는다.
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet