Geo와 함께 GitLab 컨테이너 레지스트리 메타데이터 데이터베이스 사용
GitLab v19.5요약
GitLab 컨테이너 레지스트리를 Geo와 함께 사용해 컨테이너 이미지를 복제합니다. 각 보조 사이트에는 메타데이터 데이터베이스용으로 자체 PostgreSQL 인스턴스가 별도로 있어야 합니다. Geo 지원을 설정하려면 다음을 수행합니다.
GitLab 컨테이너 레지스트리를 Geo와 함께 사용해 컨테이너 이미지를 복제합니다. 각 사이트의 컨테이너 레지스트리 메타데이터 데이터베이스는 서로 독립적이며 Postgres 복제를 사용하지 않습니다.
각 보조 사이트에는 메타데이터 데이터베이스용으로 자체 PostgreSQL 인스턴스가 별도로 있어야 합니다.
컨테이너 레지스트리와 Geo를 사용하는 GitLab 인스턴스 생성#
사전 요구 사항:
- 새 GitLab 인스턴스.
- 데이터가 없는, 인스턴스에 구성된 컨테이너 레지스트리.
Geo 지원을 설정하려면 다음을 수행합니다.
- 기본 사이트와 보조 사이트에 Geo를 설정합니다. 자세한 내용은 단일 노드 사이트 두 개에 Geo 설정을 참고합니다.
- 기본 사이트와 보조 사이트에서 각 사이트마다 별도의 외부 데이터베이스를 사용해 메타데이터 데이터베이스를 설정합니다.
- 컨테이너 레지스트리 복제를 구성합니다.
기존 Geo 사이트에 컨테이너 레지스트리 추가#
사전 요구 사항:
- 기본 사이트와 보조 사이트로 설정된 새 GitLab 인스턴스 두 개.
- 데이터가 없는, 기본 사이트에 구성된 컨테이너 레지스트리.
기존 Geo 보조 사이트에 컨테이너 레지스트리를 추가하려면 다음을 수행합니다.
- 보조 사이트에서 컨테이너 레지스트리를 활성화합니다.
- 기본 사이트와 보조 사이트에서 각 사이트마다 별도의 외부 데이터베이스를 사용해 메타데이터 데이터베이스를 설정합니다.
- 컨테이너 레지스트리 복제를 구성합니다.
기존 GitLab 인스턴스에 Geo 지원과 컨테이너 레지스트리 추가#
사전 요구 사항:
- 컨테이너 레지스트리가 구성되지 않은 기존 GitLab 인스턴스.
- 기존 Geo 사이트 없음.
기존 인스턴스에 Geo 지원을 추가하고 두 Geo 사이트 모두에 컨테이너 레지스트리를 추가하려면 다음을 수행합니다.
- 기존 인스턴스(기본 사이트)에 Geo를 설정하고 보조 사이트를 추가합니다. 자세한 내용은 단일 노드 사이트 두 개에 Geo 설정을 참고합니다.
- 기본 사이트와 보조 사이트에서 다음을 수행합니다.
- 컨테이너 레지스트리를 활성화합니다.
- 각 사이트마다 별도의 외부 데이터베이스를 사용해 메타데이터 데이터베이스를 설정합니다.
- 컨테이너 레지스트리 복제를 구성합니다.
컨테이너 레지스트리가 구성된 인스턴스에 Geo 지원 추가#
다음 섹션에서는 컨테이너 레지스트리가 구성된 기존 GitLab 인스턴스에 Geo 지원을 추가하는 방법을 설명합니다.
다음 중 하나를 설정할 수 있습니다.
- 외부 데이터베이스 연결.
- 기본 컨테이너 레지스트리 메타데이터 데이터베이스.
외부 컨테이너 레지스트리 메타데이터 데이터베이스 사용#
사전 요구 사항:
- 컨테이너 레지스트리가 구성된 기존 GitLab 인스턴스.
- 기존 Geo 사이트 없음.
기존 인스턴스에 Geo 지원을 추가하고 보조 사이트에 컨테이너 레지스트리를 추가하려면 다음을 수행합니다.
- 기존 인스턴스(기본 사이트)에 Geo를 설정하고 보조 사이트를 추가합니다. 자세한 내용은 단일 노드 사이트 두 개에 Geo 설정을 참고합니다.
- 보조 사이트에서 다음을 수행합니다.
- 컨테이너 레지스트리를 활성화합니다.
- 별도의 외부 데이터베이스를 사용해 메타데이터 데이터베이스를 설정합니다.
- 컨테이너 레지스트리 복제를 구성합니다.
기본 컨테이너 레지스트리 메타데이터 데이터베이스 사용#
사전 요구 사항:
- 컨테이너 레지스트리가 구성된 기존 GitLab 인스턴스.
- 기본 PostgreSQL 인스턴스를 사용하는 컨테이너 레지스트리 메타데이터 데이터베이스.
- 기존 Geo 사이트 없음.
이 시나리오에서는 메타데이터 데이터베이스를 외부 PostgreSQL 인스턴스로 옮겨야 합니다.
- 메타데이터 데이터베이스를 외부 PostgreSQL 인스턴스로 옮기는 단계를 수행합니다.
- 이어서 기존 GitLab 인스턴스에 Geo 지원과 컨테이너 레지스트리 추가의 단계를 수행합니다.
레거시 메타데이터에서 컨테이너 레지스트리 마이그레이션#
이 시나리오에서는 기존 Geo 사이트에서 컨테이너 레지스트리를 레거시 메타데이터에서 외부 PostgreSQL 메타데이터 데이터베이스로 마이그레이션해야 합니다.
사전 요구 사항:
- GitLab 17.3 이상(데이터베이스 메타데이터 지원)
- 기본 사이트와 보조 사이트에 구성된 Geo
- 레거시 메타데이터를 사용하는 양쪽 사이트의 컨테이너 레지스트리
- 두 레지스트리 모두에 기존 데이터(푸시된 이미지)가 있어야 합니다
마이그레이션 단계#
다운타임은 가져오기 방식에 따라 달라집니다. 가져오기 방식에 대한 권장 사항은 적합한 가져오기 방식 선택을 참고합니다.
마이그레이션 대상 레지스트리는 가져오기가 진행되는 동안 읽기 전용입니다.
마이그레이션 중에도 나머지 Geo 복제는 계속 진행됩니다.
메타데이터 데이터베이스를 마이그레이션하려면 다음을 수행합니다.
- 보조 사이트에서 기존 레거시 메타데이터를 새 메타데이터 데이터베이스로 마이그레이션합니다.
- 기본 사이트에서 기존 레거시 메타데이터를 새 메타데이터 데이터베이스로 마이그레이션합니다.
- Geo 복제가 계속 동작하는지 확인합니다.
기본 사이트가 이미 마이그레이션된 경우 보조 사이트 추가 또는 재구축#
사전 요구 사항:
- 컨테이너 레지스트리가 메타데이터 데이터베이스를 사용하고 데이터를 보유한 기존 Geo 기본 사이트. 기본 사이트는 레거시 메타데이터에서 컨테이너 레지스트리를 마이그레이션하면 이 상태가 됩니다.
- 추가할 보조 사이트로, 이미 Geo 사이트로 설정되어 있어야 합니다. 또는 재구축할 기존 보조 사이트.
다음 단계는 보조 사이트의 레지스트리 스토리지와 데이터베이스를 함께 교체합니다. 레지스트리 스토리지와 데이터베이스가 모두 온전한 보조 사이트의 복구 경로는 아닙니다.
보조 사이트의 레지스트리가 데이터가 있는 스토리지를 대상으로 시작하기 전에 보조 사이트의 레지스트리 데이터베이스를 프로비저닝하고 마이그레이션합니다. 먼저 시작한 레지스트리에는 기록할 스키마가 없습니다. prefer 모드에서는 락 파일을 찾지 못한 레지스트리가 레거시 메타데이터로 대체되지 않습니다. 접근 가능한 데이터베이스가 필요하며, 비어 있는 데이터베이스를 그대로 사용해 빈 카탈로그를 제공합니다.
보조 사이트를 추가하거나 재구축하려면 다음을 수행합니다.
- 기본 사이트에서 레지스트리가 메타데이터 데이터베이스를 사용하고 데이터를 보유하는지 확인합니다. 백엔드를 확인하는 방법은 활성 메타데이터 백엔드 확인을 참고합니다. 기본 사이트가 아직 레거시 메타데이터를 사용한다면 대신 레거시 메타데이터에서 컨테이너 레지스트리 마이그레이션을 사용합니다.
- 보조 사이트에서 레지스트리 상태를 준비합니다.
다음 중 하나를 완료합니다.
-
기존 보조 사이트를 재구축하는 경우, 교체할 레지스트리 상태를 제거합니다.
-
레지스트리를 중지합니다.
-
레지스트리 오브젝트 스토리지의 내용을 삭제합니다.
-
해당 사이트의 레지스트리에 구성된 데이터베이스 이름과 소유자를 사용해, 그 사이트의 레지스트리 데이터베이스 인스턴스에서 레지스트리 데이터베이스를 삭제하고 다시 만듭니다. 예를 들어
psql에서 다음과 같이 합니다.DROP DATABASE registry; CREATE DATABASE registry OWNER registry;
스토리지 내용과 데이터베이스를 모두 제거합니다. 데이터베이스는 다시 만들었지만 스토리지에 데이터가 있는 사이트는 이 절차에도, 신규 구축(greenfield) 절차에도 해당하지 않습니다.
-
-
새 보조 사이트를 추가하는 경우, 보조 사이트의 레지스트리 오브젝트 스토리지가 비어 있는지 확인합니다. 스토리지에 데이터가 있거나 이전 시도에서 레지스트리 데이터베이스가 남아 있다면, 해당 사이트를 재구축 대상으로 보고 앞의 경로를 대신 완료합니다.
-
- 보조 사이트에서 데이터베이스는 여전히 비활성화한 상태로 레지스트리 데이터베이스 연결을 구성한 다음 GitLab을 재구성합니다. 다음 단계의 마이그레이션은 레지스트리 구성 파일에서 연결을 읽으므로, 마이그레이션을 실행하기 전에 연결이 있어야 합니다.
- 보조 사이트에서 데이터베이스 마이그레이션을 적용합니다.
- 보조 사이트에서 데이터베이스를 활성화하고 GitLab을 재구성합니다.
- 보조 사이트에 아직 구성되어 있지 않다면 컨테이너 레지스트리 복제를 구성합니다.
- 보조 사이트에 이미지가 있는지 확인합니다. 기본 사이트와 비교합니다.
/v2/_catalog의 카탈로그.- 리포지터리의 태그 목록과 태그의
Docker-Content-Digest응답 헤더. 다이제스트가 일치해야 합니다. - 각 사이트의 자체 레지스트리 데이터베이스에 있는 리포지터리, 매니페스트, 태그 행 수.
두 사이트 사이에서 오브젝트 수는 비교하지 않습니다. 레거시 메타데이터에서 마이그레이션된 기본 사이트는 이전 메타데이터 파일을 그대로 유지하지만, 메타데이터 데이터베이스를 기반으로 구축한 보조 사이트는 콘텐츠 블롭만 저장하므로 기본 사이트가 항상 더 많은 오브젝트를 보유합니다.
푸시할 때마다 차이가 커진다면 다른 원인이 있습니다. 여전히 레거시 메타데이터를 사용하는 보조 사이트에서 알려진 원인 하나는 이슈 590744를 참고합니다.