InfoGrab DocsInfoGrab Docs

정리 정책

요약

정리 정책은 사용자가 설정한 파라미터에 따라 오브젝트를 자동으로 제거하는 반복적인 백그라운드 프로세스입니다. 컨테이너 레지스트리의 정리 정책은 단일 프로젝트에 호스팅된 모든 컨테이너 리포지터리에 적용됩니다. ContainerExpirationPolicy는 컨테이너 레지스트리 정리 정책에 대한 모든 파라미터를 보유합니다.

정리 정책은 사용자가 설정한 파라미터에 따라 오브젝트를 자동으로 제거하는 반복적인 백그라운드 프로세스입니다.

컨테이너 레지스트리#

컨테이너 레지스트리의 정리 정책은 단일 프로젝트에 호스팅된 모든 컨테이너 리포지터리에 적용됩니다. 정리 파라미터와 일치하는 모든 태그가 제거됩니다.

파라미터#

ContainerExpirationPolicy는 컨테이너 레지스트리 정리 정책에 대한 모든 파라미터를 보유합니다.

파라미터는 두 그룹으로 나뉩니다:

  • 보관할 태그를 정의하는 파라미터:

keep_n. 가장 최근 n개의 태그를 보관합니다.

  • name_regex_keep. 이 정규 표현식과 일치하는 태그를 보관합니다.

  • 삭제할 태그를 정의하는 파라미터:

older_than. 이 타임스탬프보다 오래된 태그를 삭제합니다.

  • name_regex. 이 정규 표현식과 일치하는 태그를 삭제합니다.

나머지 파라미터는 정책이 실행되는 시점에 영향을 줍니다:

  • enabled. 정책의 활성화 여부를 정의합니다.

  • cadence. 정책의 실행 주기를 정의합니다.

  • next_run_at. 다음 실행 시점을 정의합니다.

실행#

GitLab.com에서 처리해야 하는 정책의 수가 많기 때문에, 실행은 다음 설계를 따릅니다.

  • 정책 실행은 시간이 제한됩니다.

  • 정책 실행은 완전하거나 부분적으로 완료됩니다.

  • 백그라운드 job은 두 가지 우선순위를 기반으로 다음에 실행할 job을 결정합니다:

과거 시점의 next_run_at을 가진 정책.

  • 부분적으로 실행된 정책.

컨테이너 리포지터리에서 정리 정책 상태를 추적하기 위해, ContainerRepository 모델에 expiration_policy_cleanup_status를 사용합니다.

이 실행을 위한 백그라운드 job은 다음과 같이 구성됩니다:

  • 매 시간 실행되는 크론 백그라운드 job.

  • 정책 실행이 필요한 컨테이너 리포지터리를 순환하는 백그라운드 job 세트.

크론 백그라운드 job#

크론 백그라운드 job은 매우 단순합니다. 주요 작업은 다음과 같습니다:

  • 정리가 필요한 컨테이너 리포지터리가 있는지 확인합니다. 있다면, 제한된 용량 job을 한도 내에서 필요한 만큼 큐에 추가합니다.

  • 정리 정책에 대한 메트릭을 계산하고 기록합니다.

제한된 용량 job#

job제한된 용량 컨선(limited capacity concern)을 기반으로 합니다.

이 job은 특정 용량까지 병렬로 실행됩니다.

이 job의 주요 역할은 정리가 필요한 다음 컨테이너 리포지터리를 선택하고 관련 서비스를 호출하는 것입니다.

이 단계에서 두 가지 우선순위가 순서대로 평가됩니다. 컨테이너 리포지터리가 발견되면 정리 서비스가 호출됩니다.

특정 컨테이너 리포지터리에서 동시에 하나의 정리만 실행되도록 보장하기 위해, 데이터베이스 잠금과 expiration_policy_cleanup_status 칼럼을 함께 사용합니다.

이 job은 더 이상 정리가 필요한 컨테이너 리포지터리가 없을 때까지 자신을 다시 큐에 추가합니다.

서비스#

제한된 용량 job에서 발생하는 서비스 호출 흐름은 다음과 같습니다:

flowchart TD job[Limited capacity job] --> cleanup([ContainerExpirationPolicies::CleanupService]) cleanup --> cleanup_tags([Projects::ContainerRepository::CleanupTagsService]) cleanup_tags --> delete_tags([Projects::ContainerRepository::DeleteTagsService])

정리 태그 서비스는 삭제할 태그 목록을 구성하기 위해 매우 구체적인 실행 순서를 사용합니다.

마지막으로, 정리 태그 서비스와 삭제 태그 서비스는 파사드(facade)를 사용하여 동작합니다. 실제 구현은 연결된 컨테이너 레지스트리의 유형에 따라 달라집니다. GitLab 컨테이너 레지스트리가 연결된 경우, 컨테이너 레지스트리 API의 더 나은 활용과 같은 여러 개선 사항이 정리 정책 실행 중에 적용됩니다.

과거 참조 링크#

