단계별 가져오기
GitLab v19.5Offering: GitLab Self-Managed
요약
오프라인 가비지 컬렉션을 정기적으로 실행한다면 1단계 가져오기 방식을 사용합니다. 가져오기가 진행되는 동안 레지스트리를 read-only 모드로 유지해야 합니다. /etc/gitlab/gitlab.rb 파일의 registry['database'] 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.
오프라인 가비지 컬렉션을 정기적으로 실행한다면 1단계 가져오기 방식을 사용합니다. 이 방식은 3단계 가져오기 방식보다 작업이 단순합니다.
1단계 가져오기#
가져오기가 진행되는 동안 레지스트리를 read-only 모드로 유지해야 합니다.
그렇지 않으면 가져오기 중에 기록된 데이터에 접근할 수 없게 되거나 데이터가 불일치합니다.
대신 레지스트리를 중지하면 데이터베이스 마이그레이션을 적용하는 단계에서 레지스트리가 다시 시작될 수 있으며, 그러면 가져오기 중에 레지스트리가 푸시를 받아들이게 됩니다.
-
/etc/gitlab/gitlab.rb파일의registry['database']섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.registry['database'] = { 'enabled' => false, # Must be false! } -
레지스트리가
read-only모드로 설정되어 있는지 확인합니다./etc/gitlab/gitlab.rb파일을 편집해registry['storage']구성에maintenance섹션을 추가합니다. 예를 들어gs://my-company-container-registry버킷을 사용하는gcs기반 레지스트리라면 구성은 다음과 같습니다.## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => true # Must be set to true. } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
다음 명령을 실행합니다.
sudo gitlab-ctl registry-database import --log-to-stdout -
명령이 성공적으로 완료되면 레지스트리 가져오기가 모두 끝난 것입니다. 데이터베이스를 활성화하고, 구성에서 읽기 전용 모드를 해제하고, 레지스트리 서비스를 시작할 수 있습니다.
registry['database'] = { 'enabled' => true, # Must be enabled now! } ## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => false } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
/etc/gitlab/gitlab.rb파일의registry['database']섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.registry['database'] = { 'enabled' => false, # Must be false! } -
레지스트리가
read-only모드로 설정되어 있는지 확인합니다./etc/gitlab/gitlab.rb파일을 편집해registry['storage']구성에maintenance섹션을 추가합니다. 예를 들어gs://my-company-container-registry버킷을 사용하는gcs기반 레지스트리라면 구성은 다음과 같습니다.## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => true # Must be set to true. } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
다음 명령을 실행합니다.
sudo -u registry gitlab-ctl registry-database import --log-to-stdout -
명령이 성공적으로 완료되면 레지스트리 가져오기가 모두 끝난 것입니다. 데이터베이스를 활성화하고, 구성에서 읽기 전용 모드를 해제하고, 레지스트리 서비스를 시작할 수 있습니다.
registry['database'] = { 'enabled' => true, # Must be enabled now! } ## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => false } } } -
파일을 저장하고 GitLab을 재구성합니다.
사전 요구 사항:
- 외부 데이터베이스를 생성합니다.
-
/etc/gitlab/gitlab.rb파일에database섹션을 추가하되, 메타데이터 데이터베이스는 비활성화한 상태로 시작합니다.registry['database'] = { 'enabled' => false, # Must be false! 'host' => '<registry_database_host_placeholder_change_me>', 'port' => 5432, # Default, but set to the port of your database instance if it differs. 'user' => '<registry_database_username_placeholder_change_me>', 'password' => '<registry_database_placeholder_change_me>', 'dbname' => '<registry_database_name_placeholder_change_me>', 'sslmode' => 'require', # See the PostgreSQL documentation for additional information https://www.postgresql.org/docs/16/libpq-ssl.html. 'sslcert' => '</path/to/cert.pem>', 'sslkey' => '</path/to/private.key>', 'sslrootcert' => '</path/to/ca.pem>' } -
레지스트리가
read-only모드로 설정되어 있는지 확인합니다./etc/gitlab/gitlab.rb파일을 편집해registry['storage']구성에maintenance섹션을 추가합니다. 예를 들어gs://my-company-container-registry버킷을 사용하는gcs기반 레지스트리라면 구성은 다음과 같습니다.## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => true # Must be set to true. } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
아직 적용하지 않았다면 데이터베이스 마이그레이션을 적용합니다.
-
다음 명령을 실행합니다.
sudo gitlab-ctl registry-database import -
명령이 성공적으로 완료되면 레지스트리 가져오기가 모두 끝난 것입니다. 이제 데이터베이스를 활성화하고, 구성에서 읽기 전용 모드를 해제하고, 레지스트리 서비스를 시작할 수 있습니다.
registry['database'] = { 'enabled' => true, # Must be enabled now! 'host' => '<registry_database_host_placeholder_change_me>', 'port' => 5432, # Default, but set to the port of your database instance if it differs. 'user' => '<registry_database_username_placeholder_change_me>', 'password' => '<registry_database_placeholder_change_me>', 'dbname' => '<registry_database_name_placeholder_change_me>', 'sslmode' => 'require', # See the PostgreSQL documentation for additional information https://www.postgresql.org/docs/16/libpq-ssl.html. 'sslcert' => '</path/to/cert.pem>', 'sslkey' => '</path/to/private.key>', 'sslrootcert' => '</path/to/ca.pem>' } ## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => false } } } -
파일을 저장하고 GitLab을 재구성합니다.
이제 모든 작업에 메타데이터 데이터베이스를 사용할 수 있습니다.
가져오기 후#
대규모 레지스트리에서는 가져오기 후에 가비지 컬렉션 검토 대기열에 블롭이 수십만 개에서 수백만 개까지 쌓일 수 있습니다. 이는 정상이며, 워커 간격이 기본값이면 처리에 시간이 걸립니다.
예상되는 동작과 처리 속도를 높이는 방법은 다음을 참고합니다.
- 가져오기 완료 후 예상되는 동작의 개요는 가져오기 이후를 참고합니다.
- 가비지 컬렉션 검토 대기열을 모니터링하려면 온라인 가비지 컬렉션 상태 확인을 참고합니다.
- 대량으로 밀린 작업의 처리 속도를 일시적으로 높이려면 가비지 컬렉터 워커 간격 조정을 참고합니다.