InfoGrab DocsInfoGrab Docs

정리 정책

GitLab 컨테이너 레지스트리의 정리 정책 파라미터, 실행 구조 및 관련 서비스 흐름을 설명합니다.

정리 정책은 사용자가 설정한 파라미터에 따라 오브젝트를 자동으로 제거하는 반복적인 백그라운드 프로세스입니다. 컨테이너 레지스트리 # 컨테이너 레지스트리의 정리 정책은 단일 프로젝트에 호스팅된 모든 컨테이너 리포지터리에 적용됩니다. 정리 파라미터와 일치하는 모든 태그가 제거됩니다. 파라미터 # 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에서 발생