정리 정책

GitLab v19.1
원문 보기
요약

정리 정책은 사용자가 설정한 파라미터에 따라 오브젝트를 자동으로 제거하는 반복적인 백그라운드 프로세스입니다. 컨테이너 레지스트리의 정리 정책은 단일 프로젝트에 호스팅된 모든 컨테이너 리포지터리에 적용됩니다. ContainerExpirationPolicy는 컨테이너 레지스트리 정리 정책에 대한 모든 파라미터를 보유합니다.

정리 정책은 사용자가 설정한 파라미터에 따라 오브젝트를 자동으로 제거하는 반복적인 백그라운드 프로세스입니다.

컨테이너 레지스트리#

컨테이너 레지스트리의 정리 정책은 단일 프로젝트에 호스팅된 모든 컨테이너 리포지터리에 적용됩니다. 정리 파라미터와 일치하는 모든 태그가 제거됩니다.

파라미터#

ContainerExpirationPolicy는 컨테이너 레지스트리 정리 정책에 대한 모든 파라미터를 보유합니다.

파라미터는 두 그룹으로 나뉩니다:

  • 보관할 태그를 정의하는 파라미터:

keep_n. 가장 최근 n개의 태그를 보관합니다.

  • name_regex_keep. 이 정규 표현식과 일치하는 태그를 보관합니다.

  • 삭제할 태그를 정의하는 파라미터:

older_than. 이 타임스탬프보다 오래된 태그를 삭제합니다.

  • name_regex. 이 정규 표현식과 일치하는 태그를 삭제합니다.

나머지 파라미터는 정책이 실행되는 시점에 영향을 줍니다:

  • enabled. 정책의 활성화 여부를 정의합니다.

  • cadence. 정책의 실행 주기를 정의합니다.

  • next_run_at. 다음 실행 시점을 정의합니다.

실행#

GitLab.com에서 처리해야 하는 정책의 수가 많기 때문에, 실행은 다음 설계를 따릅니다.

  • 정책 실행은 시간이 제한됩니다.

  • 정책 실행은 완전하거나 부분적으로 완료됩니다.

  • 백그라운드 job은 두 가지 우선순위를 기반으로 다음에 실행할 job을 결정합니다:

과거 시점의 next_run_at을 가진 정책.

  • 부분적으로 실행된 정책.

컨테이너 리포지터리에서 정리 정책 상태를 추적하기 위해, ContainerRepository 모델에 expiration_policy_cleanup_status를 사용합니다.

이 실행을 위한 백그라운드 job은 다음과 같이 구성됩니다:

  • 매 시간 실행되는 크론 백그라운드 job.

  • 정책 실행이 필요한 컨테이너 리포지터리를 순환하는 백그라운드 job 세트.

크론 백그라운드 job#

크론 백그라운드 job은 매우 단순합니다. 주요 작업은 다음과 같습니다:

  • 정리가 필요한 컨테이너 리포지터리가 있는지 확인합니다. 있다면, 제한된 용량 job을 한도 내에서 필요한 만큼 큐에 추가합니다.

  • 정리 정책에 대한 메트릭을 계산하고 기록합니다.

제한된 용량 job#

job제한된 용량 컨선(limited capacity concern)을 기반으로 합니다.

이 job은 특정 용량까지 병렬로 실행됩니다.

이 job의 주요 역할은 정리가 필요한 다음 컨테이너 리포지터리를 선택하고 관련 서비스를 호출하는 것입니다.

이 단계에서 두 가지 우선순위가 순서대로 평가됩니다. 컨테이너 리포지터리가 발견되면 정리 서비스가 호출됩니다.

특정 컨테이너 리포지터리에서 동시에 하나의 정리만 실행되도록 보장하기 위해, 데이터베이스 잠금과 expiration_policy_cleanup_status 칼럼을 함께 사용합니다.

이 job은 더 이상 정리가 필요한 컨테이너 리포지터리가 없을 때까지 자신을 다시 큐에 추가합니다.

서비스#

제한된 용량 job에서 발생하는 서비스 호출 흐름은 다음과 같습니다:

flowchart TD job[Limited capacity job] --> cleanup([ContainerExpirationPolicies::CleanupService]) cleanup --> cleanup_tags([Projects::ContainerRepository::CleanupTagsService]) cleanup_tags --> delete_tags([Projects::ContainerRepository::DeleteTagsService])

정리 태그 서비스는 삭제할 태그 목록을 구성하기 위해 매우 구체적인 실행 순서를 사용합니다.

마지막으로, 정리 태그 서비스와 삭제 태그 서비스는 파사드(facade)를 사용하여 동작합니다. 실제 구현은 연결된 컨테이너 레지스트리의 유형에 따라 달라집니다. GitLab 컨테이너 레지스트리가 연결된 경우, 컨테이너 레지스트리 API의 더 나은 활용과 같은 여러 개선 사항이 정리 정책 실행 중에 적용됩니다.

과거 참조 링크#