IL-0110 DFDS · 2024-03-13kubernetesaws
DFDS 의 쿠버네티스 클러스터에서 2024-03-13 오전에 노드 하나가 NotReady 가 되어 새 노드로 교체됐다. 오후에는 그 새 노드에서 같은 일이 다시 일어났다.
근본 원인은 한 노드에서 Grafana Agent 파드가 메모리를 많이 쓰고 있던 것이었다. 같은 노드에 Hangfire 파드가 배치되자 시스템 OOM 으로 CrashLoopBackOff 가 꼬리를 물었고, 결국 노드 전체가 응답을 멈췄다. 문제의 Hangfire 파드는 개발용 컨테이너였다. 개발 워크로드가 운영 워크로드와 섞여 있었고, 모니터링 스택 대부분과 달리 grafana-agent 는 전용 노드 그룹에서 돌지 않았다.
첫 대응에서 팀은 EC2 인스턴스를 비정상으로 표시해 새 노드를 띄우고, 문제 노드를 cordon 하고 강제로 drain 한 뒤 종료했다. cordon 은 노드에 새 파드가 배치되지 않게 막는 것이고, drain 은 노드의 파드를 내보내는 것이다. 이후 조사에서 새로 적용한 LimitRange 때문에 Grafana Agent 가 13:02 까지 내려가 있었던 것을 찾아 고쳤다. 개발 컨테이너를 0개로 줄이자 트래픽이 정상으로 돌아왔지만, 3개로 되돌리자 15:03 에 새 노드가 다시 NotReady 가 됐다. 팀은 15:15 에 개발 컨테이너를 다시 0개로 줄이고 담당 팀에 메일을 보냈고, 15:52 에 개발팀이 문제를 확인하고 수정에 들어갔다. 탐지까지 4분, 복구까지 399분이 걸렸다.
2024-03-13 10:01 UTC 에 쿠버네티스 노드 하나가 NotReady 상태가 됐다. 그때 노드에 잡힌 requests 는 CPU 78%, 메모리 82% 였다. 10:03 에 Slack 으로 알림이 왔고, 10:05 에 알림을 보고 조사를 시작했다.
10:13 에 노드에 SSH 로 들어가려 했지만 노드가 응답하지 않았고, 10:19 에야 다시 응답했다. 10:25 에 CloudWatch 에서 장애 직전까지 EC2 네트워크 트래픽이 열 배로 늘어난 것을 보았다. 10:30 에는 문제 노드에서 Grafana Agent 가 돌고 있었고 메모리를 많이 쓰고 있었다는 것을 확인했다.
12:10 에 statuspage.io 로 해결을 발표한 뒤에도 조사를 이어갔다. 13:00 에 새로 적용한 LimitRange 때문에 Grafana Agent 가 여전히 내려가 있는 것을 발견했다. 13:49 에는 Hangfire 로 작업을 실행하는 개발 컨테이너가 OOM 으로 실패하고, OOM 이 날 때마다 CrashLoopBackOff 를 반복하고 있었다는 결론을 냈다. 13:55 에 이 개발 컨테이너가 쓰는 RDS 인스턴스에서 문제를 찾았고, EC2 네트워크 트래픽이 늘어난 것이 RDS, 개발 컨테이너와 맞물려 있다는 것도 찾았다.
개발 컨테이너를 0개로 줄이자 몇 분 뒤 EC2 네트워크 트래픽이 정상으로 돌아왔다. 그런데 원래대로 3개로 되돌리자 15:03 에 새로 띄운 노드가 NotReady 가 되어 Slack 알림이 다시 왔다.
10:03 UTC 에 Slack 으로 알림이 왔고, 10:05 에 알림을 확인하고 조사를 시작했다. 두 번째 노드는 15:03 에 Slack 알림이 왔고 15:09 에 확인했다. 탐지까지 걸린 시간은 4분이었다.
포스트모템에서 나온 후속 조치를 끝까지 챙겨야 한다. CloudWatch 에서 어떤 지표가 쓸모 있는지가 팀에 제대로 공유되지 않아 진단과 조사가 어려웠다.
같은 원인 · 공통 컨테이너 메모리 한도, 애플리케이션 데이터베이스
같은 원인 · 공통 컨테이너 메모리 한도, 텔레메트리 에이전트
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 애플리케이션 데이터베이스
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 텔레메트리 에이전트
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 애플리케이션 데이터베이스
같은 원인 · 공통 텔레메트리 에이전트
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 텔레메트리 에이전트
같은 원인 · 공통 컨테이너 메모리 한도
같은 원인 · 공통 애플리케이션 데이터베이스
같은 원인 · 공통 애플리케이션 데이터베이스
같은 원인 · 공통 텔레메트리 에이전트
같은 원인 · 공통 컨테이너 메모리 한도