IL-0204 Render · 2024-12-17 (게시일)kubernetesnetworking
2022년 1월 Render 의 프랑크푸르트 클러스터 하나에서 etcd 메모리가 급증해 Kubernetes 컨트롤 플레인이 과부하에 걸렸다. 처음에는 새 배포와 크론 잡 실행만 실패했다. Render 는 이 단계를 매우 나쁘지만 치명적이지는 않은 상태로 봤다.
DNS 서버인 CoreDNS 는 컨트롤 플레인 노드에서 돌고 있었고, 팀은 장애 중에 그 노드들을 재부팅했다. Kubernetes API 서버는 DNS 질의에 답할 때는 필요 없지만 DNS 서버가 초기화할 때는 필요하다. API 서버가 컨트롤 플레인과 함께 내려가 있었기 때문에 CoreDNS 가 다시 시작하지 못했다. 그 결과 이미 돌던 서비스로 가는 요청까지 실패했다. CoreDNS 가 장애 내내 떠 있었다면 kubernetes 플러그인이 관리하는 메모리 캐시로 DNS 요청에 답해 영향을 줄일 수 있었다.
Render 는 데이터 플레인이 컨트롤 플레인에서 충분히 분리되지 않은 것을 핵심 문제로 꼽았다. 노드를 재부팅하지 않았더라도 etcd 메모리 급증만으로 DNS 서버가 재시작될 수 있었다.
2022년 1월 Render 의 프랑크푸르트 Kubernetes 클러스터 하나에서 새 배포와 크론 잡 실행이 실패했다. etcd 메모리 급증으로 컨트롤 플레인이 과부하에 걸린 상태였다.
처음에는 새 배포와 크론 잡처럼 컨트롤 플레인을 거치는 작업만 실패했다. 장애 중에 컨트롤 플레인 노드를 재부팅한 뒤로 DNS 조회가 실패하기 시작했고, 이미 돌고 있던 서비스로 가는 요청까지 실패했다.
–
–
CoreDNS 는 API 서버가 내려가 있어도 메모리 캐시로 DNS 질의에 답할 수 있지만, 초기화할 때는 API 서버가 필요하다. CoreDNS 가 컨트롤 플레인 노드에 있었기 때문에, 컨트롤 플레인 장애 중에 노드를 재부팅하자 새 배포와 크론 잡만 실패하던 장애가 이미 돌던 서비스로 가는 요청까지 실패하는 장애로 커졌다.
핵심 문제는 데이터 플레인이 컨트롤 플레인에서 충분히 분리되어 있지 않았다는 점이다. 노드를 재부팅하지 않았더라도 etcd 메모리 급증만으로 CoreDNS 가 재시작될 수 있었다.
같은 원인 · 공통 etcd, 쿠버네티스 API 서버
같은 원인 · 공통 etcd, 쿠버네티스 API 서버
같은 원인 · 공통 etcd, 쿠버네티스 API 서버
같은 원인 · 공통 CoreDNS
같은 원인 · 공통 CoreDNS
같은 원인 · 공통 CoreDNS
같은 원인 · 공통 CoreDNS
같은 원인 · 공통 CoreDNS
같은 원인 · 공통 CoreDNS
같은 원인 · 공통 쿠버네티스 API 서버
같은 원인 · 공통 쿠버네티스 API 서버
같은 원인 · 공통 쿠버네티스 API 서버
같은 원인 · 공통 쿠버네티스 API 서버
같은 원인 · 공통 쿠버네티스 API 서버