IL-0199 GitHub · 2020-07-13kubernetesnetworking
운영 쿠버네티스 파드 안의 컨테이너 하나가 메모리 한도를 넘어 계속 종료됐다. 이 컨테이너는 운영 트래픽과 상관이 없었지만, 쿠버네티스는 모든 컨테이너가 정상이어야 파드를 사용 가능으로 본다. 그래서 파드들이 사용 불가로 표시되며 클러스터 용량이 줄었다.
보통은 컨테이너가 다시 시작되며 1분 안팎에 회복된다. 그런데 이 컨테이너에는 ImagePullPolicy 가 Always 로 설정돼 있어서 다시 시작할 때마다 이미지를 새로 받아야 했다. 그보다 앞서 끝난 정기 DNS 유지보수 작업 때문에 클러스터가 레지스트리에 접속하지 못했고, 그래서 파드가 뜨지 못했다. 이를 수습하려고 재배포를 실행하자 실패가 운영 클러스터들로 번지기 시작했다.
캐시된 DNS 레코드로 프로세스를 다시 시작한 뒤에야 이미지를 받아 올 수 있었다. 그 뒤 재배포로 서비스를 복구했다. 장애는 4시간 25분 이어졌다.
2020년 7월 13일 08:18 UTC 에 운영 쿠버네티스 클러스터의 파드들이 사용 불가로 표시되기 시작했다. 이 상태가 클러스터 전체로 번지면서 처리 용량이 줄었고, 결국 GitHub.com 서비스가 내려갔다.
파드를 살펴보니 파드 안의 컨테이너 하나가 정해진 메모리 한도를 넘어 종료되고 있었다. 이 컨테이너는 운영 트래픽 처리에 필요하지 않았다. 하지만 쿠버네티스는 파드 안의 모든 컨테이너가 정상이어야 파드를 사용 가능으로 표시한다.
평소라면 이런 경우 클러스터가 1분 안팎에 회복한다. 이번에는 파드가 다시 뜨지 못했다. 클러스터가 이미지 레지스트리에 접속하지 못해 이미지를 받아 오지 못했기 때문이다.
복구하려고 재배포를 실행하자 오히려 영향이 커졌다. 실패가 운영 클러스터들로 퍼지기 시작했다.
원인 ? DNS·네트워크 장애
–
운영에 필요 없는 보조 컨테이너 하나도 파드 전체를 사용 불가로 만들 수 있다. ImagePullPolicy 가 Always 이면 재시작마다 레지스트리에 기대게 되므로, 레지스트리나 DNS 가 흔들릴 때 평소에는 1분이면 끝날 재시작이 긴 장애로 바뀐다. 수습하려고 재배포하면 같은 실패를 전체 클러스터로 퍼뜨릴 수 있다.
–