완료된 잡의 자동 정리

완료된 잡의 자동 정리 (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)

더 알아보기 (Learn more)