# 장애발생 개념도
장애 사례 설명
1.개발자가 소스 코드를 수정하고 CodeCommit에 최종적으로 반영을 한다.
2. 수정된 소스코드가 CodeCommit에 반영되어, 최신 코드로 업데이트 된다.
3. 최종 반영된 소스코드는 Codebuild를 통해 ECR에 이미지 형태로 저장된다.
4. 이번 사례는 개발자가 최신 코드를 반영했을때 잘못된 코딩으로인해 EKS 클러스터 내에서 DB로의 커넥션이 무한으로 반복되는 무한루프 상태가 되었다. 결국에는 EKS 클러스터의 NodeGroup내에 존재하는 EC2 인스턴스 자체가 다운이 되는 문제가 발생 되었다.
장애 해결 방안
1. 원인파악이 최우선: 일단 서비스가 안되거나 리소스의 상태가 이상하다고 판단되면 가장 처음으로 해야하는일은 EKS 내의 NodeGroup 안에서의 EC2들의 상태를 파악하는 일이다. 이것이 왜 중요하냐면 보통 장애가 날 경우 EKS의 pod들의 상태가 pending 상태로 되거나 리소스가 삭제가 되지 않고 Terminating상태에 머물러 있는 경우가 태반이다.
그도 그럴것이 서버에 자원을 올려 놓았는데, 서버가 죽어버리면 해당 애플리케이션은 그 상태로 정지가 되어 버린다. 삭제 명령어도 먹히지 않고, 실행 명령어 또한 먹히지 않는다.
그래서 가장먼저 확인해야할 사항은 NodeGroup의 EC2 인스턴스의 상태를 파악한다. 만약 EC2의 상태가 "알수없음" 상태로 존재한다면 EC2 인스턴스 자체가 다운되었다 라고 볼 수있다. 이런 경우에는 현재 실행중인 NodeGroup을 삭제하고 새로 생성하여 문제를 해결하거나, 인스턴스를 정지 후 재시작 하는 방법 등 서버 상태를 정상화 하기위한 방법을 찾아야 한다.
2. 개발환경을 통한 사전검토: 너무 당연한 일이지만 운영환경과 동일한 개발환경을 세팅하고, 운영환경에 반영하기 전 개발 환경에서 사전 테스트를 진행 후 문제가 없으면 운영환경에 반영하는 등 작업을 수행해야 한다. 그래서 개발환경에서 발생하는 문제를 운영환경에 반영하기 전에 사전에 차단함으로써 장애 발생 요인을 줄일 수 있다.
3. 발빠른 대처: 아무리 개발환경에서 정상적으로 테스팅을 수행 했더라고, 운영환경에서 장애가 발생하지 말라는 법은 없다. 장애 발생 요소를 대폭 줄이는건 맞지만 100% 완벽하게 장애가 발생하지 않는다 라고 장담 할 수는 없다.
그렇다면 장애가 발생 했을때 얼마나 빠르게 대처를 하는가가 관건이다. 장애가 발생 했을때 발빠르게 대처하기 위해서는 해당 시스템을 누구보다 잘 알고 있어야 하며, 일단 가장 빠른 복구 방법을 선택해야 한다. 가령 이번에 발생한 장애 요인처럼 서비스가 무한 루프의 발생으로인해 갑자기 안될경우 쿠버네티스의 문제인제 아니면 노드 자체의 문제인지를 빠르게 판단 후 조치를 취하면 된다. 이번에는 노드 자체의 문제였기 때문에 약간의 시행착오가 있었지만 노드 그룹을 삭제하고 다시 생성 후 서비스를 삭제 및 재실행 함으로써 해결이 되었다.
4. 기타 고려사항: 서비스를 내렸다가 올리면 문제가 되는데 바로 DNS 주소 문제이다. EKS에서는 DNS 주소를 ALB에서 자동으로 만들어 주는데 EKS에서 서비스를 삭제 후 다시 실행하면 ALB DNS 주소가 새로 발급이 된다. 새로 발급된 DNS주소가 왜 문제가 되냐면 이미 기존의 발급된 ALB DNS 주소로 https://korea.co.kr 과 같은 도메인을 연결해 놓았을 것이다. 허나 DNS 주소가 바뀌어 버리면 해당 도메인 연결 설정을 새로 해줘야 하는 번거로움이 존재한다.
도메인 관리를 본인이 하면 뭐 Route53 서비스 등에서 ALB와 도메인 맵핑만 다시 해주면 되지만 보통 네트워크 팀에서 따로 도메인 서버를 관리하므로, 네트워크 팀에 ALB 주소가 변경 될때마다 연락을 해야하는 번거로움이 존재한다.
- 그러므로 Service.yaml 은 왠만해서는 삭제하지 않는것이 좋다. 업데이트는 상관이 없다. 어차피 기존의 발급된 ALB DNS주소를 기본으로 내용만 업데이트 하는 것이므로...
여기까지 쓰자.
다른 추가내용 발생되면 아래에 추가 하겠다.
- 끝 -
'⌛ AWS 인프라 구성하기 (MiniProject) > ✅ 장애내용 및 해결방안' 카테고리의 다른 글
Evicted pod 문제 해결하기 (0) | 2022.09.28 |
---|---|
error: You must be logged in to the server (Unauthorized) 오류 발생시 해결 방안 (0) | 2022.07.07 |
finalizers 를 활용한 서비스 강제 제거 (0) | 2022.06.14 |
{"level":"error","ts":11111111111111,"logger":"setup","msg":"unable to create controller","controller":"Ingress","error":"the server could not find the requested resource"} (2) | 2022.06.14 |
cert-manager 오류 발생 시 해결방법 (0) | 2022.06.14 |