이슈
- 회사에서 베타 런칭한 서비스의 k8s 클러스터 노드가 주기적으로 다운되는 이슈가 발생함.
- 1달, 2주, 1주, 3~4일 등 주기가 점점 짧아지고 있던 상황
- 노드 모니터링(NHN cloud Console) 결과 CPU, Memory 점유율이 급격히 올라감.
- 그로 인해 특정 파드 down 및 순단 발생
원인 분석
- 확인 결과, 일부 파드 리소스에 대해 리미트가 설정되지 않는 것을 확인함.
- 그로 인해 오버커밋되어 노드 CPU/Memory 점유율이 올라간 것을 확인함.
- 또한 OOM Killed 이벤트를 통해 비정상적으로 리스타트된 파드들을 확인
해결 방법 설정
-
리미트 설정
- 부하 발생 시, 리미트가 없어 급격히 올라갈 가능성이 있음.
- 리미트를 설정하여 점유율이 급격히 올라가는 것을 방지하려 함.
-
리퀘스트 설정
- 리미트 설정 결과, 리퀘스트에 비해 많은 자원이 필요한 것을 알게 됨.
- 리미트 값과 동일하게 리퀘스트 값 설정함.(Guaranteed)
리퀘스트와 리밋을 통일한 이유(Qos Guaranteed)
- 최초 구동 시, 리미트 만큼의 자원이 필요함.
- 일부 노드에 대해 CPU, Memory 자원이 부족하여 오버커밋할 경우 CPU Throttling 발생할 수 있음.
- 또한 최초 구동 시, 스케쥴된 이후 리퀘스트보다 많은 리소스가 필요한 경우 무한 리스타트될 수 있음.
QoS Guaranteed
- 자원의 오버커밋을 방지하고(Limit 지정) 원하는 사용량을 보장받을 수 있다.(Request 지정)
- 우선순위가 제일 높기 때문에 자원 부족 시, 마지막까지 프로세스를 유지시킬 수 있다.
해결 과정 중 특이사항
-
데몬셋 배포 중 노드 리소스 부족 이슈
- 일부 노드가 CPU4, Memory 4Gi 제한으로 리소스가 다소 부족함.
- 해당 노드에 무제한 리소스가 포함되어 약 6-8개의 파드가 배포된 상태
- 데몬셋 리퀘스트, 리미트 적용 시 팬딩 상태로 해당 노드에 스케쥴링 되지 못함.
해결 방안
- 해당 노드 스케쥴 제외 후 일부 파드 다른 노드로 추출 후 리소스 조정
무중단을 보장하기 위해 drain 대신 디플로이먼트 수정하여 롤링업데이트 방식으로 추출했습니다.
또한 리미트없는 파드가 다수 존재하여 drain 으로 한번에 처리할 경우 옮겨간 노드에 문제가
발생할 수 있어 파드 별 수동으로 추출하게 되었습니다.
-
PVC 설정된 파드는 PV 노드로만 스케쥴링 되는 현상
- PVC 설정된 경우, PV 데이터가 저장된 노드로만 스케쥴링되는 현상 발생
- 확인 결과, Local PV 방식으로 생성되어 컨테이너가 PV 노드에 종속됨을 확인함.
해결 방안
- 해당 파드 리소스가 설정될 때까지 다른 파드들을 순차적으로 이동시켜 리소스를 할당시켰습니다.
결과
처리 후 10일간 모니터링한 결과 아래와 같이 이슈가 해소되었음을 확인할 수 있었습니다.
- CPU, Memory 점유율에 특이사항 발생하지 않음.
- OOM Killed 이벤트 발생하지 않음.
- prometheus server 리스타트 확인
추후 개선사항
공통 개선 사항
- 리소스 추가 대비 노드 자원 증설
- 리소스 사용량 모니터링 후 request, limit 재조정
프로메테우스
- prometheus server 리스타트 관련 리소스 사용률 및 로그 확인
- 원인 파악 및 해결