문제 상황
- 크론잡 스케쥴이 되었지만 더이상 작업이 실행되지 않음
- 크론잡 이벤트 메세지중 cronjob-controller 에 의해 발생된 Cannot determine if job needs to be started: too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew 라는 메세지 확인
문제 발생 이유
- 이전에 크론잡이 스케쥴에 맞춰 잡을 생성하고, 해당 잡에 의해 파드가 관리됨
- 파드에서 실행 된 애플리케이션에 이슈로 인해 작업이 종료되지 않아서 파드가 계속 실행 상태로 남아있었음
- 해당 크론잡에는 concurrencyPolicy: Forbid 설정이 되어있었음
- 위 설정으로 인해 이전 작업이 완료 되지 않으면 다음 스케쥴에 새로운 작업이 실행되지 않음
- 실행되지 않은 작업이 계속 쌓여서 100회 이상 실패하고 크론잡 컨트롤러에서 잡을 더이상 실행하지 않고 에러 로그를 남김, 이후 작업 실행 제한
- 에러 로그: Cannot determine if job needs to be started: too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew
해결법
- 쿠버네티스 공식 문서에 관련 내용이 있음 - 크론잡의 한계
- 모든 크론잡에 대해 크론잡 컨트롤러 는 마지막 일정부터 지금까지 얼마나 많은 일정이 누락되었는지 확인한다. 만약 100회 이상의 일정이 누락되었다면, 잡을 실행하지 않고 아래와 같은 에러 로그를 남긴다.
- 크론잡 설정에서 spec.startingDeadlineSeconds 옵션을 설정하면 컨트롤러는 마지막 일정부터 지금까지 대신 startingDeadlineSeconds 값에서 몇 개의 잡이 누락되었는지 카운팅하게 되어 다시 잡이 정상 실행될 수 있도록 할 수 있다.
- ex) startingDeadlineSeconds: 200 로 설정시, 컨트롤러는 최근 200초 내 몇 개의 잡이 누락되었는지 카운팅한다.
이번 이슈에서는 작업이 특정시간이 아닌 시간에 실행해도 상관없고 작업이 실행되기만 하면 되었다.
startingDeadlineSeconds 을 설정하고 스케쥴을 조절(임시로 앞당김)해서 작업이 다시 실행되는걸 확인했다.
이후에 기존 스케쥴로 바꾸는 방식으로 문제를 해결했다.
근본적으로 종료되지 않은 작업 및 이슈가 되는 파드에 대한 모니터링을 적절하게 해서 크론잡 스케쥴에 대한 이슈가 발생하지 않았다면 더 좋았을 것 같다.
오류는 어떤 상황에서든 발생할 수 있기 때문에 적절한 대처 방안을 계획 해놓거나, 모니터링을 잘 해서 빠르게 대처할 수 있도록 해야한다.
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스/k8s] 기본 실습 명령어 - 개발하는 지토 (0) | 2022.08.01 |
---|
댓글