완료된 잡의 자동 정리
완료된 잡의 자동 정리 (Automatic Cleanup for Finished Jobs)
Job이 완료되면 그 Job을 API에 유지하는(즉시 삭제하지 않는) 것이 유용해요. Job이 성공했는지 실패했는지 알 수 있으니까요.
Kubernetes의 TTL-after-finished 컨트롤러는 실행이 완료된 Job 객체의 수명을 제한하는 TTL(time to live) 메커니즘을 제공합니다.
출처: 문서
완료된 Job 정리 (Cleanup for finished Jobs)
TTL-after-finished 컨트롤러는 Job에 대해서만 지원됩니다. 이 메커니즘을 사용해 Job의 .spec.ttlSecondsAfterFinished 필드를 지정하면 완료된 Job(Complete 또는 Failed)을 자동으로 정리할 수 있어요. 이 예시와 같이요.
TTL-after-finished 컨트롤러는 Job이 완료된 후 TTL 초가 지나면 그 Job이 정리 자격이 있다고 가정합니다. 타이머는 Job의 상태 컨디션이 Complete 또는 Failed임을 보여주도록 바뀌는 순간 시작됩니다. TTL이 만료되면 그 Job은 계단식 제거(cascading removal) 자격이 생깁니다. TTL-after-finished 컨트롤러가 Job을 정리할 때는 계단식으로 삭제합니다. 즉 의존 객체도 함께 삭제한다는 뜻입니다.
Kubernetes는 파이널라이저(finalizers)를 기다리는 것 같은 Job에 대한 객체 수명 주기 보장을 준수합니다.
TTL 초는 언제든지 설정할 수 있어요. Job의 .spec.ttlSecondsAfterFinished 필드를 설정하는 몇 가지 예시입니다.
- Job 매니페스트에 이 필드를 지정해, 완료 후 일정 시간이 지나면 자동으로 정리되게 합니다.
- 이미 완료된 기존 Job에 이 필드를 수동으로 설정해 정리 자격을 부여합니다.
- 변경(mutating) admission 웹훅을 사용해 Job 생성 시 이 필드를 동적으로 설정합니다. 클러스터 관리자는 이를 사용해 완료된 작업에 대한 TTL 정책을 강제할 수 있어요.
- 변경 admission 웹훅을 사용해 Job이 완료된 후 이 필드를 동적으로 설정하고, Job 상태, 라벨에 따라 다른 TTL 값을 선택합니다. 이 경우 웹훅은 Job의
.status변경을 감지하고 Job이 완료로 표시될 때만 TTL을 설정해야 합니다. - 특정 셀렉터와 일치하는 Job의 정리 TTL을 관리하는 자신만의 컨트롤러를 작성합니다.
주의 사항 (Caveats)
완료된 Job의 TTL 업데이트 (Updating TTL for finished Jobs)
Job이 생성되거나 완료된 후 TTL 기간(예: .spec.ttlSecondsAfterFinished 필드)을 수정할 수 있어요. 기존 ttlSecondsAfterFinished 기간이 만료된 후 TTL 기간을 연장하면, TTL 연장 업데이트가 성공적인 API 응답을 반환하더라도 Kubernetes가 그 Job을 보존한다고 보장하지 않습니다.
시간 왜곡 (Time skew)
TTL-after-finished 컨트롤러는 TTL이 만료됐는지 결정하기 위해 Kubernetes jobs에 저장된 타임스탬프를 사용하므로, 이 기능은 클러스터의 시간 왜곡(time skew)에 민감합니다. 이로 인해 컨트롤 플레인이 잘못된 시점에 Job 객체를 정리할 수 있어요.
시계가 항상 정확하지는 않지만 그 차이는 아주 작아야 합니다. 0이 아닌 TTL을 설정할 때 이 위험을 인지하세요.
다음 단계 (What's next)
- Job 자동 정리 (Clean up Jobs automatically) 읽어보기
- 이 메커니즘을 추가하는 Kubernetes Enhancement Proposal (KEP) 참고하기